ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:305.32KB ,
资源ID:26710265      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26710265.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(北京交通大学DSP课程设计自适应滤波.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

北京交通大学DSP课程设计自适应滤波.docx

1、北京交通大学DSP课程设计自适应滤波DSP课程实验报告 利用DSP实现自适应滤波学 院:电子信息工程学院专 业:自动化(铁道信号)学生姓名:学 号:任课教师:北京交通大学电工电子教学基地一、设计任务书自适应滤波器能够根据环境的改变,使用自适应算法来改变滤波器的参数和结构。自适应滤波器的系数是由自适应算法更新的时变系数,其系数自动连续地适应于给定信号,以获得期望响应。自适应滤波器的最重要的特征就在于它能够在未知环境中有效工作,并能够跟踪输入信号的时变特征。自适应滤波器应用于通信领域的自动均衡、回波消除、天线阵波束形成,以及其他有关领域信号处理的参数识别、噪声消除、谱估计等方面。本设计要求利用DS

2、P的DMA方式进行信号采集和信号输出,同时对外部输入的信号进行自适应滤波。二、设计内容1 基本部分(1)设计数字滤波算法,或调用DSPLIB中的滤波函数,实现对信号的滤波(2)利用C语言对A/D、D/A进行初始化 (3)利用C语言对DMA进行初始化 (4)编写DMA中断服务程序,实现信号的实时滤波 (5)利用CCS信号分析工具分析信号的频谱成分,确定滤波器的参数2 发挥部分(1)比较不同自适应性滤波器的滤波效果; (2)在实验板的Line in输入端接入正弦信号,分左右声道分别采集,并分别滤波。三、设计方案、算法原理说明1利用DSP进行信号处理首先,模拟信号x(t)经过A/D转换后,成为数字信

3、号,由DSP读入;DSP对采集的数字信号采用数字信号处理的算法进行处理,处理结果仍为数字信号;处理后得到的数字信号经D/A转换后,成为模拟信号y(t)。利用DSP进行信号处理的流程如图3-1所示。图3-1 DSP进行信号处理的流程2利用DMA方式进行信号的采集和输出C5502的DMA能在不占用CPU资源的情况下,实现DSP存储器间数据的自由传送。C5502有6个可独立编程的DMA通道,每个DMA通道拥有各自的控制寄存器。在DMA功能正常使用之前,必须根据需要对这些寄存器进行正确的设置。A/D转换完的数据被串口1的数据接收寄存器收到后,启动DMA4传输,将数据写到指定的数据接收缓冲区,通过DMA

4、方式完成一次数据采集。当DMA4采集完一帧128个点数据后产生一次DMA4中断,通知CPU对其进行DLMS滤波处理。此时DMA4可以按照设定继续采集数据,实现了数据采集与CPU处理的并行操作。在DMA4的中断服务程序中,DMA4接收缓冲区1中的数据经过DLMS滤波处理后,放入DMA5的发送缓冲区1,同时启动DMA5进行DLMS数据到串口1的数据发送寄存器的DMA传输。DLMS输入数据缓冲区分为2个,gBufferRcvPing、gBufferRcvPong ;输出数据缓冲区分为2个gBufferXmtPing、gBufferXmtPong ;每个缓冲区的大小为128个点。输入输出缓冲区采用了“

5、乒乓”方式,即输入1=输出1,输入2=输出2其框图如图3-3所示。图3-3 DMA缓冲区在ping、pong缓存区中,数据存放方式为左右声道交替存放的。在进行处理前左右声道需要分别提取出来,再分别进行处理。处理完成之后再将左右声道进行合并后输出。其过程图3-3所示。图3-3 左右声道处理流程3回波产生输入的左声道信号产生回波信号后,与右声道的信号叠加,生成带回波的信号,从右声道输出。图3-4是左声道数据在时延两个单位后叠加在右声道上形成带回波噪声的信号的示意图。图3-4 回波产生示意图我们希望能通过耳朵对回波信号进行区分,所以延时要求比较高,我们设定采样频率为8k,延时为0.5S。所以另外定义

6、两个存储器delayone和delaytwo。先存储delayone存储区,存储满4096个点后,换存储delaytwo存储区。 Delaytwo存满时,再换回存储到delayone。可见,delayone和delaytwo的第一单元延时差为4096.当存储一个delayone第一个单元时,将leftbuff第一个单元放入delayone第一个单元,同时将delaytwo的第一个单元衰减后加入right-buff,从right-buff输出。并将delaytwo的第一个单元放入leftbuff第一个单元,已以备后面使用。当存储完4096个单位时,换从delaytwo的第一个单元进行存储。将le

7、ftbuff第一个单元放入delaytwo第一个单元,同时将delayone的第一个单元衰减后加入right-buff,从right-buff输出。由于DSP处理时,一次处理4096个单元比较困难,所以将4096分成32个组,每次处理128个单元。此时right_buff为跌加了回波噪声的信号。以上原理图如下3-5所示图3-5 可辨别的回波产生示意图4自适应滤波调用滤波函数对回波信号进行滤波。利用Dsplib中的延时自适应滤波dlms函数对叠加有回波信号的右声道进行滤波。Dlms函数的调用形式如下:dlms (DATA *x, DATA *h, DATA *r, DATA *des, DATA

8、 *dbuffer,DATA step, ushort nh, ushort nx) Dlms的算法原理如下: 各参数含义为:xn 自适应滤波器的输入;rn 自适应滤波器的输出;hn 自适应滤波器的滤波系数;desn 期望响应;en 估计误差;自适应滤波的原理:本地产生的语音x(k)信号经回波信道产生回波噪声y(k)叠加在对端的声音信号v(k)上面形成叠加右回波信号的声音d(k),最终导致本地通话方能够听见对方声音里夹带着自己刚才说话的声音。我们的自适应滤波是通过对接收到的叠加有噪声的对方的信号d(k)和本地的信号进行计算形成模拟的回波信道进而估计出回波噪声信号y(k),然后与d(k)作减法,

9、便可以滤除掉噪声信号,得到理想的对端的声音信号e(k)。如图3-3所示。图 3- 6四、程序设计、调试与结果分析1. 程序设计(1)DMA过程定义函数copyDatadev,实现将接收缓存区的数据进行左右声道的分别提取过程void copyDatadev(Int16 *inbuf, Int16 *outbuf1, Int16 *outbuf2,Int16 *outbuf3,Int16 length) Int16 i; for (i = 0; i length; i+) outbuf1i = inbuf2*i; outbuf2i = inbuf2*i+1; outbuf3i=outbuf2i ;

10、 定义函数copyDatadev,实现将左右声道的信号合并放入发送缓存区的过程void copyDatacom(Int16 *inbuf1,Int16 *inbuf2, Int16 *outbuf, Int16 length) Int16 i; for (i = 0; i length; i+) outbuf2*i = inbuf1i; outbuf2*i+1= inbuf2i; if (pingPong = PONG) copyDatadev(gBufferRcvPing, leftbuff,rightbuff,right_buff,SINSIZE); copyDatacom(leftbuf

11、f, rightbuff, gBufferXmtPing, SINSIZE); else copyDatadev(gBufferRcvPong, leftbuff,rightbuff,right_buff,SINSIZE); copyDatacom(leftbuff, rightbuff, gBufferXmtPong, SINSIZE); (2)回波信号的产生定义echogenerate,实现回波信号的产生void echogenerate(Int16 *inbuf, Int16 *outbuf, Int16 length) /*p,q,di,ti为全局变量,方便加载初值和便于在多次函数调用

12、总实现信号在存储空间的连续存放和读取*/*本函数的返回值中,leftbuff的值变为延时的左声道信号,right_buff返回值为叠加了左声道时延的信号*/ Int16 i; if(Mode=0)/* Mode=0,delayone存储当前信号,delaytwo用于读取延时的信号用于回波的叠加。*/ Int16 j; for(j=0;j=delay) /判断是否存满缓冲,满了需要复位参数 p=0; di=0; else / Mode=0时原理同上。 Int16 j; for(j=0;j=delay) q=0; ti=0; if(Mode=0) for (i=0;i=delay) Mode=1;

13、 /延时缓冲读完,切换读取的缓存 else /参考Mode=1,原理同上。 for (i=0;i=delay) Mode=0; if (pingPong = PONG) copyDatadev(gBufferRcvPing, leftbuff,rightbuff,right_buff,SINSIZE);echogenerate(leftbuff,right_buff,SINSIZE); copyDatacom(leftbuff, rightbuff, gBufferXmtPing, SINSIZE); else copyDatadev(gBufferRcvPong, leftbuff,righ

14、tbuff,right_buff,SINSIZE); echogenerate(leftbuff,right_buff,SINSIZE); copyDatacom(leftbuff, rightbuff, gBufferXmtPong, SINSIZE);(3)调用dlms函数进行滤波处理dlms(leftbuff,h,rightbuff,right_buff,dbuffer,STEP, NH, NX);for(i=0;iNX;i+) rightbuffi=right_buffi-rightbuffi;上述两句代码实现了right_buff中的噪声的滤除,这两句是自适应滤波的核心,dlms函数

15、根据leftbuff估计出收到的叠加有回波的信号中回波噪声,然后从有声道中减去噪声就可以得到没有回波的右声道信号。2.实验步骤1)把工程拷入C:CCStudio_v3.3MyProjects2)插上DSK 板子4)打开音量调节控制选中选项中的高级控制点击属性播放模式下选中麦克风取消麦克风静音软件、CD、后端输入选中静音点击属性录音模式下取消后端输入选中高级麦克风加强去掉点击属性播放模式确认选中后端输入高级取消麦克风加强主音量和麦克风音量尽量减小根据虚拟仪器显示进行微调。6)打开虚拟仪器,点击信号源,左通道产生一定频率的正弦波。8)正确连接PC 机和板子,耳机输出接到DSK 板上的J5 端口,麦

16、克输入接到DSK 板上的J6 端口。9)打开setup CCS3.3, 正确装载并在退出前保存。10)在CCS 环境中,选中ProjectOpen 选择建好的工程(.pjt)文件。选择debugconnect,链接电脑与DSP试验箱。选择Load Program,读取.out文件。选择debuggo main。点击run运行文件。11)在CCS 中选择View/Graph/Time/Frequency,出现图形属性对话框。12)如果要观察频域波形,Display Type 改为FFT Magnitude。3.结果分析(1)滤波前后频谱的变化未滤波前,输入的左声道信号产生回波信号后,与右声道的信

17、号叠加,生成带回波的信号,从左声道输出。所以,左声道为加噪声后的信号。进行自适应滤波后,滤除回波的信号从右声道输出。所以,右声道为滤波后的信号。滤波前后信号的变化如图4-2所示。图4-2 滤波器前后虚拟仪器上频谱分布绿色表示左声道频谱,红色表示右声道频谱,可见,左声道有回波噪声的存在。自适应滤波后,右声道成功的滤除了回波噪声。五、设计(安装)与调试的体会在本次DSP实验中,我通过阅读资料、了解DSP实验系统的组成,学会集成开发环境CCS的使用,并利用自适应算法进行滤波处理。首先,我们通过老师的讲解,阅读PPT和TMS320C55X等资料,了解了DSP实验系统的基本组成和结构,并掌握了利用DMA

18、进行信号采集和输出的原理,接着,我们在main函数中利用C语言编程,实现了信号输入后左右声道的提取,并能成功将左右声道提取的信号进行合并后输出。接下来,我们根据要求设计产生回波信号,将左声道的回波加到右声道后,从左声道输出。最后,我们调用dlms函数,对回波信号进行自适应滤波,得到无回波的信号。为了对自适应滤波进行实际的应用。我们输入一段音频信号,产生回声,并进行滤除。插入耳机后,可以听到左声道有明显的回声,而右声道无回声。在本次试验中我们遇到了很多问题。例如,在产生回波信号时我们对实验要求不太理解。开始时,我们将左声道信号叠加到右声道,从右声道输出,这样虽然原则上并没有错,但每次需要对比有无

19、滤波时,必须把滤波的语句注释掉,重新编译运行。经过与老师和其他组的讨论后,我们才将左声道信号叠加到右声道,从左声道输出。这样左声道表示的是滤波器前信号,右声道表示滤波后信号。可以同时观察,并且通过耳机的左右声道能明显分辨出有回声和回声滤除后的明显效果。在调用dlms函数时,我们也遇到了问题。开始时我们将回波后左声道信号作为输入,原右声道信号作为期望值,进行滤波。后来通过与老师讨论,我们意识到在实际应用中,我们是无法得知对端的信号,所以不能用对端信号最为期望。通过查找文献资料,我们终于明白了自适应滤波实现波波消除的原理,用自适应滤波拟合回声信号,在与叠加了回声的信号相减,得到了对端传来的无回声信

20、号。应用自适应滤波实现音频信号的回声滤除时,我们希望通过双耳能分辨出滤波前后的音效。但人耳能分辨的时间间隔为0.1秒。而如果按照先前的程序,时延几个到几十个单位远远无法达到人耳的分辨。所以,我们又新定义两个4096的存储区交替存储,延时衰竭与右声道叠加,这样才实现了延时0.5s,双耳能明显分辨出回声信号的有无。在这次DSP课程设计中,我们投入了大量时间和精力。也正是因为不断地学习、探索、交流,我们对DSP实验系统有了很深的了解,也能在CCS中进行熟练的操作。并通过自己的设计实现了自适应滤波,实现了课堂所学到实践应用的转变。在以后的学习中,我还会继续努力学习,将知识与实践完美结合。本次课程设计是

21、我从头到尾都参加的一次课程设计,经历比较完整,收获十分的大。至于说感想和体会,我觉着这篇报告前面的很多内容都能说出一些我的体会,因为前面的内容虽然不算很多,但是每一句都是我自己敲上去的。最后我就把自己遇到的一些问题叙述一下。 选择这个题目,是因为我刚看到题目时觉着这个题比较难,而且时间比较充裕,有足够多的时间来做。在实际开始做的时候,我们觉着这个题也就是分三步就可以做完,并且每步都不会太难,尤其是第三步,直接利用CCS库函数dlms对信号进行滤波,几乎没什么难度。然而,在我们滤波前的工作都做完以后,却发现dlms函数的根本不是我们想得那样。dlms函数的各个输入参数并不是我们想得那样简单的使用

22、。因为该函数中的参数要求并不明确,而且在调试中实验设备的处理也并不是很稳定,所以并不是和我们事先想的一样简单。而且最让人不可捉摸的在好几种情况下,处理后都有较为理想的滤波输出,有些时候真的就以为是自适应滤波完成了,但还好能及时各种问题,才不至于错误地使用这个函数。最后导致总是感觉今天做的是对的,然后准备截图时忽然间发现不合理或者有时候都把图截好准备写报告时发现问题,所以一直持续做到最后,才搞明白了这个函数的调用。最后回头想想我觉着我们这个月几乎一直在做DSP,虽然这个题目看起来简单,但我觉着我们不只是简单调用了一个函数,而且是通过各种方法去研究了一个已经封装好的没有任何说明的函数的功能。虽然D

23、splib中对这个函数有一些说明,但到最后我觉着那根本就不是那我们正常人的思维写的说明,当然,这更大的原因还是我们自己对自适应回波算法的原理不是很了解。我们这次课程设计最终能够得到理想的结果与其他小组之间的讨论是分不开的,因为当局者迷,自己总是会认为自己的相法是正确的,当稍微有些结果,哪怕不合理,自己也可以接受,这样很容易进入误区。还有就是要学会利用互联网资源,我们少数人的思维毕竟太狭隘,只有我们多了解他人对相同问题的看法,并且加以思考才可以更好地得出我们自己的想法。六、参考文献1 高海林 钱满义 DSP技术及其应用 清华大学出版社,20092 陈后金等 信号分析与处理实验. 高等教育出版社,

24、20063 邹鲲等 MATLAB 6.x 清华大学出版社,20024 TMS320C55X DSP Library Programmers Reference,SPRU422J.pdf5TMS320VC5502 Fixed-Point Digital Signal Processor Data Manual,SPRS166K.pdf6 TMS320C55X Chip Support Library API Reference Guide,SPRU433I.pdf7 许国威、马胜前等.自适应滤波RLS算法研究与DSP实现. 计算机技术与发展.2010.108 BJTU-DSP5502实验系统简介

25、. 北京交通大学电信学院电工电子教学基地七、附录1.Main函数/* * Copyright (C) 2003 Texas Instruments Incorporated * All Rights Reserved */*-main_dma4.c- * This is a DMA application example for Codec AIC23B analog input/output, * The example places the MCBSP in DMA transmit data mode and * syncs MCBSP receive with DMA channel

26、4 and MCBSP transmit * with DMA channel 5. * The example uses predefined CSL macros and symbolic * constants to create the initialization values needed for * the MCBSP and DMA control registers to effect the transfer * Created by hailingao , BJTU , 2012/06/25,2014/06/16 */#include #include #include

27、#include #include #include #include #includedlms.h/-Global data definition-/* Constants for the buffered ping-pong transfer */#define BUFFSIZE 256#define PING 0#define PONG 1#define SINSIZE 128#define CAHE 4096Int16 decay=6,Mode=0,delay=4095;Int16 p=0,q=0;/回波产生参数Int16 di=0,ti=0;/回波缓存参数/* * Data buff

28、er declarations - the program uses four logical buffers of size * BUFFSIZE, one ping and one pong buffer on both receive and transmit sides. */#pragma DATA_SECTION (gBufferXmtPing, buffer_sect);Int16 gBufferXmtPingBUFFSIZE; / Transmit PING buffer#pragma DATA_SECTION (gBufferXmtPong, buffer_sect);Int

29、16 gBufferXmtPongBUFFSIZE; / Transmit PONG buffer#pragma DATA_SECTION (gBufferRcvPing, buffer_sect);Int16 gBufferRcvPingBUFFSIZE; / Receive PING buffer#pragma DATA_SECTION (gBufferRcvPong, buffer_sect);Int16 gBufferRcvPongBUFFSIZE; / Receive PONG buffer#pragma DATA_SECTION (delayone, .buffer_cahe);Int16

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1