Last commit 08 Jan 2013
Description: Example FIR filter using the draft mbed DSP API
Revision 1:0814c87942ca, committed 12 Mar 2012
- Comitter:
- Date:
- Mon Mar 12 12:03:25 2012 +0000
- Parent:
- 0:9ab177799489
- Child:
- 2:697afbb006f5
- Commit message:
Changed in this revision
--- a/main.cpp Mon Mar 12 11:37:31 2012 +0000
+++ b/main.cpp Mon Mar 12 12:03:25 2012 +0000
@@ -1,53 +1,53 @@
-#include "mbed.h"
-#include "dsp.h"
-
-#define BLOCK_SIZE (32)
-#define NUM_BLOCKS (10)
-#define TEST_LENGTH_SAMPLES (BLOCK_SIZE * NUM_BLOCKS)
-
-#define SAMPLE_RATE (48000)
-
-#define SNR_THRESHOLD_F32 (50.0f)
-
-float32_t expected_output[TEST_LENGTH_SAMPLES];
-float32_t output[TEST_LENGTH_SAMPLES];
-
-/* FIR Coefficients buffer generated using fir1() MATLAB function: fir1(28, 6/24) */
-#define NUM_TAPS 29
-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,
- +0.2229246956f, +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f,
- -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f, +0.0080754303f,
- +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f
-};
-#define WARMUP (NUM_TAPS-1)
-#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(firCoeffs32);
-
- for (int i=0; i<NUM_BLOCKS; i++) {
- float32_t *signal = output + i*BLOCK_SIZE;
- sine_1K.process(signal);
- sine_15K.process(signal);
- fir.process(signal);
- }
-
- sine_1K.reset();
- for (int i=0; i<NUM_BLOCKS; i++) {
- float32_t *signal = expected_output + i*BLOCK_SIZE;
- sine_1K.process(signal);
- }
-
- 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");
- } else {
- printf("Success\n\r");
- }
-}
+#include "mbed.h"
+#include "dsp.h"
+
+#define BLOCK_SIZE (32)
+#define NUM_BLOCKS (10)
+#define TEST_LENGTH_SAMPLES (BLOCK_SIZE * NUM_BLOCKS)
+
+#define SAMPLE_RATE (48000)
+
+#define SNR_THRESHOLD_F32 (50.0f)
+
+float32_t expected_output[TEST_LENGTH_SAMPLES];
+float32_t signal[TEST_LENGTH_SAMPLES];
+
+/* FIR Coefficients buffer generated using fir1() MATLAB function: fir1(28, 6/24) */
+#define NUM_TAPS 29
+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,
+ +0.2229246956f, +0.1522061835f, +0.0676308395f, +0.0000000000f, -0.0333591565f,
+ -0.0341458607f, -0.0173976984f, -0.0000000000f, +0.0085302217f, +0.0080754303f,
+ +0.0036977508f, +0.0000000000f, -0.0015879294f, -0.0018225230f
+};
+#define WARMUP (NUM_TAPS-1)
+#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(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);
+ }
+
+ 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);
+ }
+
+ float snr = arm_snr_f32(&expected_output[DELAY-1], &signal[WARMUP-1], TEST_LENGTH_SAMPLES-WARMUP);
+ printf("snr: %f\n\r", snr);
+ if (snr < SNR_THRESHOLD_F32) {
+ printf("Failed\n\r");
+ } else {
+ printf("Success\n\r");
+ }
+}

