求一个完整的STM32运算FIR滤波程序

2019-12-20 21:41发布

本人对FIR滤波是小白一个,现求一个完整的STM32运算FIR滤波程序



信号来源:
1)AD数据16-24位,精度要求较高,需要采用浮点数运算;
2)AD速率10~500次/秒;

输出要求:
1)输出速率跟随输入同步变化,输入一个新数据,经过滤波输出一个同步数据(时间上因滤波肯定滞后,这个正常,无须理会);
2)输出滤波深度可设置(FIR滤波好像是叫滤波阶数);


代码要求:STM32工程,使用ST的外设库,但是FIR滤波代码,特别是输入输出部分要带详细中文注释,方便实际调用。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
95条回答
zouzhichao
1楼-- · 2019-12-20 23:27
 精彩回答 2  元偷偷看……
xivisi
2楼-- · 2019-12-21 04:27
哇擦,1000莫元

这个不难的
reflecter
3楼-- · 2019-12-21 04:41
...stm32f4_dsp_stdperiph_libSTM32F4xx_DSP_StdPeriph_Lib_V1.0.1LibrariesCMSISDSP_LibSourceFilteringFunctions
这个目录下没有你想要的?
arm_fir_xxx.c
ilikemcu
4楼-- · 2019-12-21 04:48
那个没弄出来,搞了好久,要不怎么说自己是小白一个呢
lotsbiss
5楼-- · 2019-12-21 09:16
本帖最后由 lotsbiss 于 2013-1-24 23:17 编辑

500次采样的话,才2ms,直接硬算都行吧···
这是我以前在电脑上写的,没试过STM32里行不···
  1. #define FIRSTAGE 10

  2. float firbuf[FIRSTAGE];
  3. float datbuf[FIRSTAGE];

  4. int curpos;

  5. void Init(float *initfir)
  6. {
  7. u8 i;
  8. for(i=0;i<FIRSTAGE;i++)
  9. {
  10.   firbuf[i]=initfir[i];
  11.   datbuf[i]=0;
  12. }
  13. curpos=0;
  14. }

  15. float AddDat(float newdat)
  16. {
  17. float ret=0;
  18. u8 i=curpos;
  19. u8 j=0;

  20. datbuf[curpos]=newdat;
  21. do
  22. {
  23.   ret+=datbuf[i]*firbuf[j];
  24.   i--;
  25.   j++;
  26.   if(i==0xff)
  27.   {
  28.    i=FIRSTAGE-1;
  29.   }
  30. }while(i!=curpos);
  31. curpos++;
  32. if(curpos==FIRSTAGE)
  33. {
  34.   curpos=0;
  35. }
  36. return ret;
  37. }
复制代码
xivisi
6楼-- · 2019-12-21 14:28
 精彩回答 2  元偷偷看……

一周热门 更多>