你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F3/F4基于DSP的FIR滤波器应用

[复制链接]
STMCU小助手 发布时间:2021-12-5 11:00
网上看了一些资料,有点乱和杂,这里记录一下过程。

1、首先勾选DSP,选择Library或者Source都可以。
20210420220403601.png


2、增加预定义
  1. ARM_MATH_CM4,__CC_ARM,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING
复制代码

20210420220759688.png


3. 增加包含头文件目录

20210420221008309.png


4. 打开Matlab,输入fdatool命令,进行FIR滤波器设计
具体设计选哪种滤波器,多少阶,采样率,截止频率完全根据自己的要求设计,完成后点Generate C header 来输出滤波器参数。

20210420221355450.png


5. STM32 代码
(这些只是大概的结构,具体的FIR滤波器源头数据testInput的得来当然要自己按照自己的应用来写,其中用到的33个参数就来自于上面生成的头文件中)

  1. #include "arm_math.h"
  2. #define TEST_LENGTH_SAMPLES   1000
  3. #define BLOCK_SIZE            100
  4. #define NUM_TAPS              33

  5. uint32_t blockSize = BLOCK_SIZE;
  6. uint32_t numBlocks = TEST_LENGTH_SAMPLES/BLOCK_SIZE;

  7. float32_t testOutput[TEST_LENGTH_SAMPLES];
  8. float32_t testInput[TEST_LENGTH_SAMPLES];
  9. float32_t firStateF32[BLOCK_SIZE + NUM_TAPS - 1];

  10. const float32_t firCoeffs32[NUM_TAPS] = {
  11.    0.004545294214, 0.005060049705, 0.006566246971, 0.009012510069,   0.0123100793,
  12.     0.01633617282,  0.02093872614,  0.02594230697,  0.03115498833,  0.03637590259,
  13.     0.04140317068,  0.04604187235,  0.05011179298,  0.05345456675,  0.05593996495,
  14.     0.05747107789,  0.05798817798,  0.05747107789,  0.05593996495,  0.05345456675,
  15.     0.05011179298,  0.04604187235,  0.04140317068,  0.03637590259,  0.03115498833,
  16.     0.02594230697,  0.02093872614,  0.01633617282,   0.0123100793, 0.009012510069,
  17.    0.006566246971, 0.005060049705, 0.004545294214
  18. };
  19. arm_fir_instance_f32 S;
  20. float32_t  *inputF32, *outputF32;

  21. main()
  22. {
  23.         inputF32 = &testInput[0];
  24.          outputF32 = &testOutput[0];
  25.           arm_fir_init_f32(&S, NUM_TAPS, (float32_t *)&firCoeffs32[0], &firStateF32[0], blockSize);
  26.         while(1)
  27.         {
  28.                 for(int i=0; i < numBlocks; i++)
  29.                 {
  30.                         arm_fir_f32(&S, inputF32 + (i * blockSize), outputF32 + (i * blockSize), blockSize);
  31.                 }
  32.         }
  33. }
复制代码

6、滤波效果示例(FIR,32阶,1khz, 低通)
橙色线FIR滤波器的输入,灰色是FIR滤波器输出,都是真实的DAC->ADC输入(橙色),FIR输出(灰色),不是模拟测试,可以看出效果十分明显。

20210420222125386.png



收藏 评论0 发布时间:2021-12-5 11:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版