]> git.gir.st - tmk_keyboard.git/blob - tool/mbed/mbed-sdk/libraries/tests/dsp/cmsis/fir_f32/main.cpp
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[tmk_keyboard.git] / tool / mbed / mbed-sdk / libraries / tests / dsp / cmsis / fir_f32 / main.cpp
1 #include "arm_math.h"
2 #include "math_helper.h"
3 #include <stdio.h>
4
5 #define BLOCK_SIZE 32
6 #define NUM_BLOCKS 10
7
8 #define TEST_LENGTH_SAMPLES (BLOCK_SIZE * NUM_BLOCKS)
9
10 #define SNR_THRESHOLD_F32 140.0f
11 #define NUM_TAPS 29
12
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];
19
20 /* -------------------------------------------------------------------
21 * Declare State buffer of size (numTaps + blockSize - 1)
22 * ------------------------------------------------------------------- */
23 static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];
24
25 /* ----------------------------------------------------------------------
26 * FIR Coefficients buffer generated using fir1() MATLAB function.
27 * fir1(28, 6/24)
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
36 };
37
38 /* ----------------------------------------------------------------------
39 * FIR LPF Example
40 * ------------------------------------------------------------------- */
41 int main(void) {
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);
45
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);
52 }
53
54 /* ----------------------------------------------------------------------
55 * Compare the generated output against the reference output computed
56 * in MATLAB.
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) {
61 printf("Failed\n\r");
62 } else {
63 printf("Success\n\r");
64 }
65 }
Imprint / Impressum