[STM32F1] 使用STM32 DSP库

[复制链接]
1317|3
 楼主| qiufengsd 发表于 2024-7-27 07:00 | 显示全部楼层 |阅读模式

首先开启DSP库





然后添加DSP库的头文件


参考armbbs硬汉大佬的数字信号教程,使用matlab设计一个FIR数字滤波器

  1. #define TEST_LENGTH_SAMPLES 1024 //采样点数
  2. #define BLOCK_SIZE 1 //调用一次arm_fir_f32处理的采样点个数
  3. #define NUM_TAPS 29 //滤波器系数个数
  4. uint32_t blockSize = BLOCK_SIZE;
  5. uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE; //需要调用arm_fir_f32的次数
  6. static float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1]; //状态缓存,大小numTaps + blockSize - 1
  7. //数字低通滤波器系数 通过matlab命令fadtool获取
  8. const float32_t firCoeffs32LP[NUM_TAPS] = {
  9. 0.004408003297, 0.005197565537, 0.007328365929,  0.01079409383,  0.01550024934,
  10. 0.02126707509,  0.02783845738,  0.03489634395,  0.04207972065,  0.04900695756,
  11. 0.0552999489,   0.0606084317,  0.06463276595,  0.06714358181,   0.0679968819,
  12. 0.06714358181,  0.06463276595,   0.0606084317,   0.0552999489,  0.04900695756,
  13. 0.04207972065,  0.03489634395,  0.02783845738,  0.02126707509,  0.01550024934,
  14. 0.01079409383, 0.007328365929, 0.005197565537, 0.004408003297
  15. };

  16. //数字低通滤波器
  17. void arm_fir_f32_lp(float32_t *in,float32_t *out)
  18. {
  19.     arm_fir_instance_f32 S;
  20.     float32_t *inputF32, *outputF32;
  21.     inputF32 = in;
  22.     outputF32 = out;
  23.     arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
  24.     //FIR滤波,每次处理1个点
  25.     for(int i=0; i < numBlocks; i++)
  26.     {
  27.         arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);
  28.     }
  29. }


4c1l 发表于 2024-7-27 11:44 | 显示全部楼层
参考armbbs硬汉大佬的数字信号教程,使用matlab设计一个FIR数字滤波器
LOVEEVER 发表于 2024-7-28 13:49 | 显示全部楼层
matlab设计一个FIR数字滤波器应该如何实现
yiy 发表于 2024-7-28 22:56 | 显示全部楼层
还要调用DSP库函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

3446

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部