CCS5仿真FIR滤波操作,与仿真FFT变换相同,具体参考博文《DSP28335做FFT变换》

1. fdatool工具

Matlab下调用fdatool工具,配置参数生成所需的滤波系数,以高通滤波系数为例,如下:

2. 导出系数矩阵 

导出滤波器系数矩阵,添加到主程序中(见附录);

3. 调试程序

编译程序,打开调试配置界面,观察到滤波前后波形变化,如下:

附程序:

#include <math.h>
#define FIRNUMBER 25
#define SIGNAL1F 1000
#define SIGNAL2F 4500
#define SAMPLEF  10000
#define PI 3.1415926
 
float InputWave();
float FIR();
 
float fHn[FIRNUMBER]={ 0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,
                       -0.018,0.049,-0.02,0.11,0.28,0.64,0.28,
                       -0.11,-0.02,0.049,-0.018,-0.009,0.01,
                       -0.002,-0.002,0.001,0.0,0.0
                     };
float fXn[FIRNUMBER]={ 0.0 };
float fInput,fOutput;
float fSignal1,fSignal2;
float fStepSignal1,fStepSignal2;
float f2PI;
int i;
float fIn[256],fOut[256];
int nIn,nOut;
 
main()
{
    nIn=0; nOut=0;
    f2PI=2*PI;
    fSignal1=0.0;
    fSignal2=PI*0.1;
    fStepSignal1=2*PI/30;
    fStepSignal2=2*PI*1.4;
    while ( 1 )
    {
       fInput=InputWave();
       fIn[nIn]=fInput;
       nIn++; nIn%=256;
       fOutput=FIR();
       fOut[nOut]=fOutput;
       nOut++;              /* break point */
       if ( nOut>=256 )
       {
           nOut=0;       
       }
    }
}
 
float InputWave()
{
    for ( i=FIRNUMBER-1;i>0;i-- )
       fXn[i]=fXn[i-1];
    fXn[0]=sin((double)fSignal1)+cos((double)fSignal2)/6.0;
    fSignal1+=fStepSignal1; 
    if ( fSignal1>=f2PI )    fSignal1-=f2PI;
    fSignal2+=fStepSignal2;
    if ( fSignal2>=f2PI )    fSignal2-=f2PI;
    return(fXn[0]);
}
 
float FIR()
{
    float fSum;
    fSum=0;
    for ( i=0;i<FIRNUMBER;i++ )
    {
       fSum+=(fXn[i]*fHn[i]);
    }
    return(fSum);
}
注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:信号处理,DSP,CCS4