当前位置:首页 > FIR数字滤波器的DSP课程设计
StartCpuTimer2(); /*开中断*/
IER |= M_INT14; EINT; InitAdc(); for(;;){
if (adconvover==1){
/*fir滤波处理*/ for(i=0;i Ad_data_signed[i]=(short)(Ad_data[i]-0x5300); fir_filter(Ad_data_signed,hfir,filter_result,ORDER_FIR,DataLong,ROUND_FIR); } } adconvover=0; } interrupt void ad(void) { IFR=0x0000; PieCtrl.PIEACK.all=0xffff; if(adconvover==0){ Ad_data[convcount] = AdcRegs.RESULT0; convcount++; 7 } if (convcount==DataLong){ convcount=0; adconvover=1;//接满标志 } } interrupt void ISRTimer2(void) { } FIR_filter.c代码: //const short x[]:输入信号的缓冲数组,short类型 //const short h[]:滤波器的系数数组,short类型 //short y[]:输出信号的缓冲数组,short类型 //n:滤波器长度 //m:输入信号的长度,即x[]的长度 //s:生成整型的滤波器系数时使用的移位数目 void fir_filter(const short x[],const short h[],short y[],int n,int m,int s) { int i,j; long y0; long acc; _nassert(m>=16); AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1; AdcRegs.ADCTRL2.bit.SOC_SEQ1=1; _nassert(n>=16); for(j=0;j for(i=0;i if(i+j>=m) break; else { y0=(long)x[i+j]*(long)h[i]; acc=acc+y0; } } *y++=(short)(acc>>s); } } 五、系统仿真 5.1 仿真设置 1.fir_filter(Ad_data_signed,hfir,filter_result,ORDER_FIR,DataLong,ROUND_FIR)和adconvover=0处设置断点 2.在Graph Property Dialog中设置Start Address和Display Type如图5.1、图5.2、图5.3、图5.4 9 图 5.1 Graph Property Dialog 图 5.2 Graph Property Dialog
共分享92篇相关文档