2 #include "math_helper.h"
8 #define TEST_LENGTH_SAMPLES (BLOCK_SIZE * NUM_BLOCKS)
10 #define SNR_THRESHOLD_F32 140.0f
13 /* -------------------------------------------------------------------
14 * The input signal and reference output (computed with MATLAB)
15 * are defined externally in arm_fir_lpf_data.c.
16 * ------------------------------------------------------------------- */
17 extern float32_t testInput_f32_1kHz_15kHz
[TEST_LENGTH_SAMPLES
];
18 extern float32_t refOutput
[TEST_LENGTH_SAMPLES
];
20 /* -------------------------------------------------------------------
21 * Declare State buffer of size (numTaps + blockSize - 1)
22 * ------------------------------------------------------------------- */
23 static float32_t firStateF32
[BLOCK_SIZE
+ NUM_TAPS
- 1];
25 /* ----------------------------------------------------------------------
26 * FIR Coefficients buffer generated using fir1() MATLAB function.
28 * ------------------------------------------------------------------- */
29 const float32_t firCoeffs32
[NUM_TAPS
] = {
30 -0.0018225230f
, -0.0015879294f
, +0.0000000000f
, +0.0036977508f
, +0.0080754303f
,
31 +0.0085302217f
, -0.0000000000f
, -0.0173976984f
, -0.0341458607f
, -0.0333591565f
,
32 +0.0000000000f
, +0.0676308395f
, +0.1522061835f
, +0.2229246956f
, +0.2504960933f
,
33 +0.2229246956f
, +0.1522061835f
, +0.0676308395f
, +0.0000000000f
, -0.0333591565f
,
34 -0.0341458607f
, -0.0173976984f
, -0.0000000000f
, +0.0085302217f
, +0.0080754303f
,
35 +0.0036977508f
, +0.0000000000f
, -0.0015879294f
, -0.0018225230f
38 /* ----------------------------------------------------------------------
40 * ------------------------------------------------------------------- */
42 /* Call FIR init function to initialize the instance structure. */
43 arm_fir_instance_f32 S
;
44 arm_fir_init_f32(&S
, NUM_TAPS
, (float32_t
*)&firCoeffs32
[0], &firStateF32
[0], BLOCK_SIZE
);
46 /* ----------------------------------------------------------------------
47 * Call the FIR process function for every blockSize samples
48 * ------------------------------------------------------------------- */
49 for (uint32_t i
=0; i
< NUM_BLOCKS
; i
++) {
50 float32_t
* signal
= testInput_f32_1kHz_15kHz
+ (i
* BLOCK_SIZE
);
51 arm_fir_f32(&S
, signal
, signal
, BLOCK_SIZE
);
54 /* ----------------------------------------------------------------------
55 * Compare the generated output against the reference output computed
57 * ------------------------------------------------------------------- */
58 float32_t snr
= arm_snr_f32(refOutput
, testInput_f32_1kHz_15kHz
, TEST_LENGTH_SAMPLES
);
59 printf("snr: %f\n\r", snr
);
60 if (snr
< SNR_THRESHOLD_F32
) {
63 printf("Success\n\r");