您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 利用DSP实现实时滤波
0DSP课程设计实验报告利用DSP实现实时滤波学院:电子信息工程学院老师:高海林老师班级:通信0705设计者:陈川峰07221125刁苏蒙07211066联系方式:516895901目录一、设计任务书实验背景……………………………………………………………2实验要求……………………………………………………………2二、设计内容基本部分……………………………………………………………2拓展部分……………………………………………………………2三、设计方案、算法原理说明设计方案……………………………………………………………3算法原理……………………………………………………………5四、程序设计、调试与结果分析程序设计……………………………………………………………7调试观察…………………………………………………………19结果分析…………………………………………………………25五、设计(安装)与调试的体会总结与感想1………………………………………………………25总结与感想2………………………………………………………26六、参考文献参考书目一览……………………………………………………272一、实验任务1、实验背景在信号与信息处理中,提取有用信息就要对信号进行滤波。利用DSP可以实时地对信号进行数字滤波。本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。自适应滤波不仅能够选择信号,而且能够控制信号的特性。自适应滤波器具有跟踪信号和噪声变化的能力,它的系数能够被一种自适应算法所修改。利用DSP可以实时地对信号进行自适应滤波。DSP利用直接存储器访问方式DMA采集数据时不打扰CPU,因此CPU可以对信号进行实时地滤波。本设计要求利用DSP的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行数字滤波。2、实验要求1.建立信号处理系统的概念,学会使用DSP处理器;2.了解DSP处理系统的关键器件的使用方法;3.掌握DSP课程设计的基本方法,巩固信号处理的基本理论;4.掌握查阅有关资料和使用器件手册的基本方法,学会阅读原版英文资料;5.掌握DSP集成开发环境的使用和调试方法;6.掌握DSP片外资源和片上资源访问的基本方法,如存储器、McBSP、DMA、A/D和D/A转换器等。二、设计内容1、基本部分:(1)对DMA进行初始化;(2)对A/D、D/A进行初始化;(3)编写DMA中断服务程序,实现信号的实时滤波;(4)利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数,利用MATLAB设计数字滤波器,提取滤波器参数;(5)设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的滤波。(6)比较加不同窗和阶数时滤波器的滤波效果;(7)测试所设计滤波器的幅频特性和相频特性,并与MATLIB下的设计结果进行比较。2、拓展部分:(1)滤波后信号实时输出的同时,将数据存放在数据文件中;(2)利用自适应滤波实现语音信号回波对消。3三、设计方案、算法原理说明1、设计方案流图如下:【1】主程序流图上电复位CODEC初始化DMA2通道初始化DMA方式接收A/D数据等待DMA2接收中断简要说明:模拟音频进过codec电路(codec已设置好初值),转化为数据流,存放于缓冲区中,用于对数据处理。DMA初始化,设置初值,用于控制DSK板相应模块。利用DMA实现对信号的实时处理,减少占用CPU的资源。等待DMA2中断,无限循环控制对信号实时处理。【2】中断服务程序流图4简要说明:初始化DMA通道3,然后启动FIR滤波函数后数据的发送,经过处理后的数据经过codec电路中的D/A模块输出。中断服务程序用于主函数的入口处,供实时调用。调用的FIR滤波函数。【3】回波产生于消除流图5上电复位Codec初始化调用函数产生回声调用FIR和dlms函数滤波输出模式0模式1模式2调用FIR滤波函数简要说明:模拟的语音信号先经过初始化过的codec电路,然后转为数据流,存放于指定的位置,用于处理。数据流经过处理变为带有回声的数据信号,然后通过调用相应的FIR滤波函数和自适应滤波函数dlms对数据进行处理,即又转化为与输入基本相同的语音信号,达到了实现产生回波,然后再消除的结果。中间设置不同的模式,课根据不同模式观察有回波,没加dlms函数处理后和有回波,加dlms函数处理后相互比较,以便比较程序的正确性和可实践性。2、算法原理:【1】自适应滤波器的结构自适应滤波器的特性变化是由自适应算法通过调整滤波器的系数来实现的.所以,自适应滤波器一般都由两部分组成:一是滤波器结构,它为完成期望的处理功能而设计;二是自适应算法,它调节滤波器系数以改进性能.自适应滤波器的一般形式如下图,图中输入信号(n)加权到数字滤波器产生输出信号y(n),自适应算法调节滤波器权系数使输出y(n)和滤波器期望的响应x(n)之间的误差信号e(n)为最小.自适应滤波器的系数受误差信号的控制,根据e(n)的值和自适应算法自动调整.一旦输入信号的统计规律发生了变化,滤波器能够自动跟踪输入信号的变化,自动调整滤波器的权系数,实现自适应过程,最终达到滤波效果。6x(n)自适应滤波器的输入;y(n)自适应滤波器的输出;d(n)期望响应;e(n)估计误差;e(n)=d(n)-y(n);自适应滤波器的结构可以采用FIR或IIR结构,但实际应用中一般采用FIR型结构,主要原因是FIR结构的滤波器只包含正向通路,是固有稳定的,实现更容易,其权系数的修正就凋节了滤波器的性能,计算量小且很稳定;而IIR滤波器同时兼有正向通路和反馈通路,内部反馈可能导致滤波器震荡,存在稳定性问题。所以,在自适应滤波器的应用中,一般采用FIR滤波器.故本次实验选择FIR型滤波器。而自适应FIR滤波器结构又可分为三种结构类型:横向型结构(TransversalStructure)、对称横向型结构(SymmetricTransversalStructure)、格型结构(LatticeStructure)。本实验所采用的是自适应滤波器设计中最常用的FIR横向型结构。结构图如下:横向型滤波器的结构示意图其中x(n)——自适应滤波器的输入w(n)——自适应滤波器的冲激响应:w(n)={w(0),w(1),…,w(N-1)}y(n)——自适应滤波器的输出:y(n)=x(n)∗w(n)【2】LMS算法简介7自适应算法的种类较多,最常用的自适应算法是最小均方误差算法,即LMS算法(LeastMeanSquare),LMS算法是一种易于实现、性能稳健、应用广泛的算法。所有的滤波器系数调整算法都是设法使y(n)接近d(n),所不同的只是对于这种接近的评价标准不同。LMS算法的目标是通过调整系数,使输出误差序列e(n)=d(n)−y(n)的均方值最小化,并且根据这个判据来修改权系数,该算法因此而得名。误差序列的均方值又叫“均方误差”MSE(MeanSquareError)最常用的判据是最小均方误差,即理想信号d(n)与滤波器输出y(n)之差e(n)的期望值最小,并且根据这个判据来修改权系数wi(n)。由此产生的算法称为LMS。均方误差表示为:=MSE=E[e)(nw]=E[(d(n)-y(n))2]对于横向结构的滤波器,代入的表达式有:=MSE=E[d)(2n]+WT(n)RW(n)-2WT(n)P其中,R=[X(n)XT(n)]为N×N自相关矩阵,是输入信号采样值间的相关性矩阵。P=E[d(n)X(n)]为N×1互相关矢量,代表理想信号d(n)与输入矢量的相关性。在均方误差达到最小时,得到最佳权系数W*=[w*0,w*1,λw*1N]T。说明:本次实验通过调用displib.h中的函数:shortdlms()来实现自适应滤波。具体见程序。【3】回波原理与设计a、声学回声消除的功能原理框图如下图所示:b、回声消除的基本原理可以概括如下:自适应地合成回声,并从有回声干扰地信号中减去该合成回声。回声消除器的基本原理图如下:8一般回声消除算法通过自适应滤波来完成,其基本原理如上图所示。其中,远端信号城x(k)通过回声信道h产生回声y(k),近端信号d(k)是由回声y(k)馄和近端声音代句(可包含噪声信号)得到。通过使用M抽头的FIR自适应滤波器来模拟回声信道h,可以使所得y(k)通近回声信号,进而达到回声消除的目的由此可见,回声消除的关键是自适应地调整使其通近h,可通过现有的各种自适应滤波算法实现。本实验自适应滤波调用的是系统的库函数dlms函数来实现的四、程序设计、调试与结果分析1、程序设计基本要求部分【1】和【2】【1】滤波主函数源程序/*****************************************************************************//*FIRlab.CAIC,McBSP,DMAinitializationforFIRlabFilter*//*****************************************************************************//*****************************************************************************//*包含文件*//*****************************************************************************/#includetype.h#includeboard.h#includecodec.h#includedma54xx.h#includetimer.h#includeintr.h#includestring.hvoiddelay(s16period);externvoidDMAC2ISR();/*****************************************************************************//*全局变量*/9/*****************************************************************************/HANDLEhHandset;unsignedintdmsefc,dmmcr,dmctr,src_addr,dst_addr;unsignedintdmpre,dmsrcp,dmdstp,dmidx0,dmidx1,dmfri0,dmfri1,dmgsa,dmgda,dmgcr,dmgfr;/********************************************************//*建立输入数据段存放输入数据(inp_buffer)*/#pragmaDATA_SECTION(inp_buffer,audio_buffer);intinp_buffer[0x200];/*建立输入数据段存放输入数据(out_buffer)*/#pragmaDATA_SECTION(out_buffer,outt_buffer);intout_buffer[0x200];/*建立脉冲相应数据区*/#pragmaDATA_SECTION(coeffs,coefficients);/*LowPassFilterfs=16000fc=4000Hz*/intcoeffs[21]={38,78,0,-303,-723,-817,0,2006,4775,7226,8208,7226,4775,2006,0,-817,-723,-303,0,78,38};//kasier窗设计,低通/*HighPassFilter*///intcoeffs[21]={-27,102,0,-396,510,441,-1799,1083,3369,//-9420,12284,-9420,3369,1083,-1799,441,51
本文标题:利用DSP实现实时滤波
链接地址:https://www.777doc.com/doc-6282116 .html