Emilio Monti
/
dsp_fir
Example FIR filter using the draft mbed DSP API
Revision 4:82ad711603c2, committed 2013-01-08
- Comitter:
- emilmont
- Date:
- Tue Jan 08 16:54:33 2013 +0000
- Parent:
- 3:15d0df9ab05b
- Commit message:
- Update example to latest mbed-dsp library
Changed in this revision
diff -r 15d0df9ab05b -r 82ad711603c2 main.cpp --- a/main.cpp Mon Mar 12 12:53:03 2012 +0000 +++ b/main.cpp Tue Jan 08 16:54:33 2013 +0000 @@ -10,11 +10,11 @@ #define SNR_THRESHOLD_F32 (50.0f) float32_t expected_output[TEST_LENGTH_SAMPLES]; -float32_t signal[TEST_LENGTH_SAMPLES]; +float32_t output[TEST_LENGTH_SAMPLES]; -/* FIR Coefficients buffer */ +/* FIR Coefficients buffer generated using fir1() MATLAB function: fir1(28, 6/24) */ #define NUM_TAPS 29 -const float32_t fir_coeff[NUM_TAPS] = { +const float32_t firCoeffs32[NUM_TAPS] = { -0.0018225230f, -0.0015879294f, +0.0000000000f, +0.0036977508f, +0.0080754303f, +0.0085302217f, -0.0000000000f, -0.0173976984f, -0.0341458607f, -0.0333591565f, +0.0000000000f, +0.0676308395f, +0.1522061835f, +0.2229246956f, +0.2504960933f, @@ -26,24 +26,24 @@ #define DELAY (WARMUP/2) int main() { - Sine_f32 sine_1K( 1000, SAMPLE_RATE, 1.0); - Sine_f32 sine_15K(15000, SAMPLE_RATE, 0.5); - FIR_f32<NUM_TAPS> fir(fir_coeff); + Sine_f32 sine_1KHz( 1000, SAMPLE_RATE, 1.0); + Sine_f32 sine_15KHz(15000, SAMPLE_RATE, 0.5); + FIR_f32<NUM_TAPS> fir(firCoeffs32); - for (int i=0; i<NUM_BLOCKS; i++) { - float32_t *signal_buffer = signal + i*BLOCK_SIZE; - sine_1K.process(signal_buffer); - sine_15K.process(signal_buffer); - fir.process(signal_buffer); + float32_t buffer_a[BLOCK_SIZE]; + float32_t buffer_b[BLOCK_SIZE]; + for (float32_t *sgn=output; sgn<(output+TEST_LENGTH_SAMPLES); sgn += BLOCK_SIZE) { + sine_1KHz.generate(buffer_a); // Generate a 1KHz sine wave + sine_15KHz.process(buffer_a, buffer_b); // Add a 15KHz sine wave + fir.process(buffer_b, sgn); // FIR low pass filter: 6KHz cutoff } - sine_1K.reset(); - for (int i=0; i<NUM_BLOCKS; i++) { - float32_t *signal_buffer = expected_output + i*BLOCK_SIZE; - sine_1K.process(signal_buffer); + sine_1KHz.reset(); + for (float32_t *sgn=expected_output; sgn<(expected_output+TEST_LENGTH_SAMPLES); sgn += BLOCK_SIZE) { + sine_1KHz.generate(sgn); // Generate a 1KHz sine wave } - float snr = arm_snr_f32(&expected_output[DELAY-1], &signal[WARMUP-1], TEST_LENGTH_SAMPLES-WARMUP); + float snr = arm_snr_f32(&expected_output[DELAY-1], &output[WARMUP-1], TEST_LENGTH_SAMPLES-WARMUP); printf("snr: %f\n\r", snr); if (snr < SNR_THRESHOLD_F32) { printf("Failed\n\r");
diff -r 15d0df9ab05b -r 82ad711603c2 mbed-dsp.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-dsp.lib Tue Jan 08 16:54:33 2013 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-dsp/#fdd22bb7aa52
diff -r 15d0df9ab05b -r 82ad711603c2 mbed.bld --- a/mbed.bld Mon Mar 12 12:53:03 2012 +0000 +++ b/mbed.bld Tue Jan 08 16:54:33 2013 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/737756e0b479 +http://mbed.org/users/mbed_official/code/mbed/builds/71b101360fb9 \ No newline at end of file
diff -r 15d0df9ab05b -r 82ad711603c2 mbed_dsp.lib --- a/mbed_dsp.lib Mon Mar 12 12:53:03 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/emilmont/code/mbed_dsp/#8679f8bc80b6