From 0af24d2bef1c1b159e8527b7a06d60cab4efb5cf Mon Sep 17 00:00:00 2001 From: boblark Date: Mon, 29 Jun 2020 10:02:57 -0700 Subject: [PATCH] Add radio rfcn AnalyzePhase, Equalizer, FirGeneral, FM Det, sin_cos, Nois Blanker + example INO --- AudioAnalyzePhase_F32.cpp | 160 ++++++++++ AudioAnalyzePhase_F32.h | 271 +++++++++++++++++ AudioFilterEqualizer_F32.cpp | 192 ++++++++++++ AudioFilterEqualizer_F32.h | 178 +++++++++++ AudioFilterFIRGeneral_F32.cpp | 259 ++++++++++++++++ AudioFilterFIRGeneral_F32.h | 188 ++++++++++++ OpenAudio_ArduinoLibrary.h | 6 + RadioFMDetector_F32.cpp | 136 +++++++++ RadioFMDetector_F32.h | 277 ++++++++++++++++++ .../AudioTestAnalyzePhase_F32.ino | 114 +++++++ .../AudioTestPeakRMS/AudioTestPeakRMS.ino | 58 ++++ examples/AudioTestSinCos/AudioTestSinCos.ino | 96 ++++++ examples/ReceiverFM/FMOutputFIR39.gif | Bin 0 -> 70917 bytes examples/ReceiverFM/ReceiverFM.ino | 107 +++++++ examples/ReceiverFM/hilbert121A.h | 123 ++++++++ examples/ReceiverFM/hilbert19A.h | 21 ++ examples/ReceiverFM/hilbert251A.h | 253 ++++++++++++++++ examples/ReceiverPart1/Rcvr1Outputs.gnumeric | Bin 0 -> 13475 bytes examples/ReceiverPart1/ReceiverPart1.ino | 90 ++++++ examples/ReceiverPart1/hilbert121A.h | 123 ++++++++ examples/ReceiverPart1/hilbert19A.h | 21 ++ examples/ReceiverPart1/hilbert251A.h | 253 ++++++++++++++++ examples/ReceiverPart2/ReceiverPart2.ino | 177 +++++++++++ examples/ReceiverPart2/hilbert121A.h | 123 ++++++++ examples/ReceiverPart2/hilbert19A.h | 21 ++ examples/ReceiverPart2/hilbert251A.h | 253 ++++++++++++++++ examples/TestEqualizer1/TestEqualizer1.ino | 81 +++++ examples/TestEqualizer1/hilbert121A.h | 123 ++++++++ examples/TestEqualizer1/hilbert19A.h | 21 ++ examples/TestEqualizer1/hilbert251A.h | 253 ++++++++++++++++ .../TestEqualizer1Audio.ino | 105 +++++++ examples/TestFIRGeneral3/TestFIRGeneral3.ino | 88 ++++++ examples/TestFIRGeneralLarge4/HP55ieeeRSL.gif | Bin 0 -> 31463 bytes .../KaiserBetaSidelobes.gif | Bin 0 -> 50906 bytes examples/TestFIRGeneralLarge4/Test4.gnumeric | Bin 0 -> 220953 bytes .../TestFIRGeneralLarge4.ino | 127 ++++++++ .../TestFIRGeneralLarge5.ino | 82 ++++++ radioNoiseBlanker_F32.cpp | 90 ++++++ radioNoiseBlanker_F32.h | 126 ++++++++ readme.md | 6 + synth_sin_cos_f32.cpp | 103 +++++++ synth_sin_cos_f32.h | 162 ++++++++++ 42 files changed, 4867 insertions(+) create mode 100644 AudioAnalyzePhase_F32.cpp create mode 100644 AudioAnalyzePhase_F32.h create mode 100644 AudioFilterEqualizer_F32.cpp create mode 100644 AudioFilterEqualizer_F32.h create mode 100644 AudioFilterFIRGeneral_F32.cpp create mode 100644 AudioFilterFIRGeneral_F32.h create mode 100644 RadioFMDetector_F32.cpp create mode 100644 RadioFMDetector_F32.h create mode 100644 examples/AudioTestAnalyzePhase_F32/AudioTestAnalyzePhase_F32.ino create mode 100644 examples/AudioTestPeakRMS/AudioTestPeakRMS.ino create mode 100644 examples/AudioTestSinCos/AudioTestSinCos.ino create mode 100644 examples/ReceiverFM/FMOutputFIR39.gif create mode 100644 examples/ReceiverFM/ReceiverFM.ino create mode 100644 examples/ReceiverFM/hilbert121A.h create mode 100644 examples/ReceiverFM/hilbert19A.h create mode 100644 examples/ReceiverFM/hilbert251A.h create mode 100644 examples/ReceiverPart1/Rcvr1Outputs.gnumeric create mode 100644 examples/ReceiverPart1/ReceiverPart1.ino create mode 100644 examples/ReceiverPart1/hilbert121A.h create mode 100644 examples/ReceiverPart1/hilbert19A.h create mode 100644 examples/ReceiverPart1/hilbert251A.h create mode 100644 examples/ReceiverPart2/ReceiverPart2.ino create mode 100644 examples/ReceiverPart2/hilbert121A.h create mode 100644 examples/ReceiverPart2/hilbert19A.h create mode 100644 examples/ReceiverPart2/hilbert251A.h create mode 100644 examples/TestEqualizer1/TestEqualizer1.ino create mode 100644 examples/TestEqualizer1/hilbert121A.h create mode 100644 examples/TestEqualizer1/hilbert19A.h create mode 100644 examples/TestEqualizer1/hilbert251A.h create mode 100644 examples/TestEqualizer1Audio/TestEqualizer1Audio.ino create mode 100644 examples/TestFIRGeneral3/TestFIRGeneral3.ino create mode 100644 examples/TestFIRGeneralLarge4/HP55ieeeRSL.gif create mode 100644 examples/TestFIRGeneralLarge4/KaiserBetaSidelobes.gif create mode 100644 examples/TestFIRGeneralLarge4/Test4.gnumeric create mode 100644 examples/TestFIRGeneralLarge4/TestFIRGeneralLarge4.ino create mode 100644 examples/TestFIRGeneralLarge5/TestFIRGeneralLarge5.ino create mode 100644 radioNoiseBlanker_F32.cpp create mode 100644 radioNoiseBlanker_F32.h create mode 100644 synth_sin_cos_f32.cpp create mode 100644 synth_sin_cos_f32.h diff --git a/AudioAnalyzePhase_F32.cpp b/AudioAnalyzePhase_F32.cpp new file mode 100644 index 0000000..da1b69d --- /dev/null +++ b/AudioAnalyzePhase_F32.cpp @@ -0,0 +1,160 @@ +/* + * AudioAnalyzePhase_F32.cpp + * + * 31 March 2020 Rev 8 April 2020 + * Bob Larkin, in support of the library: + * Chip Audette, OpenAudio, Apr 2017 + * + * * Copyright (c) 2020 Bob Larkin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +/* There are two inputs, I and Q (Left and Right or 0 and 1) + * There is one output, the phase angle between the two inputs expressed in + * radians (180 degrees is Pi radians). See AudioAnalyzePhase_F32.h + * for details. + */ + +#include "AudioAnalyzePhase_F32.h" +#include +#include "mathDSP_F32.h" + +void AudioAnalyzePhase_F32::update(void) { + audio_block_f32_t *block0, *block1; + uint16_t i; + float32_t mult0, mult1, min0, max0, minmax0, min1, max1, minmax1; + float32_t min_max = 1.0f; // Filled in correctly, later + mathDSP_F32 mathDSP1; + +#if TEST_TIME + if (iitt++ >1000000) iitt = -10; + uint32_t t1, t2; + t1 = tElapse; +#endif + + // Get first input, 0 + block0 = AudioStream_F32::receiveWritable_f32(0); + if (!block0) { + if(errorPrint) Serial.println("AN_PHASE ERR: No input memory"); + return; + } + + // Get second input, 1 + block1 = AudioStream_F32::receiveWritable_f32(1); + if (!block1){ + if(errorPrint) Serial.println("AN_PHASE ERR: No input memory"); + AudioStream_F32::release(block0); + return; + } + + // Limiter on both inputs; can be used with narrow IIR filter + if (pdConfig & LIMITER_MASK) { + for (uint16_t j = 0; jlength; j++) { + if (block0->data[j]>=0.0f) + block0->data[j] = 1.0f; + else + block0->data[j] = -1.0f; + + if (block1->data[j]>=0.0f) + block1->data[j] = 1.0f; + else + block1->data[j] = -1.0f; + } + } + + // If needed, find a scaling factor for the multiplier type phase det + // This would not normally be used with a limiter---they are + // both trying to solve the same problem. + if(pdConfig & SCALE_MASK) { + min0 = 1.0E6f; max0 = -1.0E6f; + min1 = 1.0E6f; max1 = -1.0E6f; + for (i=0; i < block0->length; i++){ + if(block0->data[i] < min0) min0 = block0->data[i]; + if(block0->data[i] > max0) max0 = block0->data[i]; + if(block1->data[i] < min1) min1 = block1->data[i]; + if(block1->data[i] > max1) max1 = block1->data[i]; + } + minmax0 = max0 - min0; // 0 to 2 + minmax1 = max1 - min1; // 0 to 2 + min_max = minmax0 * minmax1; // 0 to 4 + } + + // multiply the two inputs to get phase plus second harmonic. Low pass + // filter and then apply ArcCos of the result to return the phase difference + // in radians. Multiply and leave result in 1 + arm_mult_f32(block0->data, block1->data, block1->data, block0->length); + + if (LPType == NO_LP_FILTER) { + for (i=0; i < block0->length; i++) + block0->data[i] = block1->data[i]; // Move back to block0 + } + else if(LPType == IIR_LP_FILTER) { + // Now filter 1, leaving result in 0. This is 4 BiQuads + arm_biquad_cascade_df1_f32(&iir_inst, block1->data, block0->data, block0->length); + } + else { // Alternate FIR filter for FIR_LP_FILTER + arm_fir_f32(&fir_inst, block1->data, block0->data, block0->length); + } + AudioStream_F32::release(block1); // Not needed further + + /* For variable, pdConfig: + * LIMITER_MASK: 0=No Limiter 1=Use limiter + * ACOS_MASK: 00=Use no acos linearizer 01=undefined + * 10=Fast, math-continuous acos() (default) 11=Accurate acos() + * SCALE_MASK: 0=No scale of multiplier 1=scale to min-max (default) + * UNITS_MASK: 0=Output in degrees 1=Output in radians (default) + */ + if(pdConfig & SCALE_MASK) + mult0 = 8.0f / min_max; + else + mult0 = 2.0f; + + if(pdConfig & UNITS_MASK) + mult1 = 1.0; + else + mult1 = 57.295779f; + + // Optionally, apply ArcCos() to linearize block0 output in radians * units to scale to degrees + if (pdConfig & ACOS_MASK) { + if((pdConfig & ACOS_MASK) == 0b00110) { // Accurate acosf from C-library + for (uint i = 0; idata[i] = mult1 * acosf(mult0 * block0->data[i]); + } + } + else if ((pdConfig & ACOS_MASK) == 0b00100) { // Fast acos from polynomial + for (uint i = 0; idata[i] = mult1 * mathDSP1.acos_f32(mult0 * block0->data[i]); + } + } + } + // Not applying linearization or scaling, at all. Works for multiplier outputs near 0 (90 deg difference) + else { + float32_t mult = 8.0f * mult0 * mult1; + for (uint i = 0; idata[i] = mult * block0->data[i]; + } + } + AudioStream_F32::transmit(block0, 0); + AudioStream_F32::release(block0); + #if TEST_TIME + t2 = tElapse; + if(iitt++ < 0) {Serial.print("At AnalyzePhase end, microseconds = "); Serial.println (t2 - t1); } + t1 = tElapse; + #endif +} // End update() diff --git a/AudioAnalyzePhase_F32.h b/AudioAnalyzePhase_F32.h new file mode 100644 index 0000000..fbff1fc --- /dev/null +++ b/AudioAnalyzePhase_F32.h @@ -0,0 +1,271 @@ +/* + * AudioAnalyzePhase_F32.h + * + * 31 March 2020, Rev 8 April 2020 + * Status Tested OK T3.6 and T4.0. + * Bob Larkin, in support of the library: + * Chip Audette, OpenAudio, Apr 2017 + * ------------------- + * There are two inputs, 0 and 1 (Left and Right) + * There is one output, the phase angle between 0 & 1 expressed in + * radians (180 degrees is Pi radians) or degrees. This is a 180-degree + * type of phase detector. See RadioIQMixer_F32 for a 360 degree type. + * + * This block can be used to measure phase between two sinusoids, and the default IIR filter is suitable for this with a cut-off + * frequency of 100 Hz. The only IIR configuration is 4-cascaded satages of BiQuad. For this, 20 coefficients must be provided + * in 4 times (b0, b1, b2, -a1, -a2) order (example below). This IIR filter inherently does not have very good + * linearity in phase vs. frequency. This can be a problem for communications systems. + * As an alternative, a linear phase (as long as coefficients are symmetrical) + * FIR filter can be set up with the begin method. The built in FIR LP filter has a cutoff frequency of 4 kHz when used + * at a 44.1 kHz sample rate. This filter uses 53 coefficients (called taps). Any FIR filter with 4 to 200 coefficients can be used + * as set up by the begin method. + * + * DEFAULTS: 100 Hz IIR LP, output is in radians, and this does *NOT* need a call to begin(). This can be changed, including + * using a FIR LP where linear phase is needed, or NO_LP_FILTER that leaves harmonics of the input frequency. Method begin() + * changes the options. For instance, to use a 60 coefficient FIR the setup() in the .INO might do + * myAnalyzePhase.begin(FIR_LP_FILTER, &myFIRCoefficients[0], 60, DEGREES_PHASE); + * If _pcoefficients is NULL, the coefficients will be left default. For instance, to use the default 100 Hz IIR filter, with degree output + * myAnalyzePhase.begin(IIR_LP_FILTER, NULL, 20, DEGREES_PHASE); + * To provide a new set of IIR coefficients (note strange coefficient order and negation for a() that CMSIS needs) + * myAnalyzePhase.begin(IIR_LP_FILTER, &myIIRCoefficients[0], 20, RADIANS_PHASE); + * In begin() the pdConfig can be set (see #defines below). The default is to use no limiter, but to measure the input levels over the + * block and use that to scale the multiplier output. This will cause successive blocks to change slightly in output level due to + * errors in level measurement, but is other wise fine. If the limiter is used, the narrow band IIR filter should also be used to + * prevent artifacts from "beats" between the sample rate and the input frequency. + * + * Three different scaling routines are available following the LP filter. These deal with the issue that the multiplier type + * of phase detector produces an output proportional to the cosine of the phase angle between the two input sine waves. + * If the inputs both have a magnitude ranging from -1.0 to 1.0, the output will be cos(phase difference). Other values of + * sine wave will multiply this by the product of the two maximum levels. The selection of "fast" or "accurate" acos() will + * make the output approximately the angle, as scaled by UNITS_MASK. The ACOS_MASK bits in pdConfig, set by begin(), selects the + * acos used. Note that if acos function is used, the output range is 0 to pi radians, i.e., 0 to 180 degrees. "Units" have no + * effect when acos90 is not being used, as that would make little sense for the (-1,1) output. + * + * Functions: + * setAnalyzePhaseConfig(const uint16_t LPType, float32_t *pCoeffs, uint16_t nCoeffs) + * setAnalyzePhaseConfig(const uint16_t LPType, float32_t *pCoeffs, uint16_t nCoeffs, uint16_t pdConfig) + * are used to chhange the output filter from the IIR default, where: + * LPType is NO_LP_FILTER, IIR_LP_FILTER, FIR_LP_FILTER to select the output filter + * pCoeffs is a pointer to filter coefficients, either IIR or FIR + * nCoeffs is the number of filter coefficients + * pdConfig is bitwise selection (default 0b1100) of + * Bit 0: 0=No Limiter (default) 1=Use limiter + * Bit 2 and 1: 00=Use no acos linearizer 01=undefined + * 10=Fast, math-continuous acos() (default) 11=Accurate acosf() + * Bit 3: 0=No scale of multiplier 1=scale to min-max (default) + * Bit 4: 0=Output in degrees 1=Output in radians (default) + * showError(uint16_t e) sets whether error printing comes from update (e=1) or not (e=0). + * + * Examples: AudioTestAnalyzePhase.ino and AudioTestSinCos.ino + * + * Some measured time data for a 128 size block, Teensy 3.6, parts of update(): + * Default settings, total time 123 microseconds + * Overhead of update(), loading arrays, handling blocks, less than 2 microseconds + * Min-max calculation, 23 microseconds + * Multiplier DBMixer 8 microseconds + * IIR LPF (default filter) 57 microseconds + * 53-term FIR filter 149 microseconds + * Fast acos_32() linearizer 32 microseconds + * Accurate acosf(x) seems to vary (with x?), 150 to 350 microsecond range + * + * Measured total update() time for the min-max scaling, fast acos(), and 53-term FIR filtering + * case is 214 microseconds for Teensy 3.6 and 45 microseconds for Teensy 4.0. + * + * Copyright (c) 2020 Bob Larkin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef _analyze_phase_f32_h +#define _analyze_phase_f32_h + +#define N_STAGES 4 +#define NFIR_MAX 200 +#define NO_LP_FILTER 0 +#define IIR_LP_FILTER 1 +#define FIR_LP_FILTER 2 +#define RADIANS_PHASE 1.0 +#define DEGREES_PHASE 57.295779 + +// Test the number of microseconds to execute update() +#define TEST_TIME 1 + +#define LIMITER_MASK 0b00001 +#define ACOS_MASK 0b00110 +#define SCALE_MASK 0b01000 +#define UNITS_MASK 0b10000 + +#include "AudioStream_F32.h" +#include + +class AudioAnalyzePhase_F32 : public AudioStream_F32 { +//GUI: inputs:2, outputs:1 //this line used for automatic generation of GUI node +//GUI: shortName: AnalyzePhase +public: + // Option of AudioSettings_F32 change to block size or sample rate: + AudioAnalyzePhase_F32(void) : AudioStream_F32(2, inputQueueArray_f32) { // default block_size and sampleRate_Hz + // Initialize BiQuad IIR instance (ARM DSP Math Library) + arm_biquad_cascade_df1_init_f32(&iir_inst, N_STAGES, &iir_coeffs[0], &IIRStateF32[0]); + } + // Constructor including new block_size and/or sampleRate_Hz + AudioAnalyzePhase_F32(const AudioSettings_F32 &settings) : AudioStream_F32(2, inputQueueArray_f32) { + block_size = settings.audio_block_samples; + sampleRate_Hz = settings.sample_rate_Hz; + // Initialize BiQuad IIR instance (ARM DSP Math Library) + arm_biquad_cascade_df1_init_f32(&iir_inst, N_STAGES, &iir_coeffs[0], &IIRStateF32[0]); + } + + // Set AnalyzePhaseConfig while leaving pdConfig as is + void setAnalyzePhaseConfig(const uint16_t _LPType, float32_t *_pCoeffs, uint16_t _nCoeffs) { + setAnalyzePhaseConfig( _LPType, _pCoeffs, _nCoeffs, pdConfig); + } + // Set AnalyzePhaseConfig in full generality + void setAnalyzePhaseConfig(const uint16_t _LPType, float32_t *_pCoeffs, uint16_t _nCoeffs, uint16_t _pdConfig) { + AudioNoInterrupts(); // No interrupts while changing parameters + LPType = _LPType; + if (LPType == NO_LP_FILTER) { + //Serial.println("Advice: in AnalyzePhase, for NO_LP_FILTER the output contains 2nd harmonics"); + //Serial.println(" that need external filtering."); + } + else if (LPType == IIR_LP_FILTER) { + if(_pCoeffs != NULL){ + pIirCoeffs = _pCoeffs; + nIirCoeffs = _nCoeffs; + } + if (nIirCoeffs != 20){ + //Serial.println("Error, in AnalyzePhase, for IIR_LP_FILTER there must be 20 coefficients."); + nIirCoeffs = 20; + } + arm_biquad_cascade_df1_init_f32(&iir_inst, N_STAGES, pIirCoeffs, &IIRStateF32[0]); + } + else if (LPType==FIR_LP_FILTER) { + if(_pCoeffs != NULL){ + pFirCoeffs = _pCoeffs; + nFirCoeffs = _nCoeffs; + } + if (nFirCoeffs<4 || nFirCoeffs>NFIR_MAX) { // Too many or too few + //Serial.print("Error, in AnalyzePhase, for FIR_LP_FILTER there must be >4 and <="); + //Serial.print(NFIR_MAX); + //Serial.println(" coefficients."); + //Serial.println(" Restoring default IIR Filter."); + LPType = IIR_LP_FILTER; + pIirCoeffs = &iir_coeffs[0]; + nIirCoeffs = 20; // Number of coefficients 20 + pdConfig = 0b11100; + LPType = IIR_LP_FILTER; // Variables were set in setup() above + } + else { //Acceptable number, so initialize it + arm_fir_init_f32(&fir_inst, nFirCoeffs, pFirCoeffs, &FIRStateF32[0], block_size); + } + } + pdConfig = _pdConfig; + AudioInterrupts(); + } + + void showError(uint16_t e) { + errorPrint = e; + } + + void update(void); + +private: + float32_t sampleRate_Hz = AUDIO_SAMPLE_RATE_EXACT; + uint16_t block_size = AUDIO_BLOCK_SAMPLES; + // Two input data pointers + audio_block_f32_t *inputQueueArray_f32[2]; + // Variables controlling the configuration + uint16_t LPType = IIR_LP_FILTER; // NO_LP_FILTER, IIR_LP_FILTER or FIR_LP_FILTER + float32_t *pIirCoeffs = &iir_coeffs[0]; // Coefficients for IIR + float32_t *pFirCoeffs = &fir_coeffs[0]; // Coefficients for FIR + uint16_t nIirCoeffs = 20; // Number of coefficients 20 + uint16_t nFirCoeffs = 53; // Number of coefficients <=200 + uint16_t pdConfig = 0b11100; // No limiter, fast acos, scale multiplier, radians out; + // Control error printing in update(). Should never be enabled + // until all audio objects have been initialized. + // Only used as 0 or 1 now, but 16 bits are available. + uint16_t errorPrint = 0; + + // *Temporary* - TEST_TIME allows measuring time in microseconds for each part of the update() +#if TEST_TIME + elapsedMicros tElapse; + int32_t iitt = 998000; // count up to a million during startup +#endif + + /* FIR filter designed with http://t-filter.appspot.com + * Sampling frequency: 44100 Hz + * 0 Hz - 4000 Hz gain = 1.0, ripple = 0.101 dB + * 7000 - 22000 Hz attenuation >= 81.8 dB + * Suitable for measuring phase in communications systems with linear phase. + */ + float32_t fir_coeffs[53] = { + -0.000206064,-0.000525129,-0.00083518, -0.000774011, 2.5925E-05, + 0.001614912, 0.003431897, 0.004335125, 0.003127158, -0.000566047, + -0.005566484,-0.009192163,-0.008417443,-0.001801824, 0.008839149, + 0.018273049, 0.019879265, 0.009349346,-0.011696836, -0.034389317, + -0.045008839,-0.030706279, 0.013824834, 0.082060266, 0.156328996, + 0.213799940, 0.235420817, 0.213799940, 0.156328996, 0.082060266, + 0.013824834,-0.030706279,-0.045008839,-0.034389317, -0.011696836, + 0.009349346, 0.019879265, 0.018273049, 0.008839149, -0.001801824, + -0.008417443,-0.009192163,-0.005566484,-0.000566047, 0.003127158, + 0.004335125, 0.003431897, 0.001614912, 2.5925E-05, -0.000774011, + -0.000835180,-0.000525129,-0.000206064 }; + + // 8-pole Biquad fc=0.0025fs, -80 dB Iowa Hills + // This is roughly the narrowest that doesn't have + // artifacts from numerical errors more than about + // 0.001 radians (0.06 deg), per experiments using F32. + // b0,b1,b2,a1,a2 for each BiQuad. Start with stage 0 + float32_t iir_coeffs[5 * N_STAGES]={ + 0.08686551007982608, + -0.1737214710369926, + 0.08686551007982608, + 1.9951804375779567, + -0.9951899867006161, + // and stage 1 + 0.20909791845765324, + -0.4181667739705088, + 0.20909791845765324, + 1.9965910753714984, + -0.9966201383162961, + // stage 2 + 0.18360046797931723, + -0.3671514768697197, + 0.18360046797931723, + 1.9981966389027592, + -0.998246097991674, + // stage 3 + 0.03079484444321144, + -0.061529427044071175, + 0.03079484444321144, + 1.999421284937329, + -0.9994815467796806}; + + // ARM DSP Math library IIR filter instance + arm_biquad_casd_df1_inst_f32 iir_inst; + + // And a FIR type, as either can be used via begin() + arm_fir_instance_f32 fir_inst; + + // Delay line space for the FIR + float32_t FIRStateF32[AUDIO_BLOCK_SAMPLES + NFIR_MAX]; + + // Delay line space for the Biquad, each arranged as {x[n-1], x[n-2], y[n-1], y[n-2]} + float32_t IIRStateF32[4 * N_STAGES]; +}; +#endif diff --git a/AudioFilterEqualizer_F32.cpp b/AudioFilterEqualizer_F32.cpp new file mode 100644 index 0000000..3ef85c8 --- /dev/null +++ b/AudioFilterEqualizer_F32.cpp @@ -0,0 +1,192 @@ +/* AudioFilterEqualizer_F32.cpp + * + * Bob Larkin, W7PUA 8 May 2020 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "AudioFilterEqualizer_F32.h" + +void AudioFilterEqualizer_F32::update(void) { + audio_block_f32_t *block, *block_new; + +#if TEST_TIME_EQ + if (iitt++ >1000000) iitt = -10; + uint32_t t1, t2; + t1 = tElapse; +#endif + + block = AudioStream_F32::receiveReadOnly_f32(); + if (!block) return; + + // If there's no coefficient table, give up. + if (cf32f == NULL) { + AudioStream_F32::release(block); + return; + } + + block_new = AudioStream_F32::allocate_f32(); // get a block for the FIR output + if (block_new) { + //apply the FIR + arm_fir_f32(&fir_inst, block->data, block_new->data, block->length); + AudioStream_F32::transmit(block_new); // send the FIR output + AudioStream_F32::release(block_new); + } + AudioStream_F32::release(block); + +#if TEST_TIME_EQ + t2 = tElapse; + if(iitt++ < 0) {Serial.print("At AnalyzePhase end, microseconds = "); Serial.println (t2 - t1); } + t1 = tElapse; +#endif +} + +/* equalizerNew() calculates the Equalizer FIR filter coefficients. Works from: + * uint16_t equalizerNew(uint16_t _nBands, float32_t *feq, float32_t *adb, + uint16_t _nFIR, float32_t *_cf32f, float32_t kdb) + * nBands Number of equalizer bands + * feq Pointer to array feq[] of nBands breakpoint frequencies, fractions of sample rate, Hz + * adb Pointer to array aeq[] of nBands levels, in dB, for the feq[] defined frequency bands + * nFIR The number of FIR coefficients (taps) used in the equalzer + * cf32f Pointer to an array of float to hold FIR coefficients + * kdb A parameter that trades off sidelobe levels for sharpness of band transition. + * kdb=30 sharp cutoff, poor sidelobes + * kdb=60 slow cutoff, low sidelobes + * + * The arrays, feq[], aeq[] and cf32f[] are supplied by the calling .INO + * + * Returns: 0 if successful, or an error code if not. + * Errors: 1 = Too many bands, 50 max + * 2 = sidelobe level out of range, must be > 0 + * 3 = nFIR out of range + * + * Note - This function runs at setup time, and there is no need to fret about + * processor speed. Likewise, local arrays are created on the stack and are + * available for other use when this function closes. + */ +uint16_t AudioFilterEqualizer_F32::equalizerNew(uint16_t _nBands, float32_t *feq, float32_t *adb, + uint16_t _nFIR, float32_t *_cf32f, float32_t kdb) { + uint16_t i, j; + uint16_t nHalfFIR; + float32_t beta, kbes; + float32_t q, xj2, scaleXj2, WindowWt; + float32_t fNorm[50]; // Normalized to the sampling frequency + float32_t aVolts[50]; // Convert from dB to "quasi-Volts" + mathDSP_F32 mathEqualizer; // For Bessel function + + // Make private copies + cf32f = _cf32f; + nFIR = _nFIR; + nBands = _nBands; + + // Check range of nFIR + if (nFIR<5 || nFIR>EQUALIZER_MAX_COEFFS) + return ERR_EQ_NFIR; + + // The number of FIR coefficients needs to be odd + if (2*(nFIR/2) == nFIR) + nFIR -= 1; // We just won't use the last element of the array + nHalfFIR = (nFIR - 1)/2; // If nFIR=199, nHalfFIR=99 + + for (int kk = 0; kk50) return ERR_EQ_BANDS; + for (i=0; i50) + beta = 0.1102*(kdb-8.7); + else if (kdb>20.96 && kdb<=50.0) + beta = 0.58417*powf((kdb-20.96), 0.4) + 0.07886*(kdb-20.96); + else + beta=0.0; + // Note: i0f is the floating point in & out zero'th order Bessel function (see mathDSP_F32.h) + kbes = 1.0f / mathEqualizer.i0f(beta); // An additional derived parameter used in loop + + // Apply the Kaiser window + scaleXj2 = 2.0f/(float32_t)nFIR; + scaleXj2 *= scaleXj2; + for (j=0; j<=nHalfFIR; j++) { // For 199 Taps, this is 0 to 99 + xj2 = (int16_t)(0.5f+(float32_t)j); + xj2 = scaleXj2*xj2*xj2; + WindowWt=kbes*(mathEqualizer.i0f(beta*sqrt(1.0-xj2))); + cf32f[nHalfFIR + j] *= WindowWt; // Apply the Kaiser window to upper half + cf32f[nHalfFIR - j] = cf32f[nHalfFIR +j]; // and create the lower half + } + // And fill in the members of fir_inst + arm_fir_init_f32(&fir_inst, nFIR, (float32_t *)cf32f, &StateF32[0], (uint32_t)block_size); + return 0; +} + +/* Calculate response in dB. Leave nFreq point result in array rdb[] supplied + * by the calling .INO See Parks and Burris, "Digital Filter Design," p27 (Type 1). + */ +void AudioFilterEqualizer_F32::getResponse(uint16_t nFreq, float32_t *rdb) { + uint16_t i, j; + float32_t bt; + float32_t piOnNfreq; + uint16_t nHalfFIR; + + nHalfFIR = (nFIR - 1)/2; + piOnNfreq = MF_PI / (float32_t)nFreq; + for (i=0; i1000000) iitt = -10; + uint32_t t1, t2; + t1 = tElapse; +#endif + + blockIn = AudioStream_F32::receiveReadOnly_f32(); + if (!blockIn) return; + + // If there's no coefficient table, give up. + if (cf32f == NULL) { + AudioStream_F32::release(blockIn); + return; + } + + blockOut = AudioStream_F32::allocate_f32(); // get a block for the FIR output + if (blockOut) { + // The FIR update + arm_fir_f32(&fir_inst, blockIn->data, blockOut->data, blockIn->length); + AudioStream_F32::transmit(blockOut); // send the FIR output + AudioStream_F32::release(blockOut); + } + AudioStream_F32::release(blockIn); + +#if TEST_TIME_FIRG + t2 = tElapse; + if(iitt++ < 0) {Serial.print("At FIRGeneral end, microseconds = "); Serial.println (t2 - t1); // } + Serial.print("numtaps = "); Serial.println (fir_inst.numTaps); + } + t1 = tElapse; +#endif +} + +/* FIRGeneralNew() calculates the generalFIR filter coefficients. Works from: + * adb Pointer to nFIR/2 array adb[] of levels, in dB + * nFIR The number of FIR coefficients (taps) used + * cf32f Pointer to an array of float to hold nFIR FIR coefficients + * kdb A parameter that trades off sidelobe levels for sharpness of band transition. + * kdb=30 sharp cutoff, poor sidelobes + * kdb=60 slow cutoff, low sidelobes + * pStateArray Pointer to 128+nFIR array of floats, used here briefly and then + * passed to the FIR routine as working storage + * + * The arrays, adb[], cf32f[] and pStateArray[] are supplied by the calling .INO + * + * Returns: 0 if successful, or an error code if not. + * Errors: 1 = NU + * 2 = sidelobe level out of range, must be > 0 + * 3 = nFIR out of range + * + * Note - This function runs at setup time, so slowness is not an issue + */ +uint16_t AudioFilterFIRGeneral_F32::FIRGeneralNew( + float32_t *adb, uint16_t _nFIR, float32_t *_cf32f, float32_t kdb, + float32_t *pStateArray) { + + uint16_t i, k, n; + uint16_t nHalfFIR; + float32_t beta, kbes; + float32_t num, xn2, scaleXn2, WindowWt; + float32_t M; // Burris and Parks, (2.16) + mathDSP_F32 mathEqualizer; // For Bessel function + bool even; + + cf32f = _cf32f; // Make pivate copies + nFIR = _nFIR; + + // Check range of nFIR + if (nFIR<4) + return ERR_FIRGEN_NFIR; + + M = 0.5f*(float32_t)(nFIR - 1); + // The number of FIR coefficients is even or odd + if (2*(nFIR/2) == nFIR) { + even = true; + nHalfFIR = nFIR/2; + } + else { + even = false; + nHalfFIR = (nFIR - 1)/2; + } + + for (i=0; i 0.1f) // kdb==0.0 means no window + cf32f[nHalfFIR - n - 1] *= WindowWt; // Apply window, reverse subscripts + cf32f[nHalfFIR + n] = cf32f[nHalfFIR - n - 1]; // and create the upper half + } + } + else { // nFIR is odd, nHalfFIR = (nFIR - 1)/2 + for (n=0; n<=nHalfFIR; n++) { // For 21 Taps, this is 0 to 10, including center + xn2 = (int16_t)(0.5f+(float32_t)n); + xn2 = scaleXn2*xn2*xn2; + WindowWt=kbes*(mathEqualizer.i0f(beta*sqrt(1.0-xn2))); + if(kdb > 0.1f) + cf32f[nHalfFIR - n] *= WindowWt; + // 21 taps, for n=0, nHalfFIR-n = 10, for n=1 nHalfFIR-n=9, for n=nHalfFIR, nHalfFIR-n=0 + cf32f[nHalfFIR + n] = cf32f[nHalfFIR - n]; // and create upper half (rewrite center is OK) + } + } + // And finally, fill in the members of fir_inst given in update() to the ARM FIR routine. + AudioNoInterrupts(); + arm_fir_init_f32(&fir_inst, nFIR, (float32_t *)cf32f, &pStateArray[0], (uint32_t)block_size); + AudioInterrupts(); + return 0; +} + +// FIRGeneralLoad() allows an array of nFIR FIR coefficients to be loaded. They come from an .INO +// supplied array. Also, pStateArray[] is .INO supplied and must be (block_size + nFIR) in size. +uint16_t AudioFilterFIRGeneral_F32::LoadCoeffs(uint16_t _nFIR, float32_t *_cf32f, float32_t *pStateArray) { + nFIR = _nFIR; + cf32f = _cf32f; + if (nFIR<4) // Check range of nFIR + return ERR_FIRGEN_NFIR; + for(int i=0; i<(nFIR+AUDIO_BLOCK_SAMPLES); i++) // Zero, to be sure + pStateArray[i] = 0.0f; + AudioNoInterrupts(); + arm_fir_init_f32(&fir_inst, nFIR, &cf32f[0], &pStateArray[0], (uint32_t)block_size); + AudioInterrupts(); + return 0; +} + +/* Calculate frequency response in dB. Leave nFreq point result in array rdb[] supplied + * by the calling .INO See B&P p27 (Type 1 and 2). Be aware that if nFIR*nFreq is big, + * like 100,000 or more, this will take a while to calcuulate all the cosf(). Normally, + * this is not an issue as this is an infrequent calculation. + * This function assumes that the phase of the FIR is linear with frequency, i.e., + * the coefficients are symmetrical about the middle. Otherwise, doubling of values, + * as is done here, is not valid. + */ +void AudioFilterFIRGeneral_F32::getResponse(uint16_t nFreq, float32_t *rdb) { + uint16_t i, n; + float32_t bt; + float32_t piOnNfreq; + uint16_t nHalfFIR; + float32_t M; + + piOnNfreq = MF_PI / (float32_t)nFreq; + // The number of FIR coefficients, even or odd? + if (2*(nFIR/2) == nFIR) { // it is even + nHalfFIR = nFIR/2; + M = 0.5f*(float32_t)(nFIR - 1); + for (i=0; i1000000) iitt = -10; + uint32_t t1, t2; + t1 = tElapse; +#endif + + // Get input to FM Detector block + blockIn = AudioStream_F32::receiveWritable_f32(0); + if (!blockIn) { + if(errorPrintFM) Serial.println("FMDET-ERR: No input memory"); + return; + } + + // If there's no coefficient table, give up. + if (fir_IQ_Coeffs == NULL) { + if(errorPrintFM) Serial.println("FMDET-ERR: No IQ FIR Coefficients"); + AudioStream_F32::release(blockIn); + return; + } + + if (fir_Out_Coeffs == NULL) { + if(errorPrintFM) Serial.println("FMDET-ERR: No Out FIR Coefficients"); + AudioStream_F32::release(blockIn); + return; + } + + // Try to get a block for the FM output + blockOut = AudioStream_F32::allocate_f32(); + if (!blockOut){ // Didn't have any + if(errorPrintFM) Serial.println("FMDET-ERR: No Output Memory"); + AudioStream_F32::release(blockIn); + return; + } + + // Generate sine and cosine of center frequency and double-balance mix + // these with the input signal to produce an intermediate result + // saved as v_i[] and v_q[] + for (i=0; i < block_size; i++) { + phaseS += phaseIncrement; + if (phaseS > 512.0f) + phaseS -= 512.0f; + index_sine = (uint16_t) phaseS; + deltaPhase = phaseS -(float32_t) index_sine; + /* Read two nearest values of input value from the sin table */ + a = sinTable512_f32[index_sine]; + b = sinTable512_f32[index_sine+1]; + // Linear interpolation and multiplying (DBMixer) with input + v_i[i] = blockIn->data[i] * (a + 0.001953125*(b-a)*deltaPhase); + + /* Repeat for cosine by adding 90 degrees phase */ + index_sine = (index_sine + 128) & 0x01ff; + /* Read two nearest values of input value from the sin table */ + a = sinTable512_f32[index_sine]; + b = sinTable512_f32[index_sine+1]; + /* deltaPhase will be the same as used for sin */ + v_q[i] = blockIn->data[i] * (a + 0.001953125*(b-a)*deltaPhase); + } + + // Do I FIR and Q FIR. We can borrow blockIn and blockOut at this point + //void arm_fir_f32( const arm_fir_instance_f32* S, float32_t* pSrc, float32_t* pDst, uint32_t blockSize) + arm_fir_f32(&FMDet_I_inst, v_i, blockIn->data, (uint32_t)blockIn->length); + arm_fir_f32(&FMDet_Q_inst, v_q, blockOut->data, (uint32_t)blockOut->length); + // Do ATAN2, differentiation and de-emphasis in single loop + for(i=0; idata[i], (float)blockIn->data[i]); + // Apply differentiator by subtracting last value of atan2 + if(dtemp1>MF_PI_2 && diffLast<-MF_PI_2) // Probably a wrap around + dtemp2 = dtemp1 - diffLast - MF_TWOPI; + else if(dtemp1<-MF_PI_2 && diffLast >MF_PI_2) // Probably a reverse wrap around + dtemp2 = dtemp1 - diffLast + MF_TWOPI; + else + dtemp2 = dtemp1 - diffLast; // Differentiate + diffLast = dtemp1; // Ready for next time through loop + // Data point is now dtemp2. Apply single pole de-emphasis LPF, in place + dLast = Kdem * dtemp2 + OneMinusKdem * dLast; + blockIn->data[i] = dLast; // and save to an array + } + + // Do output FIR filter. Data now in blockIn. + arm_fir_f32(&FMDet_Out_inst, blockIn->data, blockOut->data, (uint32_t)blockIn->length); + AudioStream_F32::release(blockIn); + + // Transmit the data + AudioStream_F32::transmit(blockOut, 0); + AudioStream_F32::release(blockOut); +#if TEST_TIME_FM + t2 = tElapse; + if(iitt++ < 0) {Serial.print("At end of FM Det "); Serial.println (t2 - t1); } + t1 = tElapse; +#endif +} diff --git a/RadioFMDetector_F32.h b/RadioFMDetector_F32.h new file mode 100644 index 0000000..a860f65 --- /dev/null +++ b/RadioFMDetector_F32.h @@ -0,0 +1,277 @@ +/* + * RadioFMDetector_F32 + * 22 March 2020 Bob Larkin + * With much credit to: + * Chip Audette (OpenAudio) Feb 2017 + * Building from AudioFilterFIR from Teensy Audio Library + * (AudioFilterFIR credited to Pete (El Supremo)) + * and of course, to PJRC for the Teensy and Teensy Audio Library + * + * Copyright (c) 2020 Bob Larkin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* This consists of a single input at some frequency, such as 10 to 20 kHz and + * an output, such as 0 to 5 kHz. The output level is linearly dependent on the + * frequency of the input sine wave frequency, i.e., an it is an FM detector. + * The input needs to be band limited below the lower frequency side of the + * input, typically 10 kHz. This is not part of this block. + * + * NOTE: Due to the sample frequencies we are working with, like 44.1 kHz, this + * detector cannot handle full FM broadcast bandwidths. It is suitable for + * NBFM as used in communications, marine radio, ham radio, etc. + * + * The output can be FIR filtered using default parameters, + * or using coefficients from an array. A separate single pole de-emphasis filer + * is included that again can be programmed. + * + * Internally, the detector uses a pair of mixers (multipliers) that generate the + * in-phase and quadrature inputs to a atan2 type of phase detector. These + * mixers have two output signals at the difference (desired) and sum (undesired) + * frequencies. The high frequency sum signal can be filtered (For a 15 kHz center, + * with an input band of 10 to 20 kHz the sum signal will be from 25 to 35 kHz that + * wraps around the 22 kHz half-sample point to produce 19 to 9 kHz. This needs to + * be removed before the atan2. A pair of FIR filters, using FIR_IQ_Coeffs + * are used. These are again programmable and default to a 29-tap LPF with + * a 5 kHz cutoff. + * + * Status: Tested static, tested with FM modulated Fluke 6061B. + * An input of about 60 microvolts to the SGTL5000 gave 12 dB SINAD. + * The output sounded good. Tested T3.6 and T4.0. No known bugs + * + * Output: Float, sensitivity is 2*pi*(f - fCenter)*sample_rate_Hz + * For 44117Hz samplerate, this is 0.000142421 per Hz + * + * Accuracy: The function used is precise. However, the approximations, such + * fastAtan2, slightly limit the accuracy. A 200 point sample of a + * 14 kHz input had an average error of 0.03 Hz + * and a standard deviation of 0.81 Hz. + * The largest errors in this sample were about +/- 1.7 Hz. This is + * with the default filters. + * + * Functions: + * frequency(float fCenter ) sets the center frequency in Hz, default 15000. + * + * filterOut(float *firCoeffs, uint nFIR, float Kdem) sets output filtering where: + * float32_t* firCoeffs is an array of coefficients + * uint nFIR is the number of coefficients + * float32_t Kdem is the de-emphasis frequency factor, where + * Kdem = 1/(0.5+(tau*fsample)) and tau is the de-emphasis + * time constant, typically 0.0005 second and fsample is + * the sample frequency, typically 44117. + * + * filterIQ(float *fir_IQ_Coeffs, uint nFIR_IQ) sets output filtering where: + * float32_t* fir_IQ_Coeffs is an array of coefficients + * uint nFIR_IQ is the number of coefficients, max 60 + * + * setSampleRate_Hz(float32_t _sampleRate_Hz) allows dynamic changing of + * the sample rate (experimental as of May 2020). + * + * returnInitializeFMError() Returns the initialization errors. + * B0001 (value 1) is an error in the IQ FIR Coefficients or quantity. + * B0010 (value 2) is an error in the Output FIR Coefficients or quantity. + * B0100 (value 4) is an error in the de-emphasis constant + * B1000 (value 8) is center frequency above half-sample frequency. + * All for debug. + * + * showError(uint16_t e) Turns error printing in the update function on (e=1) + * or off (e=0). For debug only. + * + * Time: For T3.6, an update of a 128 sample block, 370 microseconds, or + * 2.9 microseconds per data point. + * For T4.0, 87 microseconds, or 0.68 microseconds per data point. + * + * Error checking: See functions setSampleRate_Hz() and returnInitializeFMError() + * above. + */ + +#ifndef _radioFMDetector_f32_h +#define _radioFMDetector_f32_h + +#include "mathDSP_F32.h" +#include "AudioStream_F32.h" +#include "arm_math.h" + +#define MAX_FIR_IQ_COEFFS 100 +#define MAX_FIR_OUT_COEFFS 120 + +#define TEST_TIME_FM 0 + +class RadioFMDetector_F32 : public AudioStream_F32 { +//GUI: inputs:1, outputs:1 //this line used for automatic generation of GUI node +//GUI: shortName: FMDetector +public: + // Default block size and sample rate: + RadioFMDetector_F32(void) : AudioStream_F32(1, inputQueueArray_f32) { + initializeFM(); + } + // Option of AudioSettings_F32 change to block size and/or sample rate: + RadioFMDetector_F32(const AudioSettings_F32 &settings) : AudioStream_F32(1, inputQueueArray_f32) { + sampleRate_Hz = settings.sample_rate_Hz; + block_size = settings.audio_block_samples; + initializeFM(); + } + + // Provide for changing input center frequency, in Hz + void frequency(float32_t _fCenter) { + fCenter = _fCenter; + phaseIncrement = 512.0f * fCenter / sampleRate_Hz; + } + + // Provide for user FIR for I and Q signals to user supplied array + void filterIQ(float32_t* _fir_IQ_Coeffs, int _nFIR_IQ) { + if( fir_IQ_Coeffs==NULL || nFIR_IQ<4 || nFIR_IQ>MAX_FIR_IQ_COEFFS ) { + initializeFMErrors |= 1; + return; + } + fir_IQ_Coeffs = _fir_IQ_Coeffs; + nFIR_IQ = _nFIR_IQ; + initializeFM(); + } + + // Provide for changing to user FIR for detector output, (and user de-emphasis) + void filterOut(float32_t *_fir_Out_Coeffs, int _nFIR_Out, float32_t _Kdem) { + if( _fir_Out_Coeffs==NULL || _nFIR_Out<4 || _nFIR_Out>MAX_FIR_OUT_COEFFS) { + initializeFMErrors |= 2; + return; + } + if( _Kdem<0.0001 || _Kdem>1.0 ) { + initializeFMErrors |= 4; + return; + } + fir_Out_Coeffs = _fir_Out_Coeffs; + nFIR_Out = _nFIR_Out; + Kdem = _Kdem; + OneMinusKdem = 1.0f - Kdem; + initializeFM(); + } + + void setSampleRate_Hz(float32_t _sampleRate_Hz) { + if (fCenter > _sampleRate_Hz/2.0f) { // Check freq range + initializeFMErrors |= 8; + return; + } + sampleRate_Hz = _sampleRate_Hz; + // update phase increment for new frequency + phaseIncrement = 512.0f * fCenter / sampleRate_Hz; + } + + void showError(uint16_t e) { + errorPrintFM = e; + } + + uint16_t returnInitializeFMError(void) { + return initializeFMErrors; + } + + void update(void); + +private: + // One input data pointer + audio_block_f32_t *inputQueueArray_f32[1]; + float32_t fCenter = 15000.0f; + float32_t phaseS = 0.0f; + float32_t phaseS_C = 128.00f; + float32_t phaseIncrement = 512.0f*15000.0f/AUDIO_SAMPLE_RATE_EXACT; + float32_t sampleRate_Hz = AUDIO_SAMPLE_RATE_EXACT; + uint16_t block_size = AUDIO_BLOCK_SAMPLES; + // De-emphasis constant + float32_t Kdem = 0.045334f; + float32_t OneMinusKdem = 0.954666f; + // Save last data point of atan2 for differentiator + float32_t diffLast = 0.0f; + // Save last data point for next update of de-emphasis filter + float32_t dLast = 0.0f; + // Control error printing in update(), normally off + uint16_t errorPrintFM = 0; + // Monitor constructor errors + uint16_t initializeFMErrors = 0; + uint16_t nFIR_IQ = 29; + float32_t* fir_IQ_Coeffs = fir_IQ29; + uint16_t nFIR_Out = 39; + float32_t* fir_Out_Coeffs = fir_Out39; +#if TEST_TIME_FM +elapsedMicros tElapse; +int32_t iitt = 999000; // count up to a million during startup +#endif + // ARM CMSIS FIR filter instances and State vectors, sized for max, max + arm_fir_instance_f32 FMDet_I_inst; + float32_t State_I_F32[AUDIO_BLOCK_SAMPLES + MAX_FIR_IQ_COEFFS]; // 228 + + arm_fir_instance_f32 FMDet_Q_inst; + float32_t State_Q_F32[AUDIO_BLOCK_SAMPLES + MAX_FIR_IQ_COEFFS]; // 248 + + arm_fir_instance_f32 FMDet_Out_inst; + float32_t State_Out_F32[AUDIO_BLOCK_SAMPLES + MAX_FIR_OUT_COEFFS]; + + // Initialize the FM Detector, part of setting up and changing parameters + void initializeFM(void) { + if (fir_IQ_Coeffs && nFIR_IQ <= MAX_FIR_IQ_COEFFS) { +/* the instance setup call + * void arm_fir_init_f32( + * arm_fir_instance_f32* S, points to instance of floating-point FIR filter structure. + * uint16_t numTaps, Number of filter coefficients in the filter. + * float32_t* pCoeffs, points to the filter coefficients buffer. + * float32_t* pState, points to the state buffer. + * uint32_t blockSize) Number of samples that are processed per call. + */ + arm_fir_init_f32(&FMDet_I_inst, nFIR_IQ, (float32_t*)fir_IQ_Coeffs, &State_I_F32[0], (uint32_t)block_size); + arm_fir_init_f32(&FMDet_Q_inst, nFIR_IQ, (float32_t*)fir_IQ_Coeffs, &State_Q_F32[0], (uint32_t)block_size); + } + else initializeFMErrors |= B0001; + + if (fir_Out_Coeffs && nFIR_Out <= MAX_FIR_OUT_COEFFS) { + arm_fir_init_f32(&FMDet_Out_inst, nFIR_Out, (float32_t*)fir_Out_Coeffs, &State_Out_F32[0], (uint32_t)block_size); + } + else initializeFMErrors |= B0010; + dLast = 0.0; + } + + /* FIR filter designed with http://t-filter.appspot.com + * fs = 44100 Hz, < 5kHz ripple 0.29 dB, >9 kHz, -62 dB, 29 taps + */ + float32_t fir_IQ29[29] = { + -0.000970689f, -0.004690292f, -0.008256345f, -0.007565650f, + 0.001524420f, 0.015435011f, 0.021920240f, 0.008211937f, + -0.024286413f, -0.052184700f, -0.040532507f, 0.031248107f, + 0.146902412f, 0.255179564f, 0.299445269f, 0.255179564f, + 0.146902412f, 0.031248107f, -0.040532507f, -0.052184700f, + -0.024286413f, 0.008211937f, 0.021920240f, 0.015435011f, + 0.001524420f, -0.007565650f, -0.008256345f, -0.004690292f, + -0.000970689f}; + + /* FIR filter designed with http://t-filter.appspot.com + * fs = 44100 Hz, < 3kHz ripple 0.36 dB, >6 kHz, -60 dB, 39 taps + * Corrected to give DC gain = 1.00 + */ + float32_t fir_Out39[39] = { + -0.0008908477f, -0.0008401274f, -0.0001837353f, 0.0017556005f, + 0.0049353322f, 0.0084952916f, 0.0107668722f, 0.0097441685f, + 0.0039877576f, -0.0063455016f, -0.0188069300f, -0.0287453055f, + -0.0303831521f, -0.0186809770f, 0.0085931270f, 0.0493875744f, + 0.0971742012f, 0.1423015880f, 0.1745838382f, 0.1863024485f, + 0.1745838382f, 0.1423015880f, 0.0971742012f, 0.0493875744f, + 0.0085931270f, -0.0186809770f, -0.0303831521f, -0.0287453055f, + -0.0188069300f, -0.0063455016f, 0.0039877576f, 0.0097441685f, + 0.0107668722f, 0.0084952916f, 0.0049353322f, 0.0017556005f, + -0.0001837353f, -0.0008401274f, -0.0008908477f }; + +}; +#endif diff --git a/examples/AudioTestAnalyzePhase_F32/AudioTestAnalyzePhase_F32.ino b/examples/AudioTestAnalyzePhase_F32/AudioTestAnalyzePhase_F32.ino new file mode 100644 index 0000000..a46b7e0 --- /dev/null +++ b/examples/AudioTestAnalyzePhase_F32/AudioTestAnalyzePhase_F32.ino @@ -0,0 +1,114 @@ +/* Test AudioAnalyzePhase_F32.cpp RSL 7 April 2020 + * Generates 2 sine waves of different phase, but same frequency + * and measures the phase difference. + */ + +//Include files +#include +//#include +//#include +//#include +#include +#include +//#include + +//Create audio objects +// Input object creates stream, even though not used. I16 object to allow T4.x. +AudioInputI2S audioInI2S1; +AudioConvert_I16toF32 cnvt1; +// And the objects for the phase measurement: +AudioSynthWaveformSine_F32 sine1; +AudioSynthWaveformSine_F32 sine2; +AudioAnalyzePhase_F32 phase1; +AudioRecordQueue_F32 queue1_F; +AudioConnection patchCord1(audioInI2S1, 0, cnvt1, 0); +AudioConnection_F32 patchCord3(sine1, 0, phase1, 0); +AudioConnection_F32 patchCord4(sine2, 0, phase1, 1); +AudioConnection_F32 patchCord5(phase1, 0, queue1_F, 0); +AudioControlSGTL5000 sgtl5000_1; + +#define NBLOCKS 8 + float dt1[128*NBLOCKS]; + float *pq, *pd; + int k, i; + +// ==================== SETUP() ============================================ +void setup(void) { + //Start the USB serial link (to enable debugging) + Serial.begin(300); delay(500); + + AudioMemory(2); // Allocate Int16 audio data blocks + AudioMemory_F32(15); // Allocate Float32 audio data blocks + sgtl5000_1.enable(); + + AudioNoInterrupts(); + sine1.amplitude(1.0); + sine1.frequency(12345); + sine1.phase(0.0); + + sine2.amplitude(1.0); + sine2.frequency(12345); + // The next call sets the phase difference + sine2.phase(60.0); // This phase reationship will measure +60 degrees + + AudioInterrupts(); + + // The next argument can be set to 1 to show update() errors. But, it will show false + // errors before the audiostream is up and running. + phase1.showError(0); // For diagnostics + +/* For variable pdConfig (default 0b1100): + * Bit 0: 0=No Limiter (default) 1=Use limiter + * Bit 2 and 1: 00=Use no acos linearizer 01=undefined + * 10=Fast, math-continuous acos() (default) 11=Accurate acos() + * Bit 3: 0=No scale of multiplier 1=scale to min-max (default) + * Bit 4: 0=Output in degrees 1=Output in radians (default) + * + * Uncomment one of the next 4 examples, or leave all 4 commented + * out and get the default settings for begin(), using about + * 123 microseconds for 128 block size. + * Times tu are time spent in update() on T3.6 for full 128 point block. + */ + //#1 - This uses min-max scaling, fast acos(), and FIR filtering + phase1.setAnalyzePhaseConfig(FIR_LP_FILTER, NULL, 53, 0b01100); // tu = 213 microseconds + + //#2 - This uses min-max scaling and the Accurate acos() +// phase1.setAnalyzePhaseConfig(FIR_LP_FILTER, NULL, 53, 0b01110); // tu <= 531 microseconds + + //#3 - This uses min-max scaling, IIR Filter and the no acos() linearization +// phase1.setAnalyzePhaseConfig(IIR_LP_FILTER, NULL, 53, 0b01000); // tu = 96 microseconds + + //#4 - This uses no scaling (use two magnitude 1.0 sine waves), + // and the no acos() linearization. No LP filtering +// phase1.setAnalyzePhaseConfig(NO_LP_FILTER, NULL, 20, 0b10000); // tu = 28 uSec + + i = 0; k=0; + queue1_F.begin(); + Serial.println("Setup complete."); +}; + +void loop(void) { + // Collect 128xNBLOCKS samples and output to Serial + // This "if" will be active for i on (0, NBLOCKS-1) + if (queue1_F.available() >= 1 && i>=0 && i +#include "analyze_peak_f32.h" +#include "analyze_rms_f32.h" + +AudioInputI2S i2s1; +AudioSynthWaveformSine_F32 sine1; +AudioAnalyzeRMS_F32 rms1; +AudioAnalyzePeak_F32 peak1; +AudioConnection_F32 patchCord1(sine1, 0, rms1, 0); +AudioConnection_F32 patchCord2(sine1, 0, peak1, 0); + +uint16_t n = 0; + +void setup(void) { + AudioMemory(5); //allocate Int16 audio data blocks + AudioMemory_F32(5); //allocate Float32 audio data blocks + Serial.begin(300); delay(1000); + + // Default amlitude +/- 1.0 + sine1.frequency(1000.0); + + // Set next to 0 to suppress print errors in update() + rms1.showError(1); + peak1.showError(1); +} + +void loop(void) { + if (n & 1) { + while(!rms1.available() ) ; //Wait + Serial.print("RMS value = "); + Serial.println(rms1.read(), 7 ); + while(!peak1.available() ) ; //Wait + Serial.print("Peak value = "); + Serial.println(peak1.read(), 7 ); + } + else { + while(!rms1.available() ) ; //Wait + Serial.print("RMS value = "); + Serial.println(rms1.read(), 7 ); + while(!peak1.available() ) ; //Wait + Serial.print("Peak to peak value = "); + Serial.println(peak1.readPeakToPeak(), 7 ); + } + n++; + // The RMS and Peak data collection runs during + // delay() because of hardware interrupts + delay(1000); +} diff --git a/examples/AudioTestSinCos/AudioTestSinCos.ino b/examples/AudioTestSinCos/AudioTestSinCos.ino new file mode 100644 index 0000000..f88b50b --- /dev/null +++ b/examples/AudioTestSinCos/AudioTestSinCos.ino @@ -0,0 +1,96 @@ +/* AudioTestSinCos.ino Bob Larkin 19 April 2020 + * Generates 1024 samples of Sin and Cos from the + * AudioSynthSinCos_F32. Samples sent to the USB + * Serial.print. Also, the sine and cosine signals are + * connected to the AudioAnalyzePhase_32 and a third + * Queue to Serial.print the, close to 90 degree, + * phase difference. + */ + +#include "Audio.h" +#include +#include "DSP_TeensyAudio_F32.h" + +#define NBLOCKS 8 +// Necessary foraudio stream +AudioInputI2S i2s1; +AudioConvert_I16toF32 convert; +AudioConnection pcI16(i2s1, 0, convert, 0); +// And the experiment +AudioSynthSineCosine_F32 sincos1; +AudioRecordQueue_F32 queue1; +AudioRecordQueue_F32 queue2; +AudioRecordQueue_F32 queue3; +AudioAnalyzePhase_F32 phase1; +AudioConnection_F32 patchCord1(sincos1, 0, queue1, 0); +AudioConnection_F32 patchCord2(sincos1, 1, queue2, 0); +AudioConnection_F32 patchCord3(sincos1, 0, phase1, 0); +AudioConnection_F32 patchCord4(sincos1, 1, phase1, 1); +AudioConnection_F32 patchCord5(phase1, 0, queue3, 0); + +float dt1[128*NBLOCKS]; // Place to save sin +float dt2[128*NBLOCKS]; // and cos +float dt3[128*NBLOCKS]; // and phase angle +float *pq1, *pd1, *pq2, *pd2, *pd3, *pq3; +int i, k; + +void setup(void) { + AudioMemory(5); //allocate Int16 audio data blocks + AudioMemory_F32(20); //allocate Float32 audio data blocks + Serial.begin(300); delay(1000); + + // simple() is not needed here, as it is default unless amplitude or + // phaseS_C_r is changed. But, it can be used to restore simple after + // involking changes. Here it is just a sample of usage. + sincos1.simple(true); + // Default amlitude +/- 1.0 + sincos1.frequency(1212.345); + // If either or both of the following two are uncommented, the + // detailed, slower, sincos will be used: + // sincos1.amplitude(0.9); + // sincos1.phaseS_C_r(120.00*M_PI/180.0); // Test non-90 degree, like 120 deg + + // Set next to 1 to print errors in update(), or 0 for no print. For debug only + phase1.showError(0); + + queue1.begin(); + queue2.begin(); + queue3.begin(); + i = 0; k=0; +} + +void loop(void) { + // Collect 128xNBLOCKS samples and output to Serial + // This "if" will be active for i on (0, NBLOCKS-1) + if (queue1.available() >= 1 && queue2.available() + && queue3.available() && i>=0 && izp@k^lbzD~x)sh*eB=SE8&^VyM)9XOYOq$B_?A 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 O?88p%#oibJ0RTI$I$hWR literal 0 HcmV?d00001 diff --git a/examples/ReceiverFM/ReceiverFM.ino b/examples/ReceiverFM/ReceiverFM.ino new file mode 100644 index 0000000..4a38cf7 --- /dev/null +++ b/examples/ReceiverFM/ReceiverFM.ino @@ -0,0 +1,107 @@ +/* ReceiverFM.ino Bob Larkin 26 April 2020 + * This is a simple test of introducing a sine wave to the + * FM Detector and taking 512 samples of the output. It is + * a static test with a fixed frequency for test and so + * the output DC value and noise can be tested. Note that the 512 + * samples include the startup transient, so the first 300, + * or so, points should be ignored in seeing the DC value. + * + * Change the value of sine1.frequency to see the DC output change. + * See FMReceiver2.ino for testing with real AC modulation. + */ + +#include "Audio.h" +#include + +// Uncomment the lines "SINE" for internally generated sine wave. +// Uncomment the lines "ADC" to use the SGTL5000 Teensy audio adaptor +// AudioInputI2S_F32 i2sIn; // ADC +AudioSynthWaveformSine_F32 sine1; // SINE +RadioFMDetector_F32 fmDet1; +AudioRecordQueue_F32 queue1; +AudioOutputI2S_F32 i2sOut; // Leave in for timing +// AudioControlSGTL5000 sgtl5000_1; // ADC + +// AudioConnection_F32 connect0(i2sIn, 0, fmDet1, 0); // ADC +AudioConnection_F32 connect0(sine1, 0, fmDet1, 0); // SINE +// AudioConnection_F32 connect1(sine1, 0, queue1, 0); +AudioConnection_F32 connect3(fmDet1, 0, i2sOut, 0); +AudioConnection_F32 connect5(fmDet1, 0, queue1, 0); + +float dt1[512]; // Place to save output +float *pq1, *pd1; +uint16_t k; +int i; + +void setup(void) { + AudioMemory(5); + AudioMemory_F32(5); + Serial.begin(300); delay(1000); // Any rate is OK + Serial.println("Serial Started"); + + // sgtl5000_1.enable(); // ADC + // sgtl5000_1.inputSelect(AUDIO_INPUT_LINEIN); //ADC + + sine1.frequency(14000.0); // SINE + + // The FM detector has error checking during object construction + // when Serial.print is not available. See RadioFMDetector_F32.h: + Serial.print("FM Initialization errors: "); + Serial.println( fmDet1.returnInitializeFMError() ); + + // The following enables error checking inside of the "ubdate()" + // Output goes to the Serial (USB) Monitor. Normally, this is quiet. + fmDet1.showError(1); + + queue1.begin(); + i = 0; k=0; +} + +void loop(void) { + // Collect 512 samples and output to Serial + // This "if" will be active for i = 0,1,2,3 + if (queue1.available() >= 1) { + if( i>=0 && i<4) { + pq1 = queue1.readBuffer(); + pd1 = &dt1[i*128]; + for(k=0; k<128; k++) { + *pd1++ = *pq1++; + } + queue1.freeBuffer(); + if(i++==3) { + i=4; // Only collect 4 blocks + queue1.end(); // No more data to queue1 + } + } + else { + queue1.freeBuffer(); + } + } + // We have 512 data samples. Serial.print them + if(i == 4) { + Serial.println("512 Time in seconds and FM Output samples:"); + for (k=0; k<512; k++) { + Serial.print (0.000022667*(float32_t)k, 6); Serial.print (","); + Serial.println (dt1[k],7); + } + i = 5; + } + if(i==5) { + i = 6; + Serial.print("CPU: Percent Usage, Max: "); + Serial.print(AudioProcessorUsage()); + Serial.print(", "); + Serial.println(AudioProcessorUsageMax()); + + Serial.print("Int16 Memory Usage, Max: "); + Serial.print(AudioMemoryUsage()); + Serial.print(", "); + Serial.println(AudioMemoryUsageMax()); + + Serial.print("Float Memory Usage, Max: "); + Serial.print(AudioMemoryUsage_F32()); + Serial.print(", "); + Serial.println(AudioMemoryUsageMax_F32()); + Serial.println(); + } +} diff --git a/examples/ReceiverFM/hilbert121A.h b/examples/ReceiverFM/hilbert121A.h new file mode 100644 index 0000000..d624d04 --- /dev/null +++ b/examples/ReceiverFM/hilbert121A.h @@ -0,0 +1,123 @@ +// Following is 121 term Hilbert FIR filter +float32_t hilbert121A[121] = { + 0.000000000000000000, + 0.000773378567767513, + 0.000000000000000000, + 0.001046207887980644, + 0.000000000000000000, + 0.001368896533613985, + 0.000000000000000000, + 0.001746769975247667, + 0.000000000000000000, + 0.002185555845922462, + 0.000000000000000000, + 0.002691457154069645, + 0.000000000000000000, + 0.003271251311125927, + 0.000000000000000000, + 0.003932423233774751, + 0.000000000000000000, + 0.004683343721596901, + 0.000000000000000000, + 0.005533508538632429, + 0.000000000000000000, + 0.006493859804516438, + 0.000000000000000000, + 0.007577220484233372, + 0.000000000000000000, + 0.008798886675905997, + 0.000000000000000000, + 0.010177443901536392, + 0.000000000000000000, + 0.011735907609641917, + 0.000000000000000000, + 0.013503343224246872, + 0.000000000000000000, + 0.015517212970554440, + 0.000000000000000000, + 0.017826854793349920, + 0.000000000000000000, + 0.020498780519188083, + 0.000000000000000000, + 0.023625003856774591, + 0.000000000000000000, + 0.027336628208641155, + 0.000000000000000000, + 0.031827023036304102, + 0.000000000000000000, + 0.037393534868609392, + 0.000000000000000000, + 0.044517689704988733, + 0.000000000000000000, + 0.054032871748808158, + 0.000000000000000000, + 0.067515548043274365, + 0.000000000000000000, + 0.088347125250410385, + 0.000000000000000000, + 0.125324201622410869, + 0.000000000000000000, + 0.210709715079613419, + 0.000000000000000000, + 0.634897508268964295, + 0.000000000000000000, +-0.634897508268964295, + 0.000000000000000000, +-0.210709715079613419, + 0.000000000000000000, +-0.125324201622410869, + 0.000000000000000000, +-0.088347125250410385, + 0.000000000000000000, +-0.067515548043274365, + 0.000000000000000000, +-0.054032871748808158, + 0.000000000000000000, +-0.044517689704988733, + 0.000000000000000000, +-0.037393534868609392, + 0.000000000000000000, +-0.031827023036304102, + 0.000000000000000000, +-0.027336628208641155, + 0.000000000000000000, +-0.023625003856774591, + 0.000000000000000000, +-0.020498780519188083, + 0.000000000000000000, +-0.017826854793349920, + 0.000000000000000000, +-0.015517212970554440, + 0.000000000000000000, +-0.013503343224246872, + 0.000000000000000000, +-0.011735907609641917, + 0.000000000000000000, +-0.010177443901536392, + 0.000000000000000000, +-0.008798886675905997, + 0.000000000000000000, +-0.007577220484233372, + 0.000000000000000000, +-0.006493859804516438, + 0.000000000000000000, +-0.005533508538632429, + 0.000000000000000000, +-0.004683343721596901, + 0.000000000000000000, +-0.003932423233774751, + 0.000000000000000000, +-0.003271251311125927, + 0.000000000000000000, +-0.002691457154069645, + 0.000000000000000000, +-0.002185555845922462, + 0.000000000000000000, +-0.001746769975247667, + 0.000000000000000000, +-0.001368896533613985, + 0.000000000000000000, +-0.001046207887980644, + 0.000000000000000000, +-0.000773378567767513, + 0.000000000000000000}; diff --git a/examples/ReceiverFM/hilbert19A.h b/examples/ReceiverFM/hilbert19A.h new file mode 100644 index 0000000..155b132 --- /dev/null +++ b/examples/ReceiverFM/hilbert19A.h @@ -0,0 +1,21 @@ +// Following is a 19 term Hilbert FIR filter +float hilbert19A[]={ + 0.003006666677728199, + 0.000000000000000000, + 0.017439390086760032, + 0.000000000000000000, + 0.058235158985840196, + 0.000000000000000000, + 0.161905323559397157, + 0.000000000000000000, + 0.617838316334015092, + 0.000000000000000000, +-0.617838316334015092, + 0.000000000000000000, +-0.161905323559397157, + 0.000000000000000000, +-0.058235158985840196, + 0.000000000000000000, +-0.017439390086760032, + 0.000000000000000000, +-0.003006666677728199}; diff --git a/examples/ReceiverFM/hilbert251A.h b/examples/ReceiverFM/hilbert251A.h new file mode 100644 index 0000000..745db86 --- /dev/null +++ b/examples/ReceiverFM/hilbert251A.h @@ -0,0 +1,253 @@ +// Following is 251 term Hilbert FIR filter +float32_t hilbert251A[]={ +0.0000003255, +0.0000000000, +0.0000030702, +0.0000000000, +0.0000089286, +0.0000000000, +0.0000183061, +0.0000000000, +0.0000316287, +0.0000000000, +0.0000493436, +0.0000000000, +0.0000719193, +0.0000000000, +0.0000998451, +0.0000000000, +0.0001336320, +0.0000000000, +0.0001738120, +0.0000000000, +0.0002209393, +0.0000000000, +0.0002755899, +0.0000000000, +0.0003383625, +0.0000000000, +0.0004098790, +0.0000000000, +0.0004907853, +0.0000000000, +0.0005817525, +0.0000000000, +0.0006834782, +0.0000000000, +0.0007966881, +0.0000000000, +0.0009221383, +0.0000000000, +0.0010606178, +0.0000000000, +0.0012129515, +0.0000000000, +0.0013800041, +0.0000000000, +0.0015626848, +0.0000000000, +0.0017619529, +0.0000000000, +0.0019788241, +0.0000000000, +0.0022143787, +0.0000000000, +0.0024697715, +0.0000000000, +0.0027462425, +0.0000000000, +0.0030451312, +0.0000000000, +0.0033678928, +0.0000000000, +0.0037161183, +0.0000000000, +0.0040915578, +0.0000000000, +0.0044961498, +0.0000000000, +0.0049320558, +0.0000000000, +0.0054017033, +0.0000000000, +0.0059078375, +0.0000000000, +0.0064535860, +0.0000000000, +0.0070425380, +0.0000000000, +0.0076788436, +0.0000000000, +0.0083673390, +0.0000000000, +0.0091137048, +0.0000000000, +0.0099246683, +0.0000000000, +0.0108082660, +0.0000000000, +0.0117741868, +0.0000000000, +0.0128342256, +0.0000000000, +0.0140028938, +0.0000000000, +0.0152982506, +0.0000000000, +0.0167430570, +0.0000000000, +0.0183664064, +0.0000000000, +0.0202060801, +0.0000000000, +0.0223120327, +0.0000000000, +0.0247516963, +0.0000000000, +0.0276183140, +0.0000000000, +0.0310445375, +0.0000000000, +0.0352256211, +0.0000000000, +0.0404611696, +0.0000000000, +0.0472354231, +0.0000000000, +0.0563851215, +0.0000000000, +0.0694911881, +0.0000000000, +0.0899418673, +0.0000000000, +0.1265473875, +0.0000000000, +0.2116132716, +0.0000000000, +0.6358933477, +0.0000000000, +-0.6358933478, +0.0000000000, +-0.2116132717, +0.0000000000, +-0.1265473876, +0.0000000000, +-0.0899418674, +0.0000000000, +-0.0694911882, +0.0000000000, +-0.0563851216, +0.0000000000, +-0.0472354232, +0.0000000000, +-0.0404611697, +0.0000000000, +-0.0352256212, +0.0000000000, +-0.0310445376, +0.0000000000, +-0.0276183141, +0.0000000000, +-0.0247516964, +0.0000000000, +-0.0223120328, +0.0000000000, +-0.0202060802, +0.0000000000, +-0.0183664065, +0.0000000000, +-0.0167430571, +0.0000000000, +-0.0152982507, +0.0000000000, +-0.0140028939, +0.0000000000, +-0.0128342257, +0.0000000000, +-0.0117741869, +0.0000000000, +-0.0108082661, +0.0000000000, +-0.0099246684, +0.0000000000, +-0.0091137049, +0.0000000000, +-0.0083673391, +0.0000000000, +-0.0076788437, +0.0000000000, +-0.0070425381, +0.0000000000, +-0.0064535861, +0.0000000000, +-0.0059078376, +0.0000000000, +-0.0054017034, +0.0000000000, +-0.0049320559, +0.0000000000, +-0.0044961499, +0.0000000000, +-0.0040915579, +0.0000000000, +-0.0037161184, +0.0000000000, +-0.0033678929, +0.0000000000, +-0.0030451313, +0.0000000000, +-0.0027462426, +0.0000000000, +-0.0024697716, +0.0000000000, +-0.0022143788, +0.0000000000, +-0.0019788242, +0.0000000000, +-0.0017619530, +0.0000000000, +-0.0015626849, +0.0000000000, +-0.0013800042, +0.0000000000, +-0.0012129516, +0.0000000000, +-0.0010606179, +0.0000000000, +-0.0009221384, +0.0000000000, +-0.0007966882, +0.0000000000, +-0.0006834783, +0.0000000000, +-0.0005817526, +0.0000000000, +-0.0004907854, +0.0000000000, +-0.0004098791, +0.0000000000, +-0.0003383626, +0.0000000000, +-0.0002755900, +0.0000000000, +-0.0002209394, +0.0000000000, +-0.0001738121, +0.0000000000, +-0.0001336321, +0.0000000000, +-0.0000998452, +0.0000000000, +-0.0000719194, +0.0000000000, +-0.0000493437, +0.0000000000, +-0.0000316288, +0.0000000000, +-0.0000183062, +0.0000000000, +-0.0000089287, +0.0000000000, +-0.0000030703, +0.0000000000, +-0.0000003256}; diff --git a/examples/ReceiverPart1/Rcvr1Outputs.gnumeric b/examples/ReceiverPart1/Rcvr1Outputs.gnumeric new file mode 100644 index 0000000000000000000000000000000000000000..d8b30c946ca9491c205a1029d2abbc70bd8b8d3e GIT binary patch literal 13475 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 literal 0 HcmV?d00001 diff --git a/examples/ReceiverPart1/ReceiverPart1.ino b/examples/ReceiverPart1/ReceiverPart1.ino new file mode 100644 index 0000000..855a489 --- /dev/null +++ b/examples/ReceiverPart1/ReceiverPart1.ino @@ -0,0 +1,90 @@ +/* ReceiverPart1.ino Bob Larkin 20 April 2020 + * This is "Hello World" of Radio design. It can + * receive a Lower Sideband signal, but that is it. + * To test the floating point radio receiver blocks: + * AudioFilter90Deg_F32 + * RadioIQMixer_F32 + */ + +#include "Audio.h" +#include +#include "DSP_TeensyAudio_F32.h" + +AudioInputI2S i2s1; +AudioSynthWaveformSine_F32 sine1; // Test signal +RadioIQMixer_F32 iqmixer1; +AudioFilter90Deg_F32 hilbert1; +// NOTE: Use AudioMixer4_F32 *from Tympan* +AudioMixer4_F32 sum1; +AudioRecordQueue_F32 queue1; // The LSB output +AudioRecordQueue_F32 queue2; // The test sine wave + +AudioConnection_F32 patchCord0(sine1, 0, iqmixer1, 0); +AudioConnection_F32 patchCord2(sine1, 0, iqmixer1, 1); +AudioConnection_F32 patchCord4(iqmixer1, 0, hilbert1, 0); +AudioConnection_F32 patchCord5(iqmixer1, 1, hilbert1, 1); +AudioConnection_F32 patchCord6(hilbert1, 0, sum1, 0); +AudioConnection_F32 patchCord7(hilbert1, 1, sum1, 1); +AudioConnection_F32 patchCord8(sum1, 0, queue1, 0); +AudioConnection_F32 patchCord9(sine1, 0, queue2, 0); + +// Pick one of these +#include "hilbert19A.h" +#include "hilbert121A.h" +#include "hilbert251A.h" + +float dt1[128]; +float dt2[128]; +float *pq1, *pd1, *pq2, *pd2; +int i, k; + +void setup(void) { + AudioMemory(5); + AudioMemory_F32(10); + Serial.begin(300); delay(1000); + sine1.frequency(14000.0); + iqmixer1.frequency(16000.0); + // Pick one of the three, the 251 does not have + // enough samples here to show the full build-up. + // hilbert1.begin(hilbert19A, 19); + // hilbert1.begin(hilbert121A, 121); + hilbert1.begin(hilbert121A, 121); + sum1.gain(0, 1.0); // Leave at 1.0 + sum1.gain(1, -1.0); // -1 for LSB out + iqmixer1.showError(1); // Prints update() errors + hilbert1.showError(1); + queue1.begin(); + queue2.begin(); + i = 0; k=0; +} + +void loop(void) { + // Collect 128 samples and output to Serial + // This "if" will be active for i == 0 + if (queue1.available() >= 1 && i==0) { + pq1 = queue1.readBuffer(); + pd1 = &dt1[0]; + pq2 = queue2.readBuffer(); + pd2 = &dt2[0]; + for(k=0; k<128; k++) { + *pd1++ = *pq1++; + *pd2++ = *pq2++; + } + i=1; // Only collect 1 block + Serial.print("Maximum F32 memory usage at loop:"); + Serial.println( AudioMemoryUsageMax_F32() ); + queue1.freeBuffer(); + queue2.freeBuffer(); + queue1.end(); // No more data to queue1 + queue2.end(); // No more data to queue2 + } + if(i == 1) { + Serial.println("128 Samples: Time (sec), LSB Out, Sine Wave In"); + for (k=0; k<128; k++) { + Serial.print (0.000022667*(float32_t)k, 6); Serial.print (","); + Serial.print (dt1[k],7); Serial.print (","); + Serial.println (dt2[k],7); + } + i = 2; + } +} diff --git a/examples/ReceiverPart1/hilbert121A.h b/examples/ReceiverPart1/hilbert121A.h new file mode 100644 index 0000000..d624d04 --- /dev/null +++ b/examples/ReceiverPart1/hilbert121A.h @@ -0,0 +1,123 @@ +// Following is 121 term Hilbert FIR filter +float32_t hilbert121A[121] = { + 0.000000000000000000, + 0.000773378567767513, + 0.000000000000000000, + 0.001046207887980644, + 0.000000000000000000, + 0.001368896533613985, + 0.000000000000000000, + 0.001746769975247667, + 0.000000000000000000, + 0.002185555845922462, + 0.000000000000000000, + 0.002691457154069645, + 0.000000000000000000, + 0.003271251311125927, + 0.000000000000000000, + 0.003932423233774751, + 0.000000000000000000, + 0.004683343721596901, + 0.000000000000000000, + 0.005533508538632429, + 0.000000000000000000, + 0.006493859804516438, + 0.000000000000000000, + 0.007577220484233372, + 0.000000000000000000, + 0.008798886675905997, + 0.000000000000000000, + 0.010177443901536392, + 0.000000000000000000, + 0.011735907609641917, + 0.000000000000000000, + 0.013503343224246872, + 0.000000000000000000, + 0.015517212970554440, + 0.000000000000000000, + 0.017826854793349920, + 0.000000000000000000, + 0.020498780519188083, + 0.000000000000000000, + 0.023625003856774591, + 0.000000000000000000, + 0.027336628208641155, + 0.000000000000000000, + 0.031827023036304102, + 0.000000000000000000, + 0.037393534868609392, + 0.000000000000000000, + 0.044517689704988733, + 0.000000000000000000, + 0.054032871748808158, + 0.000000000000000000, + 0.067515548043274365, + 0.000000000000000000, + 0.088347125250410385, + 0.000000000000000000, + 0.125324201622410869, + 0.000000000000000000, + 0.210709715079613419, + 0.000000000000000000, + 0.634897508268964295, + 0.000000000000000000, +-0.634897508268964295, + 0.000000000000000000, +-0.210709715079613419, + 0.000000000000000000, +-0.125324201622410869, + 0.000000000000000000, +-0.088347125250410385, + 0.000000000000000000, +-0.067515548043274365, + 0.000000000000000000, +-0.054032871748808158, + 0.000000000000000000, +-0.044517689704988733, + 0.000000000000000000, +-0.037393534868609392, + 0.000000000000000000, +-0.031827023036304102, + 0.000000000000000000, +-0.027336628208641155, + 0.000000000000000000, +-0.023625003856774591, + 0.000000000000000000, +-0.020498780519188083, + 0.000000000000000000, +-0.017826854793349920, + 0.000000000000000000, +-0.015517212970554440, + 0.000000000000000000, +-0.013503343224246872, + 0.000000000000000000, +-0.011735907609641917, + 0.000000000000000000, +-0.010177443901536392, + 0.000000000000000000, +-0.008798886675905997, + 0.000000000000000000, +-0.007577220484233372, + 0.000000000000000000, +-0.006493859804516438, + 0.000000000000000000, +-0.005533508538632429, + 0.000000000000000000, +-0.004683343721596901, + 0.000000000000000000, +-0.003932423233774751, + 0.000000000000000000, +-0.003271251311125927, + 0.000000000000000000, +-0.002691457154069645, + 0.000000000000000000, +-0.002185555845922462, + 0.000000000000000000, +-0.001746769975247667, + 0.000000000000000000, +-0.001368896533613985, + 0.000000000000000000, +-0.001046207887980644, + 0.000000000000000000, +-0.000773378567767513, + 0.000000000000000000}; diff --git a/examples/ReceiverPart1/hilbert19A.h b/examples/ReceiverPart1/hilbert19A.h new file mode 100644 index 0000000..155b132 --- /dev/null +++ b/examples/ReceiverPart1/hilbert19A.h @@ -0,0 +1,21 @@ +// Following is a 19 term Hilbert FIR filter +float hilbert19A[]={ + 0.003006666677728199, + 0.000000000000000000, + 0.017439390086760032, + 0.000000000000000000, + 0.058235158985840196, + 0.000000000000000000, + 0.161905323559397157, + 0.000000000000000000, + 0.617838316334015092, + 0.000000000000000000, +-0.617838316334015092, + 0.000000000000000000, +-0.161905323559397157, + 0.000000000000000000, +-0.058235158985840196, + 0.000000000000000000, +-0.017439390086760032, + 0.000000000000000000, +-0.003006666677728199}; diff --git a/examples/ReceiverPart1/hilbert251A.h b/examples/ReceiverPart1/hilbert251A.h new file mode 100644 index 0000000..745db86 --- /dev/null +++ b/examples/ReceiverPart1/hilbert251A.h @@ -0,0 +1,253 @@ +// Following is 251 term Hilbert FIR filter +float32_t hilbert251A[]={ +0.0000003255, +0.0000000000, +0.0000030702, +0.0000000000, +0.0000089286, +0.0000000000, +0.0000183061, +0.0000000000, +0.0000316287, +0.0000000000, +0.0000493436, +0.0000000000, +0.0000719193, +0.0000000000, +0.0000998451, +0.0000000000, +0.0001336320, +0.0000000000, +0.0001738120, +0.0000000000, +0.0002209393, +0.0000000000, +0.0002755899, +0.0000000000, +0.0003383625, +0.0000000000, +0.0004098790, +0.0000000000, +0.0004907853, +0.0000000000, +0.0005817525, +0.0000000000, +0.0006834782, +0.0000000000, +0.0007966881, +0.0000000000, +0.0009221383, +0.0000000000, +0.0010606178, +0.0000000000, +0.0012129515, +0.0000000000, +0.0013800041, +0.0000000000, +0.0015626848, +0.0000000000, +0.0017619529, +0.0000000000, +0.0019788241, +0.0000000000, +0.0022143787, +0.0000000000, +0.0024697715, +0.0000000000, +0.0027462425, +0.0000000000, +0.0030451312, +0.0000000000, +0.0033678928, +0.0000000000, +0.0037161183, +0.0000000000, +0.0040915578, +0.0000000000, +0.0044961498, +0.0000000000, +0.0049320558, +0.0000000000, +0.0054017033, +0.0000000000, +0.0059078375, +0.0000000000, +0.0064535860, +0.0000000000, +0.0070425380, +0.0000000000, +0.0076788436, +0.0000000000, +0.0083673390, +0.0000000000, +0.0091137048, +0.0000000000, +0.0099246683, +0.0000000000, +0.0108082660, +0.0000000000, +0.0117741868, +0.0000000000, +0.0128342256, +0.0000000000, +0.0140028938, +0.0000000000, +0.0152982506, +0.0000000000, +0.0167430570, +0.0000000000, +0.0183664064, +0.0000000000, +0.0202060801, +0.0000000000, +0.0223120327, +0.0000000000, +0.0247516963, +0.0000000000, +0.0276183140, +0.0000000000, +0.0310445375, +0.0000000000, +0.0352256211, +0.0000000000, +0.0404611696, +0.0000000000, +0.0472354231, +0.0000000000, +0.0563851215, +0.0000000000, +0.0694911881, +0.0000000000, +0.0899418673, +0.0000000000, +0.1265473875, +0.0000000000, +0.2116132716, +0.0000000000, +0.6358933477, +0.0000000000, +-0.6358933478, +0.0000000000, +-0.2116132717, +0.0000000000, +-0.1265473876, +0.0000000000, +-0.0899418674, +0.0000000000, +-0.0694911882, +0.0000000000, +-0.0563851216, +0.0000000000, +-0.0472354232, +0.0000000000, +-0.0404611697, +0.0000000000, +-0.0352256212, +0.0000000000, +-0.0310445376, +0.0000000000, +-0.0276183141, +0.0000000000, +-0.0247516964, +0.0000000000, +-0.0223120328, +0.0000000000, +-0.0202060802, +0.0000000000, +-0.0183664065, +0.0000000000, +-0.0167430571, +0.0000000000, +-0.0152982507, +0.0000000000, +-0.0140028939, +0.0000000000, +-0.0128342257, +0.0000000000, +-0.0117741869, +0.0000000000, +-0.0108082661, +0.0000000000, +-0.0099246684, +0.0000000000, +-0.0091137049, +0.0000000000, +-0.0083673391, +0.0000000000, +-0.0076788437, +0.0000000000, +-0.0070425381, +0.0000000000, +-0.0064535861, +0.0000000000, +-0.0059078376, +0.0000000000, +-0.0054017034, +0.0000000000, +-0.0049320559, +0.0000000000, +-0.0044961499, +0.0000000000, +-0.0040915579, +0.0000000000, +-0.0037161184, +0.0000000000, +-0.0033678929, +0.0000000000, +-0.0030451313, +0.0000000000, +-0.0027462426, +0.0000000000, +-0.0024697716, +0.0000000000, +-0.0022143788, +0.0000000000, +-0.0019788242, +0.0000000000, +-0.0017619530, +0.0000000000, +-0.0015626849, +0.0000000000, +-0.0013800042, +0.0000000000, +-0.0012129516, +0.0000000000, +-0.0010606179, +0.0000000000, +-0.0009221384, +0.0000000000, +-0.0007966882, +0.0000000000, +-0.0006834783, +0.0000000000, +-0.0005817526, +0.0000000000, +-0.0004907854, +0.0000000000, +-0.0004098791, +0.0000000000, +-0.0003383626, +0.0000000000, +-0.0002755900, +0.0000000000, +-0.0002209394, +0.0000000000, +-0.0001738121, +0.0000000000, +-0.0001336321, +0.0000000000, +-0.0000998452, +0.0000000000, +-0.0000719194, +0.0000000000, +-0.0000493437, +0.0000000000, +-0.0000316288, +0.0000000000, +-0.0000183062, +0.0000000000, +-0.0000089287, +0.0000000000, +-0.0000030703, +0.0000000000, +-0.0000003256}; diff --git a/examples/ReceiverPart2/ReceiverPart2.ino b/examples/ReceiverPart2/ReceiverPart2.ino new file mode 100644 index 0000000..83125ce --- /dev/null +++ b/examples/ReceiverPart2/ReceiverPart2.ino @@ -0,0 +1,177 @@ +/* ReceiverPart2.ino Bob Larkin 29 April 2020 + * This is a simple SP radio design. It can receive 2 modes, + * Single Sideband (SSB) and Narrow Band FM (NBFM). SSB + * breaks into Lower Sidband (LSB) and Upper Sideband (USB). + * It gets even better in that AM can be received on either + * LSB or USB by tuning to the AM carrier frequency. + * + * The signal path is switched between SSB and FM by a Chip + * Audette AudioSwitch4_F32 switch block. This keeps resources + * from being used in blocks that are not needed. + * + * We are restricted to receiving in the 8 to 22 kHz range, + * so to use this on the air would require frequency conversion + * hardware. + * + * Details on the blocks are part of the include .h files for the + * blocks and in the INO files + * TestFM.ino + * ReceiverPart1.ino + * + * Input and Output is via the Teensy Audio Adaptor that uses + * a SGTL5000 CODEC, + * + * See the individual .h files for each block for more details. + * + * Measured peak-to-peak levels, using AudioAnalyzePeak_F32, + * all done at overload point for ADC: + * At ADC (i2sIn), max, 2.0 + * At IQ Mixer out, max, 2.0 + * At 90 deg Phase out, 2.0 + * At Sum out 2.0 + * At LPF FIR Out 2.0 + * + * FM Det gives 0.50 out for about 5.6 kHz p-p deviation + * + * T3.6 Processor load, measured: 16% for NBFM + * 30% for LSB or USB 29 tap LPF + * T4.0 Processor load, measured: 4.3% for NBFM + * 6.5% for LSB or USB 29 tap LPF + */ + +#include "Audio.h" +#include +#include "DSP_TeensyAudio_F32.h" + +// ********* Mini Control Panel ********* +// Set mode and gain here and re-compile + +// Here is the mode switch +#define LSB 1 +#define USB 2 +#define NBFM 3 +uint16_t mode = NBFM; // <--Select mode + +int gainControlDB = 0; // Set SSB gain in dB. 0 dB is a gain of 1.0 + +// ***************************************** +// To work with T4.0 the I2S routine outputs 16-bit integer (I16). Then +// use Audette I16 to F32 convert. Same below for output, in reverse. +AudioInputI2S i2sIn; +AudioConvert_I16toF32 cnvrt1; +AudioSwitch4_F32 switch1; // Select SSB or FM +RadioIQMixer_F32 iqmixer1; +AudioFilter90Deg_F32 hilbert1; +AudioMixer4_F32 sum1; // Summing node for the SSB receiver +AudioFilterFIR_F32 fir1; // Low Pass Filter to frequency limit the SSB +RadioFMDetector_F32 fmdet1; // NBFM from 10 to 20 kHz +AudioMixer4_F32 sum2; // SSB and NBFM rejoin here +AudioConvert_F32toI16 cnvrt2; // Left +AudioConvert_F32toI16 cnvrt3; // Right +AudioOutputI2S i2sOut; +AudioAnalyzePeak_F32 peak1; +AudioControlSGTL5000 sgtl5000_1; + +AudioConnection conI16_1(i2sIn, 0, cnvrt1, 0); // ADC +AudioConnection_F32 connect0(cnvrt1, 0, switch1, 0); // Analog to Digital +AudioConnection_F32 connect1(switch1, 0, iqmixer1, 0); // SSB Input +AudioConnection_F32 connect2(switch1, 0, iqmixer1, 1); // SSB Input +AudioConnection_F32 connect3(switch1, 1, fmdet1, 0); // FM input +AudioConnection_F32 connect4(iqmixer1, 0, hilbert1, 0); // Broadband 90 deg phase +AudioConnection_F32 connect5(iqmixer1, 1, hilbert1, 1); +AudioConnection_F32 connect6(hilbert1, 0, sum1, 0); // Sideband select +AudioConnection_F32 connect7(hilbert1, 1, sum1, 1); +AudioConnection_F32 connect8(sum1, 0, fir1, 0); // Limit audio BW +AudioConnection_F32 connect9(fir1, 0, sum2, 0); // Output of SSB +AudioConnection_F32 connectA(fmdet1, 0, sum2, 1); // Output of FM +AudioConnection_F32 connectC(sum2, 0, cnvrt2, 0); // Out to the CODEC left +AudioConnection_F32 connectD(sum2, 0, cnvrt3, 0); // and right +AudioConnection_F32 connectE(sum2, 0, peak1, 0); +AudioConnection conI16_2(cnvrt2, 0, i2sOut, 0); // DAC +AudioConnection conI16_3(cnvrt3, 0, i2sOut, 1); // DAC + +// Filter for AudioFilter90Deg_F32 hilbert1 +#include "hilbert251A.h" + +/* FIR filter designed with http://t-filter.appspot.com + * fs = 44100 Hz, < 5kHz ripple 0.29 dB, >9 kHz, -62 dB, 29 taps + */ +float32_t fir_IQ29[29] = { +-0.000970689f, -0.004690292f, -0.008256345f, -0.007565650f, + 0.001524420f, 0.015435011f, 0.021920240f, 0.008211937f, +-0.024286413f, -0.052184700f, -0.040532507f, 0.031248107f, + 0.146902412f, 0.255179564f, 0.299445269f, 0.255179564f, + 0.146902412f, 0.031248107f, -0.040532507f, -0.052184700f, +-0.024286413f, 0.008211937f, 0.021920240f, 0.015435011f, + 0.001524420f, -0.007565650f, -0.008256345f, -0.004690292f, +-0.000970689f}; + +void setup(void) { + float32_t vGain; + AudioMemory(5); + AudioMemory_F32(5); + Serial.begin(300); delay(1000); + + // Enable the audio shield, select input, and enable output + sgtl5000_1.enable(); // ADC + sgtl5000_1.inputSelect(AUDIO_INPUT_LINEIN); + + // The switch is single pole 4 position, numbered (0, 3) 0=SSB, 1 = FM + if(mode==LSB || mode==USB){ switch1.setChannel(0); Serial.println("SSB"); } + else if(mode==NBFM) { switch1.setChannel(1); Serial.println("NBFM"); } + + iqmixer1.frequency(15000.0); // LO Frequency, typically 10 to 15 kHz + + hilbert1.begin(hilbert251A, 251); // Set the Hilbert transform FIR filter + + sum1.gain(0, 1.0f); // Leave set at 1.0 + if(mode==LSB) sum1.gain(1, -1.0f); // -1 for LSB out + else if(mode==USB) sum1.gain(1, 1.0f); // +1 for USB and for NBFM, we don't care + + // The FM detector has error checking during object construction + // when Serial.print is not available. See RadioFMDetector_F32.h: + Serial.print("FM Initialization errors: "); + Serial.println( fmdet1.returnInitializeFMError() ); + + // See RadioFMDetector_F32.h for information on functions for modifying the + // FM Detector. Default values are used here, starting with a 15 kHz center frequency. + + fir1.begin(fir_IQ29, 29); // 5 kHz bandwidth set for radio in SSB + + // The gainControlDB goes in 1 dB steps. Convert here to a voltage ratio + vGain = powf(10.0f, ((float32_t)gainControlDB)/20.0 ); + // And apply that ratio to the output summing block. Gain here for SSB only + sum2.gain(0, vGain); Serial.print("vGain = "); Serial.println(vGain, 4); + sum2.gain(1, 1.0f); // FM gain + + // The following enable error checking inside of the blocks indicated. + // Output goes to the Serial (USB) Monitor. Use for debug. + //hilbert1.showError(1); // Should show input error when in FM + //fmdet1.showError(1); // Should show input error when in LSB or USB +} + +void loop(void) { +// Here is where the adjustment of the volume control could go. +// And anything else that needs regular attention, other +// than the audio stream. + + if (peak1.available() ) {Serial.print("P-P ="); Serial.println(peak1.readPeakToPeak(), 6);} + else Serial.println("Peak-Peak not available"); + Serial.print("CPU: Percent Usage, Max: "); + Serial.print(AudioProcessorUsage()); + Serial.print(", "); + Serial.print(AudioProcessorUsageMax()); + Serial.print(" "); + Serial.print("Int16 Memory: "); + Serial.print(AudioMemoryUsage()); + Serial.print(", "); + Serial.print(AudioMemoryUsageMax()); + Serial.print(" "); + Serial.print("Float Memory: "); + Serial.print(AudioMemoryUsage_F32()); + Serial.print(", "); + Serial.println(AudioMemoryUsageMax_F32()); + Serial.println(); + + delay(1000); +} diff --git a/examples/ReceiverPart2/hilbert121A.h b/examples/ReceiverPart2/hilbert121A.h new file mode 100644 index 0000000..d624d04 --- /dev/null +++ b/examples/ReceiverPart2/hilbert121A.h @@ -0,0 +1,123 @@ +// Following is 121 term Hilbert FIR filter +float32_t hilbert121A[121] = { + 0.000000000000000000, + 0.000773378567767513, + 0.000000000000000000, + 0.001046207887980644, + 0.000000000000000000, + 0.001368896533613985, + 0.000000000000000000, + 0.001746769975247667, + 0.000000000000000000, + 0.002185555845922462, + 0.000000000000000000, + 0.002691457154069645, + 0.000000000000000000, + 0.003271251311125927, + 0.000000000000000000, + 0.003932423233774751, + 0.000000000000000000, + 0.004683343721596901, + 0.000000000000000000, + 0.005533508538632429, + 0.000000000000000000, + 0.006493859804516438, + 0.000000000000000000, + 0.007577220484233372, + 0.000000000000000000, + 0.008798886675905997, + 0.000000000000000000, + 0.010177443901536392, + 0.000000000000000000, + 0.011735907609641917, + 0.000000000000000000, + 0.013503343224246872, + 0.000000000000000000, + 0.015517212970554440, + 0.000000000000000000, + 0.017826854793349920, + 0.000000000000000000, + 0.020498780519188083, + 0.000000000000000000, + 0.023625003856774591, + 0.000000000000000000, + 0.027336628208641155, + 0.000000000000000000, + 0.031827023036304102, + 0.000000000000000000, + 0.037393534868609392, + 0.000000000000000000, + 0.044517689704988733, + 0.000000000000000000, + 0.054032871748808158, + 0.000000000000000000, + 0.067515548043274365, + 0.000000000000000000, + 0.088347125250410385, + 0.000000000000000000, + 0.125324201622410869, + 0.000000000000000000, + 0.210709715079613419, + 0.000000000000000000, + 0.634897508268964295, + 0.000000000000000000, +-0.634897508268964295, + 0.000000000000000000, +-0.210709715079613419, + 0.000000000000000000, +-0.125324201622410869, + 0.000000000000000000, +-0.088347125250410385, + 0.000000000000000000, +-0.067515548043274365, + 0.000000000000000000, +-0.054032871748808158, + 0.000000000000000000, +-0.044517689704988733, + 0.000000000000000000, +-0.037393534868609392, + 0.000000000000000000, +-0.031827023036304102, + 0.000000000000000000, +-0.027336628208641155, + 0.000000000000000000, +-0.023625003856774591, + 0.000000000000000000, +-0.020498780519188083, + 0.000000000000000000, +-0.017826854793349920, + 0.000000000000000000, +-0.015517212970554440, + 0.000000000000000000, +-0.013503343224246872, + 0.000000000000000000, +-0.011735907609641917, + 0.000000000000000000, +-0.010177443901536392, + 0.000000000000000000, +-0.008798886675905997, + 0.000000000000000000, +-0.007577220484233372, + 0.000000000000000000, +-0.006493859804516438, + 0.000000000000000000, +-0.005533508538632429, + 0.000000000000000000, +-0.004683343721596901, + 0.000000000000000000, +-0.003932423233774751, + 0.000000000000000000, +-0.003271251311125927, + 0.000000000000000000, +-0.002691457154069645, + 0.000000000000000000, +-0.002185555845922462, + 0.000000000000000000, +-0.001746769975247667, + 0.000000000000000000, +-0.001368896533613985, + 0.000000000000000000, +-0.001046207887980644, + 0.000000000000000000, +-0.000773378567767513, + 0.000000000000000000}; diff --git a/examples/ReceiverPart2/hilbert19A.h b/examples/ReceiverPart2/hilbert19A.h new file mode 100644 index 0000000..155b132 --- /dev/null +++ b/examples/ReceiverPart2/hilbert19A.h @@ -0,0 +1,21 @@ +// Following is a 19 term Hilbert FIR filter +float hilbert19A[]={ + 0.003006666677728199, + 0.000000000000000000, + 0.017439390086760032, + 0.000000000000000000, + 0.058235158985840196, + 0.000000000000000000, + 0.161905323559397157, + 0.000000000000000000, + 0.617838316334015092, + 0.000000000000000000, +-0.617838316334015092, + 0.000000000000000000, +-0.161905323559397157, + 0.000000000000000000, +-0.058235158985840196, + 0.000000000000000000, +-0.017439390086760032, + 0.000000000000000000, +-0.003006666677728199}; diff --git a/examples/ReceiverPart2/hilbert251A.h b/examples/ReceiverPart2/hilbert251A.h new file mode 100644 index 0000000..745db86 --- /dev/null +++ b/examples/ReceiverPart2/hilbert251A.h @@ -0,0 +1,253 @@ +// Following is 251 term Hilbert FIR filter +float32_t hilbert251A[]={ +0.0000003255, +0.0000000000, +0.0000030702, +0.0000000000, +0.0000089286, +0.0000000000, +0.0000183061, +0.0000000000, +0.0000316287, +0.0000000000, +0.0000493436, +0.0000000000, +0.0000719193, +0.0000000000, +0.0000998451, +0.0000000000, +0.0001336320, +0.0000000000, +0.0001738120, +0.0000000000, +0.0002209393, +0.0000000000, +0.0002755899, +0.0000000000, +0.0003383625, +0.0000000000, +0.0004098790, +0.0000000000, +0.0004907853, +0.0000000000, +0.0005817525, +0.0000000000, +0.0006834782, +0.0000000000, +0.0007966881, +0.0000000000, +0.0009221383, +0.0000000000, +0.0010606178, +0.0000000000, +0.0012129515, +0.0000000000, +0.0013800041, +0.0000000000, +0.0015626848, +0.0000000000, +0.0017619529, +0.0000000000, +0.0019788241, +0.0000000000, +0.0022143787, +0.0000000000, +0.0024697715, +0.0000000000, +0.0027462425, +0.0000000000, +0.0030451312, +0.0000000000, +0.0033678928, +0.0000000000, +0.0037161183, +0.0000000000, +0.0040915578, +0.0000000000, +0.0044961498, +0.0000000000, +0.0049320558, +0.0000000000, +0.0054017033, +0.0000000000, +0.0059078375, +0.0000000000, +0.0064535860, +0.0000000000, +0.0070425380, +0.0000000000, +0.0076788436, +0.0000000000, +0.0083673390, +0.0000000000, +0.0091137048, +0.0000000000, +0.0099246683, +0.0000000000, +0.0108082660, +0.0000000000, +0.0117741868, +0.0000000000, +0.0128342256, +0.0000000000, +0.0140028938, +0.0000000000, +0.0152982506, +0.0000000000, +0.0167430570, +0.0000000000, +0.0183664064, +0.0000000000, +0.0202060801, +0.0000000000, +0.0223120327, +0.0000000000, +0.0247516963, +0.0000000000, +0.0276183140, +0.0000000000, +0.0310445375, +0.0000000000, +0.0352256211, +0.0000000000, +0.0404611696, +0.0000000000, +0.0472354231, +0.0000000000, +0.0563851215, +0.0000000000, +0.0694911881, +0.0000000000, +0.0899418673, +0.0000000000, +0.1265473875, +0.0000000000, +0.2116132716, +0.0000000000, +0.6358933477, +0.0000000000, +-0.6358933478, +0.0000000000, +-0.2116132717, +0.0000000000, +-0.1265473876, +0.0000000000, +-0.0899418674, +0.0000000000, +-0.0694911882, +0.0000000000, +-0.0563851216, +0.0000000000, +-0.0472354232, +0.0000000000, +-0.0404611697, +0.0000000000, +-0.0352256212, +0.0000000000, +-0.0310445376, +0.0000000000, +-0.0276183141, +0.0000000000, +-0.0247516964, +0.0000000000, +-0.0223120328, +0.0000000000, +-0.0202060802, +0.0000000000, +-0.0183664065, +0.0000000000, +-0.0167430571, +0.0000000000, +-0.0152982507, +0.0000000000, +-0.0140028939, +0.0000000000, +-0.0128342257, +0.0000000000, +-0.0117741869, +0.0000000000, +-0.0108082661, +0.0000000000, +-0.0099246684, +0.0000000000, +-0.0091137049, +0.0000000000, +-0.0083673391, +0.0000000000, +-0.0076788437, +0.0000000000, +-0.0070425381, +0.0000000000, +-0.0064535861, +0.0000000000, +-0.0059078376, +0.0000000000, +-0.0054017034, +0.0000000000, +-0.0049320559, +0.0000000000, +-0.0044961499, +0.0000000000, +-0.0040915579, +0.0000000000, +-0.0037161184, +0.0000000000, +-0.0033678929, +0.0000000000, +-0.0030451313, +0.0000000000, +-0.0027462426, +0.0000000000, +-0.0024697716, +0.0000000000, +-0.0022143788, +0.0000000000, +-0.0019788242, +0.0000000000, +-0.0017619530, +0.0000000000, +-0.0015626849, +0.0000000000, +-0.0013800042, +0.0000000000, +-0.0012129516, +0.0000000000, +-0.0010606179, +0.0000000000, +-0.0009221384, +0.0000000000, +-0.0007966882, +0.0000000000, +-0.0006834783, +0.0000000000, +-0.0005817526, +0.0000000000, +-0.0004907854, +0.0000000000, +-0.0004098791, +0.0000000000, +-0.0003383626, +0.0000000000, +-0.0002755900, +0.0000000000, +-0.0002209394, +0.0000000000, +-0.0001738121, +0.0000000000, +-0.0001336321, +0.0000000000, +-0.0000998452, +0.0000000000, +-0.0000719194, +0.0000000000, +-0.0000493437, +0.0000000000, +-0.0000316288, +0.0000000000, +-0.0000183062, +0.0000000000, +-0.0000089287, +0.0000000000, +-0.0000030703, +0.0000000000, +-0.0000003256}; diff --git a/examples/TestEqualizer1/TestEqualizer1.ino b/examples/TestEqualizer1/TestEqualizer1.ino new file mode 100644 index 0000000..a08f2f0 --- /dev/null +++ b/examples/TestEqualizer1/TestEqualizer1.ino @@ -0,0 +1,81 @@ +/* TestEqualizer1.ino Bob Larkin 10 May 2020 + * This is a test of the Filter Equalizer for Teensy Audio. + * This version is for the Chip Audette _F32 Library. + */ + +#include "Audio.h" +#include "OpenAudio_ArduinoLibrary.h" +#include "DSP_TeensyAudio_F32.h" + +AudioInputI2S i2s1; // Start interrupts +AudioSynthWaveformSine_F32 sine1; // Test signal +AudioFilterEqualizer_F32 equalize1; +AudioRecordQueue_F32 queue1; // The LSB output +AudioConnection_F32 patchCord1(sine1, 0, equalize1, 0); +AudioConnection_F32 patchCord2(equalize1, 0, queue1, 0); + +//nBands = 10 This octave band equalizer is set strangely to demonstrate the Equalizer +float fBand[] = { 40.0, 80.0, 160.0, 320.0, 640.0, 1280.0, 2560.0, 5120.0, 10240.0, 22058.5}; +float dbBand[] = {10.0, 2.0, -2.0, -5.0, -2.0, -4.0, -20.0, 6.0, 10.0, -100}; +float equalizeCoeffs[249]; +float dt1[128]; +float *pq1, *pd1; +int i, k; +float32_t dBResponse[500]; // Show lots of detail + +void setup(void) { + AudioMemory(5); + AudioMemory_F32(10); + Serial.begin(300); delay(1000); + Serial.println("*** Test Audio Equalizer ***"); + sine1.frequency(1000.0f); + + // Initialize the equalizer with 10 bands, 199 FIR coefficients and -65 dB sidelobes + uint16_t eq = equalize1.equalizerNew(10, &fBand[0], &dbBand[0], 199, &equalizeCoeffs[0], 65); + if (eq == ERR_EQ_BANDS) + Serial.println("Equalizer failed: Invalid number of frequency bands."); + else if (eq == ERR_EQ_SIDELOBES) + Serial.println("Equalizer failed: Invalid sidelobe specification."); + else if (eq == ERR_EQ_NFIR) + Serial.println("Equalizer failed: Invalid number of FIR coefficients."); + else + Serial.println("Equalizer initialized successfully."); + + // Get frequency response in dB for 500 points, uniformly spaced from 0 to 21058 Hz + equalize1.getResponse(500, dBResponse); + Serial.println("Freq Hz, Response dB"); + for(int m=0; m<500; m++) { // Print the response in Hz, dB, suitable for a spread sheet + Serial.print((float32_t)m * 22058.5f / 500.0f); + Serial.print(","); + Serial.println(dBResponse[m]); + } + i = -10; k=0; +} + +void loop(void) { + if(i<0) i++; // Get past startup + if(i==0) queue1.begin(); + + // Collect 128 samples and output to Serial + // This "if" will be active for i == 0 + if (queue1.available() >= 1 && i >= 0) { + pq1 = queue1.readBuffer(); + pd1 = &dt1[0]; + for(k=0; k<128; k++) { + *pd1++ = *pq1++; + } + i=1; // Only collect 1 block + Serial.print("Maximum F32 memory usage at loop:"); + Serial.println( AudioMemoryUsageMax_F32() ); + queue1.freeBuffer(); + queue1.end(); // No more data to queue1 + } + if(i == 1) { + // Uncomment the next 3 lines to printout a sample of the sine wave. + /*Serial.println("128 Samples: "); + for (k=0; k<128; k++) { + Serial.println (dt1[k],7); */ + } + i = 2; + delay(2); +} diff --git a/examples/TestEqualizer1/hilbert121A.h b/examples/TestEqualizer1/hilbert121A.h new file mode 100644 index 0000000..d624d04 --- /dev/null +++ b/examples/TestEqualizer1/hilbert121A.h @@ -0,0 +1,123 @@ +// Following is 121 term Hilbert FIR filter +float32_t hilbert121A[121] = { + 0.000000000000000000, + 0.000773378567767513, + 0.000000000000000000, + 0.001046207887980644, + 0.000000000000000000, + 0.001368896533613985, + 0.000000000000000000, + 0.001746769975247667, + 0.000000000000000000, + 0.002185555845922462, + 0.000000000000000000, + 0.002691457154069645, + 0.000000000000000000, + 0.003271251311125927, + 0.000000000000000000, + 0.003932423233774751, + 0.000000000000000000, + 0.004683343721596901, + 0.000000000000000000, + 0.005533508538632429, + 0.000000000000000000, + 0.006493859804516438, + 0.000000000000000000, + 0.007577220484233372, + 0.000000000000000000, + 0.008798886675905997, + 0.000000000000000000, + 0.010177443901536392, + 0.000000000000000000, + 0.011735907609641917, + 0.000000000000000000, + 0.013503343224246872, + 0.000000000000000000, + 0.015517212970554440, + 0.000000000000000000, + 0.017826854793349920, + 0.000000000000000000, + 0.020498780519188083, + 0.000000000000000000, + 0.023625003856774591, + 0.000000000000000000, + 0.027336628208641155, + 0.000000000000000000, + 0.031827023036304102, + 0.000000000000000000, + 0.037393534868609392, + 0.000000000000000000, + 0.044517689704988733, + 0.000000000000000000, + 0.054032871748808158, + 0.000000000000000000, + 0.067515548043274365, + 0.000000000000000000, + 0.088347125250410385, + 0.000000000000000000, + 0.125324201622410869, + 0.000000000000000000, + 0.210709715079613419, + 0.000000000000000000, + 0.634897508268964295, + 0.000000000000000000, +-0.634897508268964295, + 0.000000000000000000, +-0.210709715079613419, + 0.000000000000000000, +-0.125324201622410869, + 0.000000000000000000, +-0.088347125250410385, + 0.000000000000000000, +-0.067515548043274365, + 0.000000000000000000, +-0.054032871748808158, + 0.000000000000000000, +-0.044517689704988733, + 0.000000000000000000, +-0.037393534868609392, + 0.000000000000000000, +-0.031827023036304102, + 0.000000000000000000, +-0.027336628208641155, + 0.000000000000000000, +-0.023625003856774591, + 0.000000000000000000, +-0.020498780519188083, + 0.000000000000000000, +-0.017826854793349920, + 0.000000000000000000, +-0.015517212970554440, + 0.000000000000000000, +-0.013503343224246872, + 0.000000000000000000, +-0.011735907609641917, + 0.000000000000000000, +-0.010177443901536392, + 0.000000000000000000, +-0.008798886675905997, + 0.000000000000000000, +-0.007577220484233372, + 0.000000000000000000, +-0.006493859804516438, + 0.000000000000000000, +-0.005533508538632429, + 0.000000000000000000, +-0.004683343721596901, + 0.000000000000000000, +-0.003932423233774751, + 0.000000000000000000, +-0.003271251311125927, + 0.000000000000000000, +-0.002691457154069645, + 0.000000000000000000, +-0.002185555845922462, + 0.000000000000000000, +-0.001746769975247667, + 0.000000000000000000, +-0.001368896533613985, + 0.000000000000000000, +-0.001046207887980644, + 0.000000000000000000, +-0.000773378567767513, + 0.000000000000000000}; diff --git a/examples/TestEqualizer1/hilbert19A.h b/examples/TestEqualizer1/hilbert19A.h new file mode 100644 index 0000000..155b132 --- /dev/null +++ b/examples/TestEqualizer1/hilbert19A.h @@ -0,0 +1,21 @@ +// Following is a 19 term Hilbert FIR filter +float hilbert19A[]={ + 0.003006666677728199, + 0.000000000000000000, + 0.017439390086760032, + 0.000000000000000000, + 0.058235158985840196, + 0.000000000000000000, + 0.161905323559397157, + 0.000000000000000000, + 0.617838316334015092, + 0.000000000000000000, +-0.617838316334015092, + 0.000000000000000000, +-0.161905323559397157, + 0.000000000000000000, +-0.058235158985840196, + 0.000000000000000000, +-0.017439390086760032, + 0.000000000000000000, +-0.003006666677728199}; diff --git a/examples/TestEqualizer1/hilbert251A.h b/examples/TestEqualizer1/hilbert251A.h new file mode 100644 index 0000000..745db86 --- /dev/null +++ b/examples/TestEqualizer1/hilbert251A.h @@ -0,0 +1,253 @@ +// Following is 251 term Hilbert FIR filter +float32_t hilbert251A[]={ +0.0000003255, +0.0000000000, +0.0000030702, +0.0000000000, +0.0000089286, +0.0000000000, +0.0000183061, +0.0000000000, +0.0000316287, +0.0000000000, +0.0000493436, +0.0000000000, +0.0000719193, +0.0000000000, +0.0000998451, +0.0000000000, +0.0001336320, +0.0000000000, +0.0001738120, +0.0000000000, +0.0002209393, +0.0000000000, +0.0002755899, +0.0000000000, +0.0003383625, +0.0000000000, +0.0004098790, +0.0000000000, +0.0004907853, +0.0000000000, +0.0005817525, +0.0000000000, +0.0006834782, +0.0000000000, +0.0007966881, +0.0000000000, +0.0009221383, +0.0000000000, +0.0010606178, +0.0000000000, +0.0012129515, +0.0000000000, +0.0013800041, +0.0000000000, +0.0015626848, +0.0000000000, +0.0017619529, +0.0000000000, +0.0019788241, +0.0000000000, +0.0022143787, +0.0000000000, +0.0024697715, +0.0000000000, +0.0027462425, +0.0000000000, +0.0030451312, +0.0000000000, +0.0033678928, +0.0000000000, +0.0037161183, +0.0000000000, +0.0040915578, +0.0000000000, +0.0044961498, +0.0000000000, +0.0049320558, +0.0000000000, +0.0054017033, +0.0000000000, +0.0059078375, +0.0000000000, +0.0064535860, +0.0000000000, +0.0070425380, +0.0000000000, +0.0076788436, +0.0000000000, +0.0083673390, +0.0000000000, +0.0091137048, +0.0000000000, +0.0099246683, +0.0000000000, +0.0108082660, +0.0000000000, +0.0117741868, +0.0000000000, +0.0128342256, +0.0000000000, +0.0140028938, +0.0000000000, +0.0152982506, +0.0000000000, +0.0167430570, +0.0000000000, +0.0183664064, +0.0000000000, +0.0202060801, +0.0000000000, +0.0223120327, +0.0000000000, +0.0247516963, +0.0000000000, +0.0276183140, +0.0000000000, +0.0310445375, +0.0000000000, +0.0352256211, +0.0000000000, +0.0404611696, +0.0000000000, +0.0472354231, +0.0000000000, +0.0563851215, +0.0000000000, +0.0694911881, +0.0000000000, +0.0899418673, +0.0000000000, +0.1265473875, +0.0000000000, +0.2116132716, +0.0000000000, +0.6358933477, +0.0000000000, +-0.6358933478, +0.0000000000, +-0.2116132717, +0.0000000000, +-0.1265473876, +0.0000000000, +-0.0899418674, +0.0000000000, +-0.0694911882, +0.0000000000, +-0.0563851216, +0.0000000000, +-0.0472354232, +0.0000000000, +-0.0404611697, +0.0000000000, +-0.0352256212, +0.0000000000, +-0.0310445376, +0.0000000000, +-0.0276183141, +0.0000000000, +-0.0247516964, +0.0000000000, +-0.0223120328, +0.0000000000, +-0.0202060802, +0.0000000000, +-0.0183664065, +0.0000000000, +-0.0167430571, +0.0000000000, +-0.0152982507, +0.0000000000, +-0.0140028939, +0.0000000000, +-0.0128342257, +0.0000000000, +-0.0117741869, +0.0000000000, +-0.0108082661, +0.0000000000, +-0.0099246684, +0.0000000000, +-0.0091137049, +0.0000000000, +-0.0083673391, +0.0000000000, +-0.0076788437, +0.0000000000, +-0.0070425381, +0.0000000000, +-0.0064535861, +0.0000000000, +-0.0059078376, +0.0000000000, +-0.0054017034, +0.0000000000, +-0.0049320559, +0.0000000000, +-0.0044961499, +0.0000000000, +-0.0040915579, +0.0000000000, +-0.0037161184, +0.0000000000, +-0.0033678929, +0.0000000000, +-0.0030451313, +0.0000000000, +-0.0027462426, +0.0000000000, +-0.0024697716, +0.0000000000, +-0.0022143788, +0.0000000000, +-0.0019788242, +0.0000000000, +-0.0017619530, +0.0000000000, +-0.0015626849, +0.0000000000, +-0.0013800042, +0.0000000000, +-0.0012129516, +0.0000000000, +-0.0010606179, +0.0000000000, +-0.0009221384, +0.0000000000, +-0.0007966882, +0.0000000000, +-0.0006834783, +0.0000000000, +-0.0005817526, +0.0000000000, +-0.0004907854, +0.0000000000, +-0.0004098791, +0.0000000000, +-0.0003383626, +0.0000000000, +-0.0002755900, +0.0000000000, +-0.0002209394, +0.0000000000, +-0.0001738121, +0.0000000000, +-0.0001336321, +0.0000000000, +-0.0000998452, +0.0000000000, +-0.0000719194, +0.0000000000, +-0.0000493437, +0.0000000000, +-0.0000316288, +0.0000000000, +-0.0000183062, +0.0000000000, +-0.0000089287, +0.0000000000, +-0.0000030703, +0.0000000000, +-0.0000003256}; diff --git a/examples/TestEqualizer1Audio/TestEqualizer1Audio.ino b/examples/TestEqualizer1Audio/TestEqualizer1Audio.ino new file mode 100644 index 0000000..f01a285 --- /dev/null +++ b/examples/TestEqualizer1Audio/TestEqualizer1Audio.ino @@ -0,0 +1,105 @@ +/* TestEqualizer1Audio.ino Bob Larkin 18 May 2020 + * This is a test of the Filter Equalizer using the Audette OpenAudio_ArduinoLibrary. + * Runs two different equalizers, switching every 5 seconds to demonstrate + * dynamic filter changing. + */ + +#include "Audio.h" +#include "OpenAudio_ArduinoLibrary.h" +#include "DSP_TeensyAudio_F32.h" +#include + +// Signals from ADC to Equalizer to DAC using Teensy Audio Adaptor +AudioInputI2S i2sIn; +AudioConvert_I16toF32 convertItoF1; +AudioConvert_I16toF32 convertItoF2; +AudioFilterEqualizer_F32 equalize1; +AudioFilterEqualizer_F32 equalize2; +AudioConvert_F32toI16 convertFtoI1; +AudioConvert_F32toI16 convertFtoI2; +AudioOutputI2S i2sOut; +AudioConnection patchCord1(i2sIn, 0, convertItoF1, 0); +AudioConnection patchCord3(i2sIn, 1, convertItoF2, 0); +AudioConnection_F32 patchCord5(convertItoF1, 0, equalize1, 0); +AudioConnection_F32 patchCord7(convertItoF2, 0, equalize2, 0); +AudioConnection_F32 patchCord9(equalize1, 0, convertFtoI1, 0); +AudioConnection_F32 patchCordB(equalize2, 0, convertFtoI2, 0); +AudioConnection patchCordD(convertFtoI1, 0, i2sOut, 0); +AudioConnection patchCordF(convertFtoI2, 0, i2sOut, 1); +AudioControlSGTL5000 codec; + +// Some sort of octave band equalizer as a one alternative, 10 bands +float32_t fBand1[] = { 40.0, 80.0, 160.0, 320.0, 640.0, 1280.0, 2560.0, 5120.0, 10240.0, 22058.5}; +float32_t dbBand1[] = {10.0, 2.0, -2.0, -5.0, -2.0, -4.0, -10.0, 6.0, 10.0, -100}; + +// To contrast, put a strange bandpass filter as an alternative, 5 bands +float32_t fBand2[] = { 300.0, 500.0, 800.0, 1000.0, 22058.5}; +float32_t dbBand2[] = {-60.0, 0.0, -20.0, 0.0, -60.0}; + +float32_t equalizeCoeffs[200]; +int16_t k = 0; + +void setup(void) { + AudioMemory(5); + AudioMemory_F32(10); + Serial.begin(300); delay(1000); + Serial.println("*** Test Audio Equalizer ***"); + codec.enable(); + codec.inputSelect(AUDIO_INPUT_LINEIN); + codec.adcHighPassFilterDisable(); // necessary to suppress noise + codec.lineInLevel(2); + codec.volume(0.8); + + // Initialize the equalizer with 10 bands, fBand1[] 199 FIR coefficients + // -65 dB sidelobes, 16384 Max coefficient value + uint16_t eq = equalize1.equalizerNew(10, &fBand1[0], &dbBand1[0], 30, &equalizeCoeffs[0], 60.0); + if (eq == ERR_EQ_BANDS) + Serial.println("Equalizer failed: Invalid number of frequency bands."); + else if (eq == ERR_EQ_SIDELOBES) + Serial.println("Equalizer failed: Invalid sidelobe specification."); + else if (eq == ERR_EQ_NFIR) + Serial.println("Equalizer failed: Invalid number of FIR coefficients."); + else + Serial.println("Equalizer initialized successfully."); + + eq = equalize2.equalizerNew(10, &fBand1[0], &dbBand1[0], 30, &equalizeCoeffs[0], 60.0); + if (eq == ERR_EQ_BANDS) + Serial.println("Equalizer failed: Invalid number of frequency bands."); + else if (eq == ERR_EQ_SIDELOBES) + Serial.println("Equalizer failed: Invalid sidelobe specification."); + else if (eq == ERR_EQ_NFIR) + Serial.println("Equalizer failed: Invalid number of FIR coefficients."); + else + Serial.println("Equalizer initialized successfully."); + // for (k=0; k<200; k++) Serial.println(equalizeCoeffs[k]); +} + +void loop(void) { +#if 0 // Change between two filters every 10 seconds. + + // To run with just the 10-band equalizer, comment out the entire loop with "/* ... */" + + if(k == 0) { + k = 1; + equalize1.equalizerNew(10, &fBand1[0], &dbBand1[0], 200, &equalizeCoeffs[0], 65.0); + equalize2.equalizerNew(10, &fBand1[0], &dbBand1[0], 200, &equalizeCoeffs[0], 65.0); + } + else { // Swap back and forth + k = 0; + equalize1.equalizerNew(5, &fBand2[0], &dbBand2[0], 100, &equalizeCoeffs[0], 40.0); + equalize2.equalizerNew(5, &fBand2[0], &dbBand2[0], 100, &equalizeCoeffs[0], 40.0); + } +#endif + delay(10000); // Interrupts will keep the audio going + Serial.print("Proc = "); + Serial.print(AudioProcessorUsage()); + Serial.print(" ("); + Serial.print(AudioProcessorUsageMax()); + Serial.print("), Mem = "); + Serial.print(AudioMemoryUsage()); + Serial.print(" ("); + Serial.print(AudioMemoryUsageMax()); + Serial.println(")"); + AudioProcessorUsageMaxReset(); + AudioMemoryUsageMaxReset(); +} diff --git a/examples/TestFIRGeneral3/TestFIRGeneral3.ino b/examples/TestFIRGeneral3/TestFIRGeneral3.ino new file mode 100644 index 0000000..1389dfb --- /dev/null +++ b/examples/TestFIRGeneral3/TestFIRGeneral3.ino @@ -0,0 +1,88 @@ +/* TestEqualizer3General.ino Bob Larkin 22 May 2020 + * This is a test of the Filter Equalizer for Teensy Audio. + * This version is for the Chip Audette _F32 Library. + * See TestEqualizer2.ino for the int16 version. + */ + +#include "Audio.h" +#include "OpenAudio_ArduinoLibrary.h" +#include "DSP_TeensyAudio_F32.h" + +AudioInputI2S i2s1; +AudioSynthWaveformSine_F32 sine1; // Test signal +AudioFilterFIRGeneral_F32 firg1; +AudioRecordQueue_F32 queue1; // The LSB output +AudioConnection_F32 patchCord1(sine1, 0, firg1, 0); +AudioConnection_F32 patchCord2(firg1, 0, queue1, 0); + +float dbA[51]; +float equalizeCoeffs[51]; +float dt1[128]; +float *pq1, *pd1; +int i, k; +float32_t dBResponse[500]; // Show lots of detail + +void setup(void) { + AudioMemory(5); + AudioMemory_F32(10); + Serial.begin(300); delay(1000); + Serial.println("*** Test FIR General routine for F32 ***"); + sine1.frequency(1000.0f); + + // This simple case corresponds to Burris and Parks, "Digital Filter Design." + // Example 3.1when sidelobes are set to 0.0. + for (i=0; i<6; i++) dbA[i] = 0.0f; + for (i=6; i<11; i++) dbA[i] = -120.0f; + + // Initialize the FIR with 21 points, 21 FIR coefficients and -0 dB sidelobes + uint16_t eq = firg1.FIRGeneralNew(&dbA[0], 21, &equalizeCoeffs[0], 0.0); + if (eq == ERR_EQ_BANDS) + Serial.println("FIR General failed: Invalid number of frequency points."); + else if (eq == ERR_EQ_SIDELOBES) + Serial.println("FIR General failed: Invalid sidelobe specification."); + else if (eq == ERR_EQ_NFIR) + Serial.println("FIR General failed: Invalid number of FIR coefficients."); + else + Serial.println("FIR General initialized successfully."); + + Serial.println("FIR Coeffs"); + for(i=0; i<21; i++) Serial.println(equalizeCoeffs[i], 7); + Serial.println(""); + + // Get frequency response in dB for 200 points, uniformly spaced from 0 to 21058 Hz + firg1.getResponse(200, dBResponse); + Serial.println("Freq Hz, Response dB"); + for(int m=0; m<200; m++) { // Print the response in Hz, dB, suitable for a spread sheet + Serial.print((float32_t)m * 22058.5f / 200.0f); + Serial.print(","); + Serial.println(dBResponse[m]); + } + + i = -10; k=0; +} + +void loop(void) { + if(i<0) i++; // Get past startup + if(i==0) queue1.begin(); + + // Collect 128 samples and output to Serial + // This "if" will be active for i == 0 + if (queue1.available() >= 1 && i >= 0) { + pq1 = queue1.readBuffer(); + pd1 = &dt1[0]; + for(k=0; k<128; k++) { + *pd1++ = *pq1++; + } + i=1; // Only collect 1 block + queue1.freeBuffer(); + queue1.end(); // No more data to queue1 + } + if(i == 1) { + // Uncomment the next 3 lines to printout a sample of the sine wave. + Serial.println("128 Samples: "); + for (k=0; k<128; k++) + Serial.println (dt1[k],7); + i = 2; + } + delay(2); +} diff --git a/examples/TestFIRGeneralLarge4/HP55ieeeRSL.gif b/examples/TestFIRGeneralLarge4/HP55ieeeRSL.gif new file mode 100644 index 0000000000000000000000000000000000000000..c91e64dd5074d1c3366c674cc376ce7dac2f1291 GIT binary patch literal 31463 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 LaiyII0BHOVUkJZW literal 0 HcmV?d00001 diff --git a/examples/TestFIRGeneralLarge4/KaiserBetaSidelobes.gif b/examples/TestFIRGeneralLarge4/KaiserBetaSidelobes.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ff338b14fdc0323f02d4293ac0552e033fb8a04 GIT binary patch literal 50906 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 Y5CUQgV>zU(0Ri+}{N=`#3H(&g|FutOga7~l literal 0 HcmV?d00001 diff --git a/examples/TestFIRGeneralLarge4/TestFIRGeneralLarge4.ino b/examples/TestFIRGeneralLarge4/TestFIRGeneralLarge4.ino new file mode 100644 index 0000000..cffbbac --- /dev/null +++ b/examples/TestFIRGeneralLarge4/TestFIRGeneralLarge4.ino @@ -0,0 +1,127 @@ +/* TestFIRGeneralLarge4.ino Bob Larkin 24 May 2020 + * Test the generation of FIR filters and obtaining their + * responses. See TestFIRGeneralLarge5.ino to run the filters. + * This is a test of the AudioFilterFIR_F32 for Teensy Audio. + */ + +#include "Audio.h" +#include "OpenAudio_ArduinoLibrary.h" +#include "DSP_TeensyAudio_F32.h" + +AudioInputI2S i2s1; // Creates timing +AudioFilterFIRGeneral_F32 firg1; + +float32_t dbA[2000]; +float32_t workSpace[4128]; +float32_t equalizeCoeffs[4000]; +int i, k; +float32_t dBResponse[5000]; // Extreme size, can show lots of detail! + +// Following is based on Rabiner, McGonegal and Paul, FWFIR test case, but has +// had the windowing effect divided out to show their basic filter response. +float32_t hpCoeff[55]={ +-0.003643388f, -0.007195844f, 0.012732424f, -0.007796006f, -0.004276372f, + 0.013760401f, -0.012262941f, 0.000000304f, 0.013553423f, -0.016818445f, + 0.005786355f, 0.011693321f, -0.021220577f, 0.013364335f, 0.007566100f, +-0.025227439f, 0.023410856f, -0.000000305f, -0.028612852f, 0.037841329f, +-0.014052131f, -0.031182658f, 0.063661835f, -0.046774701f, -0.032787389f, + 0.151364865f, -0.257518316f, 0.300000700f, -0.257518316f, 0.151364865f, +-0.032787389f, -0.046774701f, 0.063661835f, -0.031182658f, -0.014052131f, + 0.037841329f, -0.028612852f, -0.000000305f, 0.023410856f, -0.025227439f, + 0.007566100f, 0.013364335f, -0.021220577f, 0.011693321f, 0.005786355f, +-0.016818445f, 0.013553423f, 0.000000304f, -0.012262941f, 0.013760401f, +-0.004276372f, -0.007796006f, 0.012732424f, -0.007195844f, -0.003643388}; + +void setup(void) { + uint16_t nFIR = 4; + float32_t sidelobes = 45; + AudioMemory(5); + AudioMemory_F32(10); + Serial.begin(300); delay(1000); + Serial.println("*** Test Response of FIR General routine for F32 ***"); + +// Un-comment one of the following, or use the direct Coefficient load that follows + +// Test case for odd nFIR from Burris and Parks Example 3.1 + nFIR = 21; sidelobes = 0.0; // No window + dbA[0]=0.0; dbA[1]=0.0; dbA[2]=0.0; dbA[3]=0.0; dbA[4]=0.0; dbA[5]=0.0; + dbA[6]=-140.0; dbA[7]=-140.0; dbA[8]=-140.0; dbA[9]=-140.0; dbA[10]=-140.0; + +// Test case for even nFIR from Burris and Parks Example 3.2 +// nFIR = 20; sidelobes = 0.0; +// dbA[0]=0.0; dbA[1]=0.0; dbA[2]=0.0; dbA[3]=0.0; dbA[4]=-120.0; dbA[5]=-120.0; +// dbA[6]=-120.0; dbA[7]=-120.0; dbA[8]=-120.0; dbA[9]=-120.0; + +// Test case for odd nFIR from Burris and Parks Example 3.1 with Kaiser Window +// nFIR = 21; sidelobes = 45.0f; +// dbA[0]=0.0; dbA[1]=0.0; dbA[2]=0.0; dbA[3]=0.0; dbA[4]=0.0; dbA[5]=0.0; +// dbA[6]=-140.0; dbA[7]=-140.0; dbA[8]=-140.0; dbA[9]=-140.0; dbA[10]=-140.0f; + +// Test case for even nFIR from Burris and Parks Example 3.2 +// nFIR = 20; sidelobes = 45.0f; +// dbA[0]=0.0; dbA[1]=0.0; dbA[2]=0.0; dbA[3]=0.0; dbA[4]=0.0; dbA[5]=-120.0; +// dbA[6]=-120.0; dbA[7]=-120.0; dbA[8]=-120.0; dbA[9]=-120.0; + +// Rabiner, McGonegal and Paul, FWFIR test case, HP Kaiser SL=60, fco=0.35 +// nFIR = 55; sidelobes = 60.0; +// for(i=0; i<28; i++) { +// if (i<20) dbA[i] = -120.0f; +// else dbA[i] = 0.0f; +// } + +// The next 3 examples are tests of extremely large FIR arrays and only for Teensy 4 +// Generate a response curve for our "octave" equalizer, tried with 30 dB sidelobes +// nFIR = 3999; sidelobes = 30.0f; +// dbA[0] = 12.0f; // Avoid log(0) +// for(i=1; i<2000; i++) +// dbA[i] = 12.0f*cosf(10.0f*log10f(11.02925f*(float32_t)i)); + +// Generate a slowly changing response, up 12 dB at bass and treble and -12 dB +// for mid-frequencies. Scaled to "octaves" by the form cos(log(f)) +// nFIR = 3999; sidelobes = 30.0f; +// dbA[0] = 12.0f; +// dbA[1] = 12.0f; +// for(i=2; i<2000; i++) +// dbA[i] = -12.0f*cosf(2.2f*log10f(11.02925f*(float32_t)i)); + +// Narrow band "CW" filter, tried with 60 dB sidelobes (60 to 80 or 70 to 72 +// nFIR = 3999; sidelobes = 60; +// for(i=0; i<2000; i++) { +// if (i<70 || i>72) dbA[i] = -120.0f; +// else dbA[i] = 0.0f; +// } + + // Initialize the FIR filter design and run + uint16_t eq = firg1.FIRGeneralNew(&dbA[0], nFIR, &equalizeCoeffs[0], sidelobes, &workSpace[0]); + if (eq == ERR_EQ_BANDS) + Serial.println("FIR General failed: Invalid number of frequency points."); + else if (eq == ERR_EQ_SIDELOBES) + Serial.println("FIR General failed: Invalid sidelobe specification."); + else if (eq == ERR_EQ_NFIR) + Serial.println("FIR General failed: Invalid number of FIR coefficients."); + else + Serial.println("FIR General initialized successfully."); + +// Load (if not commented) non-windowed HP filter coefficients, test case: +// firg1.LoadCoeffs(55, hpCoeff, workSpace); // Direct load of FIR coefficients, already calculated + + Serial.println("FIR Coeffs"); + for(i=0; i72) dbA[i] = -120.0f; + else dbA[i] = 0.0f; + } + + // Initialize the FIR filter design and run + uint16_t eq = firg1.FIRGeneralNew(&dbA[0], nFIR, &equalizeCoeffs[0], sidelobes, &workSpace[0]); + if (eq == ERR_EQ_BANDS) + Serial.println("FIR General failed: Invalid number of frequency points."); + else if (eq == ERR_EQ_SIDELOBES) + Serial.println("FIR General failed: Invalid sidelobe specification."); + else if (eq == ERR_EQ_NFIR) + Serial.println("FIR General failed: Invalid number of FIR coefficients."); + else + Serial.println("FIR General initialized successfully."); +} + +void loop(void) { +} diff --git a/radioNoiseBlanker_F32.cpp b/radioNoiseBlanker_F32.cpp new file mode 100644 index 0000000..f415e64 --- /dev/null +++ b/radioNoiseBlanker_F32.cpp @@ -0,0 +1,90 @@ +/* + * radioNoiseBlanker_F32.cpp + * + * 22 March 2020 + * Bob Larkin, in support of the library: + * Chip Audette, OpenAudio, Apr 2017 + * ------------------- + * + * MIT License, Use at your own risk. +*/ + +#include "radioNoiseBlanker_F32.h" + +void radioNoiseBlanker_F32::update(void) { + audio_block_f32_t *blockIn, *blockOut=NULL; + uint16_t i; + float32_t absSignal; + + // Get input block // <data + // based on whether gate is open or not. + for(i=0; idata[i]; // ith data + delayData[(i+in_index) & delayBufferMask] = datai; // Put ith data to circular delay buffer + + absSignal = fabsf(datai); // Rectified I-F + runningSum += fabsf(datai); // Update by adding one rectified point + runningSum -= delayData[(i + in_index - RUNNING_SUM_SIZE) & delayBufferMask]; // & subtract one + + pulseTime++; // This keeps track of leading and trailing delays of the gate pulse + if (absSignal > (threshold * runningSum)) { // A noise pulse event + if (gateOn == true) { // Signals are flowing, this is beginning of noise pulse event + gateOn = false; + pulseTime = -nAnticipation; + } + else { // gateOn==false, we are already in a noise pulse event + if (pulseTime > 0) { // Waiting for pulse event to end + pulseTime = 0; // Keep waiting + } + } + } + else { // Noise pulse is below threshold + if (gateOn == true) { // Signals are flowing normally + pulseTime = -9999; + } + else { // gateOn==false, we are already in a noise pulse event + if(pulseTime >= nDecay) { // End of a pulse event, turn gate on + gateOn = true; + pulseTime = -9999; + } + } + } + // Ready to enter I-F data to output, offset in time by "nAnticipation" + if (pulseTime == -9999) + blockOut->data[i] = delayData[(256 + i - nAnticipation) & delayBufferMask]; // Need 256?? + else // -nAnticipation < pulseTime < nDecay i.e., blanked out + blockOut->data[i] = 0.0f; + } // End of loop point by point over input 128 data points + + AudioStream_F32::release (blockIn); + AudioStream_F32::transmit(blockOut, 0); // send the delayed or blanked data + AudioStream_F32::release (blockOut); + + // Update pointer in_index to delay line for next 128 update + in_index = (in_index + block_size) & delayBufferMask; +} + diff --git a/radioNoiseBlanker_F32.h b/radioNoiseBlanker_F32.h new file mode 100644 index 0000000..b0a0fbf --- /dev/null +++ b/radioNoiseBlanker_F32.h @@ -0,0 +1,126 @@ +/* radioNoiseBlanker_F32.h + * 15 May 2020 Bob Larkin + * + * Thanks to PJRC and Pau Stoffregen for the Teensy processor, Teensyduino + * and Teensy Audio. Thanks to Chip Audette for the F32 extension + * work. Alll of that makes this possible. Bob + * + * Copyright (c) 2020 Bob Larkin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice, development funding notice, and this permission + * notice shall be included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/* + * An I-F signal comes in with occassional noise pulses. This block watches for + * the pulses and turns off the I-F while the pulse exists. In order to + * be as smart as possible this looks ahead by a number of samples, nAnticipation. + * Likewise, the I-F is left off for nDecay samples after the pulse ends. + * Various methods could be to be used to "turn off" the i-f, + * including replacement with waveforms. + * As of this initial write, zeros are used in the waveform. + * + * A threshold can be adjusted via setNB(). This is compared with the + * average rectified voltage being received. If this is too small, like 1.5 + * or 2.0, we will be loosing data by blanking. If we set it too high, like 20.0, + * we will not blank noise pulses. Experiments will find a god setting. + * With a sine wave input and no impulse noise, the average rectified signal + * should be about 0.637. To catch the top of that requires a threshold of + * 1/0.637 = 1.57. That would seem to be a very minimal threshold setting. + * + * Status: Tested on computer data + * Functions: + * setNB( ... ); // See below + * showError(e); // e=1 means to print update() error messages + * enable(runNB); // When runNB=false the signals bypasses the update() processing + * Examples: + * TestNoiseBlanker1.ino 128 data for plotting and examination + * Time: Update() of 128 samples 32 microseconds + */ + +#ifndef _radio_noise_blanker_f32_h +#define _radio_noise_blanker_f32_h + +#include "AudioStream_F32.h" +#include "arm_math.h" + +#define RUNNING_SUM_SIZE 125 + +class radioNoiseBlanker_F32 : public AudioStream_F32 { +//GUI: inputs:1, outputs:1 //this line used for automatic generation of GUI node +//GUI: shortName: NoiseBlanker +public: + // Option of AudioSettings_F32 change to block size (no sample rate dependent variables here): + radioNoiseBlanker_F32(void) : AudioStream_F32(1, inputQueueArray_f32) { + block_size = AUDIO_BLOCK_SAMPLES; + } + radioNoiseBlanker_F32(const AudioSettings_F32 &settings) : AudioStream_F32(1, inputQueueArray_f32) { + block_size = settings.audio_block_samples; + } + + void enable(bool _runNB) { + runNB = _runNB; + } + + void setNoiseBlanker(float32_t _threshold, uint16_t _nAnticipation, uint16_t _nDecay) { + if (_threshold < 0.0) threshold = 0.0; + else threshold = _threshold/(float32_t)RUNNING_SUM_SIZE; + + if(_nAnticipation < 1) nAnticipation = 1; + else if (_nAnticipation >125) nAnticipation = 125; + else nAnticipation = _nAnticipation; + + if (_nDecay < 1) nDecay = 1; + else if (_nDecay > 10) nDecay = 10; // Is this handled OK at end of block? + else nDecay = _nDecay; + } + + void showError(uint16_t e) { // This is for debug + errorPrint = e; + } + + void update(void); + +private: + uint16_t block_size = AUDIO_BLOCK_SAMPLES; + // Input data pointers + audio_block_f32_t *inputQueueArray_f32[1]; + + // Control error printing in update() 0=No print + uint16_t errorPrint = 0; + + // To look ahead we need a delay of up to 128 samples. Too much removes good data. + // Too little enters noise pulse data to the output. This can be a simple circular + // buffer if we make the buffer a power of 2 in length and binary-truncate the index. + // Choose 2^8 = 256. + float32_t delayData[256]; // The circular delay line + uint16_t in_index = 0; // Pointer to next block update entry + // And a mask to make the circular buffer limit to a power of 2 + uint16_t delayBufferMask = 0X00FF; + + // Three variables to allow .INO control of Noise Blanker + float32_t threshold = 1.0E6f; // Start disabled + uint16_t nAnticipation = 5; + uint16_t nDecay = 8; + + int16_t pulseTime = -9999; // Tracks nAnticipation and nDecay + bool gateOn = true; // Signals going through NB + float32_t runningSum = 0.0; + bool runNB = false; +}; +#endif diff --git a/readme.md b/readme.md index 1daf09b..55cd819 100644 --- a/readme.md +++ b/readme.md @@ -25,6 +25,12 @@ OpenAudio Library for Teensy 20-Moved in radio function RadioIQMixer_F32. 21-Added Example INO, FineFreqShift_OA.ino with Hilbert shifter and delay stereo. 22-Brought in support stuff mathDSP_F32 and sinTable512_F32.h. +23-Brought in AudioAnalyzePhase_F32 and Example +24-Brought in AudioFilterEqualyzer_F32 and 2 Example +25-Brought in AudioFilterFIRGeneral_F32 and 2 Example INOs +26-Brought in RadioFMDetector_F32 and Example +27-Brought in synth_sin_cos_F32 and test example +28-Brought in RadioNoiseBlanker_F32 and Example **Purpose**: The purpose of this library is to build upon the [Teensy Audio Library](http://www.pjrc.com/teensy/td_libs_Audio.html) to enable new functionality for real-time audio processing. diff --git a/synth_sin_cos_f32.cpp b/synth_sin_cos_f32.cpp new file mode 100644 index 0000000..4d18ffa --- /dev/null +++ b/synth_sin_cos_f32.cpp @@ -0,0 +1,103 @@ +/* synth_sin_cos_f32.cpp + * + * SynthSinCos_F32 Bob Larkin April 17, 2020 + * + * Based on Chip Audette's OpenAudio sine(), that was + * Modeled on: AudioSynthWaveformSine from Teensy Audio Library + * + * Purpose: Create sine and cosine wave of given amplitude, frequency + * and phase. Outputs in float32_t floating point. + * Routines are from the arm CMSIS library and use a 512 point lookup + * table with linear interpolation to achieve float accuracy limits. + * + * Copyright (c) 2020 Bob Larkin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include "synth_sin_cos_f32.h" + +// 513 values of the sine wave in a float array: +#include "sinTable512_f32.h" + +void AudioSynthSineCosine_F32::update(void) { + audio_block_f32_t *blockS, *blockC; + uint16_t index, i; + float32_t a, b, deltaPhase, phaseC; + + blockS = AudioStream_F32::allocate_f32(); // Output blocks + if (!blockS) return; + + blockC = AudioStream_F32::allocate_f32(); + if (!blockC) { + AudioStream_F32::release(blockS); + return; + } + + // doSimple has amplitude (-1, 1) and sin/cos differ by 90.00 degrees. + if (doSimple) { + for (i=0; i < block_length; i++) { + phaseS += phaseIncrement; + if (phaseS > 512.0f) + phaseS -= 512.0f; + index = (uint16_t) phaseS; + deltaPhase = phaseS -(float32_t) index; + /* Read two nearest values of input value from the sin table */ + a = sinTable512_f32[index]; + b = sinTable512_f32[index+1]; + blockS->data[i] = a + 0.001953125*(b-a)*deltaPhase; /* Linear interpolation process */ + + /* Repeat for cosine by adding 90 degrees phase */ + index = (index + 128) & 0x01ff; + /* Read two nearest values of input value from the sin table */ + a = sinTable512_f32[index]; + b = sinTable512_f32[index+1]; + /* deltaPhase will be the same as used for sin */ + blockC->data[i] = a + 0.001953125*(b-a)*deltaPhase; /* Linear interpolation process */ + } + } + else { // Do a more flexible update, i.e., not doSimple + for (i=0; i < block_length; i++) { + phaseS += phaseIncrement; + if (phaseS > 512.0f) phaseS -= 512.0f; + index = (uint16_t) phaseS; + deltaPhase = phaseS -(float32_t) index; + /* Read two nearest values of input value from the sin table */ + a = sinTable512_f32[index]; + b = sinTable512_f32[index+1]; + blockS->data[i] = amplitude_pk * (a + 0.001953125*(b-a)*deltaPhase); /* Linear interpolation process */ + + /* Shift forward phaseS_C and get cos. First, the calculation of index of the table */ + phaseC = phaseS + phaseS_C; + if (phaseC > 512.0f) phaseC -= 512.0f; + index = (uint16_t) phaseC; + deltaPhase = phaseC -(float32_t) index; + /* Read two nearest values of input value from the sin table */ + a = sinTable512_f32[index]; + b = sinTable512_f32[index+1]; + blockC->data[i] = amplitude_pk * (a + 0.001953125*(b-a)*deltaPhase); /* Linear interpolation process */ + } + } + AudioStream_F32::transmit(blockS, 0); + AudioStream_F32::release (blockS); + AudioStream_F32::transmit(blockC, 1); + AudioStream_F32::release (blockC); + return; +} + diff --git a/synth_sin_cos_f32.h b/synth_sin_cos_f32.h new file mode 100644 index 0000000..77b50aa --- /dev/null +++ b/synth_sin_cos_f32.h @@ -0,0 +1,162 @@ +/* synth_sin_cos_f32.h + * AudioSynthSineCosine_F32 + * + * Status: Checked for function and accuracy. 19 April 2020 + * + * Created: Bob Larkin 15 April 2020 + * + * Based on Chip Audette's OpenAudio sine(), that was + * Modeled on: AudioSynthWaveformSine from Teensy Audio Library + * + * Purpose: Create sine and cosine wave of given amplitude, frequency + * and phase. Outputs are audio_block_f32_t blocks of float32_t. + * Routines are from the arm CMSIS library and use a 512 point lookup + * table with linear interpolation to achieve float accuracy limits. + * + * This provides for setting the phase of the sine, setting the difference + * in phase between the sine and cosine and setting the + * (-amplitude, amplitude) range. If these are at the default values, + * called doSimple, the caluclation is faster. + * For doSimple either true or false, the frequency can be changed + * at will using the frequency() method. + * + * Defaults: + * Frequency: 1000.0 Hz + * Phase of Sine: 0.0 radians (0.0 deg) + * Phase of Cosine: pi/2 radians (90.0 deg) ahead of Sine + * Amplitude: -1.0 to 1.0 + * + * Time: T3.6 update() block of 128 with doSimple is 36 microseconds + * Same using flexible doSimple=false is 49 microseconds + * T4.0 update() block of 128 with doSimple is 16 microseconds + * Same using flexible doSimple=false is 24 microseconds + * + * Copyright (c) 2020 Bob Larkin + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#ifndef synth_sin_cos_f32_h_ +#define synth_sin_cos_f32_h_ + +#include "AudioStream_F32.h" +#include "arm_math.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +#ifndef M_PI_2 +#define M_PI_2 1.57079632679489661923 +#endif + +#ifndef M_TWOPI +#define M_TWOPI (M_PI * 2.0) +#endif + +#define MF2_PI 6.2831853f + +class AudioSynthSineCosine_F32 : public AudioStream_F32 { +//GUI: inputs:0, outputs:2 //this line used for automatic generation of GUI node +//GUI: shortName:SineCosine //this line used for automatic generation of GUI node +public: + AudioSynthSineCosine_F32(void) : AudioStream_F32(0, NULL) { } //uses default AUDIO_SAMPLE_RATE from AudioStream.h + + AudioSynthSineCosine_F32(const AudioSettings_F32 &settings) : AudioStream_F32(0, NULL) { + setSampleRate_Hz(settings.sample_rate_Hz); + setBlockLength(settings.audio_block_samples); + } + + void frequency(float32_t fr) { // Frequency in Hz + freq = fr; + if (freq < 0.0f) freq = 0.0f; + else if (freq > sample_rate_Hz/2.0f) freq = sample_rate_Hz/2.0f; + phaseIncrement = 512.0f * freq / sample_rate_Hz; + } + + /* Externally, phase comes in the range (0,2*M_PI) keeping with C math functions + * Internally, the full circle is represented as (0.0, 512.0). This is + * convenient for finding the entry to the sine table. + */ + void phase_r(float32_t a) { + while (a < 0.0f) a += MF2_PI; + while (a > MF2_PI) a -= MF2_PI; + phaseS = 512.0f * a / MF2_PI; + doSimple = false; + return; + } + + // phaseS_C_r is the number of radians that the cosine output leads the + // sine output. The default is M_PI_2 = pi/2 = 1.57079633 radians, + // corresponding to 90.00 degrees cosine leading sine. + void phaseS_C_r(float32_t a) { + while (a < 0.0f) a += MF2_PI; + while (a > MF2_PI) a -= MF2_PI; + // Internally a full circle is 512.00 of phase + phaseS_C = 512.0f * a / MF2_PI; + doSimple = false; + return; + } + + // The amplitude, a, is the peak, as in zero-to-peak. This produces outputs + // ranging from -a to +a. Both outputs are the same amplitude. + void amplitude(float32_t a) { + amplitude_pk = a; + doSimple = false; + return; + } + + // Speed up calculations by setting phaseS_C=90deg, amplitude=1 + // Note, s=true will override any setting of phaseS_C_r or amplitude. + void simple(bool s) { + doSimple = s; + if(doSimple) { + phaseS_C = 128.0f; + amplitude_pk = 1.0f; + } + return; + } + + void setSampleRate_Hz(float32_t fs_Hz) { + // Check freq range + if (freq > sample_rate_Hz/2.0f) freq = sample_rate_Hz/2.f; + // update phase increment for new frequency + phaseIncrement = 512.0f * freq / fs_Hz; + } + + void setBlockLength(uint16_t bl) { + if(bl > 128) bl = 128; + block_length = bl; + } + + virtual void update(void); + +private: + float32_t freq = 1000.0f; + float32_t phaseS = 0.0f; + float32_t phaseS_C = 128.00; + float32_t amplitude_pk = 1.0f; + float32_t sample_rate_Hz = AUDIO_SAMPLE_RATE; + float32_t phaseIncrement = 512.0f * freq /sample_rate_Hz; + uint16_t block_length = 128; + // if only freq() is used, the complexities of phase, phaseS_C, + // and amplitude are not used, speeding up the sin and cos: + bool doSimple = true; +}; +#endif