Example FIR filter using the draft mbed DSP API

Dependencies:   mbed mbed-dsp

Files at this revision

API Documentation at this revision

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

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-dsp.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
mbed_dsp.lib Show diff for this revision Revisions of this file
--- 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");
--- /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
--- 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
--- 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