Keyboard firmwares for Atmel AVR and Cortex-M
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.cpp 2.9KB

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