[DSP编程] IIR数字滤波器实现程序

[复制链接]
 楼主| xzy03101271 发表于 2015-11-10 19:51 | 显示全部楼层 |阅读模式
这是从书上还有很多网上资料找的说的比较多的IIR程序,我觉得这个程序有问题啊,程序里面fYn应该一直是0啊!!!
  1. #include "DSP281x_Device.h"     // DSP281x Headerfile Include File
  2. #include "DSP281x_Examples.h"   // DSP281x Examples Include File
  3. #include "f2812a.h"
  4. #include"math.h"

  5. #define IIRNUMBER 2
  6. #define SIGNAL1F 1000
  7. #define SIGNAL2F 4500
  8. #define SAMPLEF  10000
  9. #define PI 3.1415926

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

  12. float fBn[IIRNUMBER]={ 0.0,0.7757 };
  13. float fAn[IIRNUMBER]={ 0.1122,0.1122 };
  14. float fXn[IIRNUMBER]={ 0.0 };
  15. float fYn[IIRNUMBER]={ 0.0 };
  16. float fInput,fOutput;
  17. float fSignal1,fSignal2;
  18. float fStepSignal1,fStepSignal2;
  19. float f2PI;
  20. int i;
  21. float fIn[256],fOut[256];
  22. int nIn,nOut;

  23. main(void)
  24. {
  25.    
  26.            nIn=0; nOut=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++;
  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(fSignal1)+cos(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. }


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

本版积分规则

38

主题

97

帖子

1

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

38

主题

97

帖子

1

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