DSP28xx中仿真FIR滤波器(CCS4以上版本)
admin 于 2015年02月21日 发表在 数字信号处理
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); }