找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5692|回复: 1
打印 上一主题 下一主题
收起左侧

DSP的IIR数字滤波器实现程序源码

[复制链接]
跳转到指定楼层
楼主
亲测有效的IIR数字滤波器C程序实现,输入与输出有明显的滤波效果,如图



附录(C程序源码):
  1. #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
  2. #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
  3. #include  <math.h>
  4. #define IIRNUMBER 2
  5. #define SIGNAL1F 1000
  6. #define SIGNAL2F 4500
  7. #define SAMPLEF  10000
  8. #define PI       3.1415926

  9. float InputWave();
  10. float IIR();

  11. float fBn[IIRNUMBER]={ 0.0,0.7757 };
  12. float fAn[IIRNUMBER]={ 0.1122,0.1122 };
  13. float fXn[IIRNUMBER]={ 0.0 };
  14. float fYn[IIRNUMBER]={ 0.0 };
  15. float fInput,fOutput;
  16. float fSignal1,fSignal2;
  17. float fStepSignal1,fStepSignal2;
  18. float f2PI;
  19. int i;
  20. float fin[256],fout[256];
  21. //输入fIn毛刺正弦波,输出fOut较光滑正弦波,Graph: 256,32-bit floating integer,
  22. int nIn,nOut;

  23. main()
  24. {
  25.     nIn=0; nOut=0;
  26.     fInput=fOutput=0;
  27.     f2PI=2*PI;
  28.     fSignal1=0.0;
  29.     fSignal2=PI*0.1;
  30. //  fStepSignal1=2*PI/30;
  31. //  fStepSignal2=2*PI*1.4;
  32.     fStepSignal1=2*PI/50;
  33.     fStepSignal2=2*PI/2.5;
  34.     while ( 1 )
  35.     {
  36.         fInput=InputWave();
  37.         fin[nIn]=fInput;
  38.         nIn++; nIn%=256;
  39.         fOutput=IIR();
  40.         fout[nOut]=fOutput;
  41.         nOut++;             // break point
  42.         if ( nOut>=256 )
  43.         {
  44.             nOut=0;
  45.         }
  46.     }
  47. }

  48. float InputWave()
  49. {
  50.     for ( i=IIRNUMBER-1;i>0;i-- )
  51.     {
  52.         fXn[i]=fXn[i-1];
  53.         fYn[i]=fYn[i-1];
  54.     }
  55.     fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
  56.     fYn[0]=0.0;
  57.     fSignal1+=fStepSignal1;
  58.     if ( fSignal1>=f2PI )   fSignal1-=f2PI;
  59.     fSignal2+=fStepSignal2;
  60.     if ( fSignal2>=f2PI )   fSignal2-=f2PI;
  61.     return(fXn[0]);
  62. }

  63. float IIR()
  64. {
  65.     float fSum;
  66.     fSum=0.0;
  67.     for ( i=0;i<IIRNUMBER;i++ )
  68.     {
  69.         fSum+=(fXn[i]*fAn[i]);
  70.         fSum+=(fYn[i]*fBn[i]);
  71.     }
  72.     return(fSum);
  73. }
复制代码

全部资料51hei下载地址:
IIR滤波C程序.docx (13.53 KB, 下载次数: 78)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1100206 发表于 2024-5-5 14:45 | 只看该作者
值得参考的例程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表