资源描述:
《dsp应用课程设计课件 第4讲 利用dsp实现信号滤波》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、北京交通大学国家电工电子教学基地利用DSP实现信号滤波1.利用DSP进行实时信号滤波利用DSP实现对模拟信号滤波的框图函数调用格式:oflag=shortfir(DATA*x,DATA*h,DATA*r,DATA**dbuffer,ushortnh,ushortnx)功能用FIR滤波器对信号滤波调用参数说明:x[nx]表示含有nx个实数的实输入信号向量;h[nh]表示含有nh个实数的系数向量,按自然顺序排列,即滤波器的单位脉冲响应。r[nx]表示含有nx个实数的输出向量;允许原位运算,即r=x。2.滤波器函数fir()说明:dbuffer[nh]延迟缓
2、冲区;对存储器的要求同h[nh]。nx向量x中实数的个数;nh向量h中系数的个数;oflag=1有溢出;oflag=0无溢出对数组h和dbuffer的特殊要求:输入数组首地址最低log2(nx)位为必须为0。2.滤波器函数fir()说明oflag=shortfir(DATA*x,DATA*h,DATA*r,DATA**dbuffer,ushortnh,ushortnx)滤波器函数使用的例(a)一次调用处理一个数据#pragmaDATA_SECTION(h,"coe_buf")DATAh[N];#pragmaDATA_SECTION(db,"delay_
3、buf")DATAdb[N];DATAdb[N]={0};DATA*dbp=&(db[0]);DATAx,y;fir(&x,h,&y,&dbp,N,1);滤波器函数使用的例(b)一次调用处理L个数据#pragmaDATA_SECTION(h,"coe_buf")DATAh[N];#pragmaDATA_SECTION(db,"delay_buf")DATAdb[N];DATAdb[N]={0};DATA*dbp=&(db[0]);DATAx[L],y[L];fir(x,h,y,&dbp,N,L);利用codec对信号实时i=
4、0;while(1){while(!MCBSP_XRDY(HANDSET_CODEC)){};x=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);inp_data[i]=x;fir(&x,h,&y,&dbp,N,1);out_data[i]=y;i=i+1;if(i>=L)i=0;*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=y;}}利用Matlab进行滤波器设计滤波器设计工具箱fdatool工具箱(FilterDesignandAnalysisTool)此工具箱提供常用的各种滤波器的设
5、计,并将设计的滤波器参数提取出来。调用方法:在Matlab命令窗口键入fdatool3.滤波器设计4.直接存储器访问控制器(DMA)的使用直接存储器访问(DirectMemoryAccess,简称DMA)是C54xDSP非常重要的片上外设。DMA特性:完成数据传输而不影响CPU,因此数据传输速度快。应用场合:在要求信号实时采集和处理的系统中常采用DMA方式进行信号采集与传输。DMA和DSP内核访问存储器的框图信号采集和滤波的流程图利用DMA进行FIR滤波的中断服务程序interruptvoidDMAC2ISR(void){int*p_inp,*p_ou
6、t;inti;p_inp=inp_buffer+frame*0x100;p_out=out_buffer+frame*0x100;fir(p_inp,coeffs,p_out,&delayptr1,16,256);//for(i=0;i<256;i++)//*(p_out+i)=*(p_inp+i);init_dma3();frame^=1;}