




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-1-《实验报告》语音噪声滤波学院:电子信息工程学院姓名:王婷姓名:缪小川小组成员:78成绩:工程设计50报告20答辩30总分评语:-2-348程序设计、调试与结果分析设计与调试的体会一.设计任务书设计题目:语音噪声滤波 题目背景介绍随着信息技术的发展,信号处理正向着数字化、软件化方向发展。数字信号处理的主要研究对象是语音信号和图像信号,语音信号的研究可以从时域和频域两个方面来进行。其-3-中时域的分析处理有两种方法:一种是进行语音信号分析,这属于线性处理的范畴,主要是通过信号的加减、时移、倍乘、卷积、求相关函数等来实现;另一种是生成和变换成各种调制信号,这属于非线性的范畴,主要是对信号平均累加器的动态范围进行压缩扩张,用门限方法对噪声的抑制。对频域分析处理,即对信号的频率特性在频谱中加以分析研究,这拓展了信号分析的范围,是对不确定信号分析的主要方法。在实际应用中,信号的时域频分析经常同时进行。由于环境的原因,我们采集到语音信号经常含有不同程度的噪声,因此要对语音信号中的噪声滤除。DSP利用直接存储器访问方式DM采集数据时不打扰CPU因此CP可以对语音信号进行实时地滤波。首先利用DSP勺DM方式对外部含噪声的语音信号进行实时采集,语音信号先经过A/D转换为数字信号,利用MCBSP的接收寄存器接收数据。编写滤波算法程序,或调用DSPLI沖的滤波函数,对信号进行滤波。滤波后的数据利用DM方式送到D/A转换器转换为模拟信号。实验要求及目标1.实验目的1)掌握信号滤波的基本原理和方法;2)掌握利用DSP直接存储器访问(DMA)的方法;3)掌握综合利用A/D、D/A及DMA等资源实现信号滤波的完整过程。2.实验要求基本部分:1)对DM进行初始化;DM语音信号的实时滤波;发挥部分:1)使用DS产生带回波的语音信号;2)利用自适应滤波实现语音信号的回波对消。3.要求完成的任务1)编写C语言程序,并在CCS集成开发环境下调试通过;2)将包含噪声的语音信号进行滤波,从扬声器输出端口输出,比较滤波前后的信号的变化。二.设计原理1.DMA通道初始化DMA(直接存储器访问DirectMemoryAccess)是C54xDS非常重要的片上外设,DM控制器可以在不影响CPU勺情况下完成数据的传输,因此在对信号实时采集和处理的系统中常采用DM模式进行信号采集和传输。TMS320C540有6个可独立编程的DM通道,每个DM通道受各自的5个16位寄存器控制。语音信号时模拟信号,可以利用DM通道2与McBSP通道结合来读取A/D转换的数据,最后利用DM通道3与McBSP®道结合来将处理后数据发送至D/A。选择McBSP通道的接收寄存器DRR1为DM传送数据的首地址,并选择DMMcBSP收事件为DM同步事件,以实现DM与McBSS据后产生一个DMA中断事件中断CPU来通知CPU寸其进行相应的处理,进而按照设定进行下一组采集。滤波后的信号输出利用3通道进行传输进入D/A等输出,因此要对DMAS道-4-2和通道3进行初始化配置。2.数字信号FIR滤波进行信号滤波也就是对序列的卷积进行计算,实验的噪声信号是有限长信号,选取FIR数字滤波器。语音信号由外部输入,由此可以得到滤波器的输出为y[k]=h[k]*x[k],可采用重叠相加法计算卷积。将输入的长序列分解为短序列,分别与单位脉冲响应进行卷积,每进行完一段操作计算结果中后N-1个数据保留在一个缓冲区,与下一段结果重叠相加。语音信号是低频信号,因此可以用MATLAB来设计3.自适应消除噪声滤波器最小均方(LMS,least-mean-square)算法是构建自适应消噪滤波器的主要算法。号s(n)不相关,可用原理图表示如下:-5-主信号加(?l)LMSI法流程图如下:自适应噪声抵消器原理图求剩余的y(n)=^w(n)+]'n(n—a)吏新滤波器系数3PLMST法:基于最速下降法的最小均方误差算法的迭代公式如下:e(n)=d(n)-X(n)W(n)TW(n+1)=W(n)+2ue(n)X(n)将以上两式联立,得:-6-W(n)=W(n)+2u[X(n)d(n)-X(n)X(n)W(n)]T-7-其中:W(n)是自适应滤波器在时刻n的矢量,x(n)为时刻n输入信号矢量,d(n)为期望输出入是输入信号自相关矩阵的最大特征值。LMS寸于每输入一个样本,只需对上式中的两个乘ma法与两个加法运算,该算法易于用实时4.回声的产生回声实际上就是自己的声音泄露到自己的接收途径中。在任何一个通讯网络中,至少包括两个节点。从每一个节点看来,每个呼叫都包括两个语音路径:发送路径一一本地拾取声音,远端回放声音。也就是说从呼叫方的嘴巴传送到接收方的耳朵中。接收路径——远端拾取声音,本地回放声音。也就是接收方在接收到会话时创建接受路径,发送方的声音由接收方的耳朵接听到。回路中。一般来说从发送端泄漏到接收端而引起的回声现象,可以有两个产生途径:线路回声一一通讯回路中节点设备对发送/接收信号的耦合所产生的回声。声回声一一通过空气作为传播媒介,由Speaker直接耦合到MIC所产生的回声影响。回声的主要两个属性:音量和延迟:回声和原始信号如果相差50m$以下的场。如果系统泄漏的回声信号低于原始信号30db以上的话,而-8-且延时小于80mS勺时候。回声信号一般会被混响声所淹没。用户是听不到回声的感觉。所以实验里可以用回声的原理计算响应的延时以达到实验效果。实验中的回声原理可用如下原理图来表示:由此可见,实验中的语音回声噪声消除可以采用自适应滤波器来设计。5.回声消除器回声的消除可以采用LMS算法。自适应合成回声,并在有干扰的情况下消除回声。自适应滤波器是FIR横向滤波器,可以根据输出自动修改滤波器的权系数,从而逼近未知系统回声通道。算法的实现要基于TMS320C5402DS1P片和CCS系统的C语言。其原理可以理解为如下:自适应谑波原理图-9-三.设计方案说明1.噪声信号的产生噪声信号利用MATLA产生一个信号,由于声音信号属于低频段,所以采用FIR低通滤波器设计过程如下:利用FDATOO来设计低通滤波器,所取的设计参数如下:所得的函数幅度响应图如下:lMagritudeResponse(dB〕O-O︹电O2320Frequency(kHz)利用MATLA功能,生成.c文件:自定义的头文件程序如下:/*FilterCoefficientsCSourcegeneratedbytheFilterDesignandAnalysisToolGeneratedbyMATLABRandtheSignalProcessingToolbox6.5.*Generatedon:20-Jan-201011:44:28*/*creteTimeFIRFilterreal*FilterStructure:Direct-FormFIR*FilterLength:14Stable:YesLinearPhase:Yes(Type2)**ImplementationCost*NumberofMultipliers:14*NumberofAdders:13*NumberofStates:13*MultPerlnputSample:14*AddPerlnputSample:13/*GeneraltypeconversionforMATLABgeneratedC-code*/#include"tmwtypes.h"/**Expectedpathtotmwtypes.hEMATLAB006\extern\include'tmwtypes.h*/constintBLconstrealTB[14]={3,1757773104,3962365133,6323378858,4567316798,6,1,4567316798,3962365133,6,6323378858,1757773104,3194131145691,-0.03493880541243-12-2.回声信号的产生:回声信号也就是信号有了延迟。麦克输入的信号在接收时有了泄露,最终输出的信号回声通道的传输函数可以表示为:MS为衰减,M为延迟点数。听到的回波是混合信号,此时不仅能听到自己的声音,也能几个衰减后叠加的回声。回波产生程序如下:while(!MCBSP_RRDY(HANDSET_CODEC)){};//codec句柄如未准备好则等待dk=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);//从AD读数bf[i]=dk;//放入缓冲区*(volatileu16*)DXR1_ADDR(HANDSET_CODGC+bf[i+1]/2;//延迟+衰减3•信号的滤波信号的滤波主要是利用LMS勺算法实现对已合成信号的滤波,算法的效率与滤波的长度有关,可以改变FIR滤波器的阶数来调节滤波器的长度。由C语言实现LMSf法的C语言程序如下所示:lexdoubledkdoubleekCCS中的lms算法移植到{si;doubleuek,yk;yk=0;for(i=0;i<N;++i){yk=yk+w[i]*x[i];}kfor(i=0;i<N;i++){w[i]=w[i]+uek*x[i];}}替换原有的LMSJ法的C语言实现程序,更换为CCS勺diplib库中的函数shortdlms(PARAM)取代自定的lms()函数,并且用dsplib库里的函数shortfir(PARAM)产生回声通-ii-道的输出信号,该输出信号作为自适应滤波器的理想输出信号,对之进行逼近进而得到预Dsplib库中的dlsm函数和fir函数的子程序:******************//Filename:dlms_t.c//Version:0.01//Description:testfordlmsroutine***************#include<math.h>#include<tms320.h>#include<dsplib.h>#include"test.h"SSSSvoidmain(void){/*clear*/for(i=0;i<NH;i++)h[i]=0;for(i=0;i<NX;i++)r[i]=0;//clearcoeffbuffer(optional)//clearoutputbufferfor(i=0;i<NH;i++)dbuffer[i]=0;//cleardelaybuffer(amust)/*compute*/dlms(x,h,r,&dp,des,STEP,NH,NX);/*test*/eflagr=test(r,rtest,NX,MAXERROR);eflagh=test(h,htest,NH,MAXERROR);//forr//forhifeflagr=PASS){exit;}-14-ifeflaghPASS){exit;}******************//Filename:fir_t.c//Version:0.01//Description:testforfirroutine***#include<math.h>#include<tms320.h>#include<dsplib.h>#include"test.h"shorteflag仁PASS;Svoidmain(void){/*1.Testforsingle-buffer*//*clear*/for(i=0;i<NX;i++)r[i]=0;//clearoutputbufferfor(i=0;i<NH;i++)db[i]=0;//cleardelaybuffer(amust)/*compute*/fir(x,h,r,&dbptr,NH,NX);-ii-/*test*/eflagl=test(r,rtest,NX,MAXERROR);/*2.Testsfordual-buffer*//*clear*/for(i=0;i<NX;i++)r[i]=0;//clearoutputbufferfor(i=0;i<NH;i++)db[i]=0;//cleardelaybuffer(amust)dbptr&db[O];/*compute*/{fir(x,h,r,&dbptr,NH,NX/4);fir(&x[NX/4],h,&r[NX/4],&dbptr,NH,NX/4);fir(&x[2*NX/4],h,&r[2*NX/4],&dbptr,NH,NX/4);fir(&x[3*NX/4],h,&r[3*NX/4],&dbptr,NH,NX/4);}/*test*/eflag2=test(r,rtest,NX,MAXERROR);ifeflagl=PASS){exit;}ifeflag!=PASS){xit}}-16-四.程序设计、调试与结果分析程序设计1.程序流程coff_w[]和自适应滤波器的输出数组out_w[],再进行DSK板的初始化'然后采集输入的语音信号,根据模式的不同进行不同的处理以输出不同的信号来进行效果的比较:模式0:mode=0时全通,不做任何处理直接输出;模式1:mode=1时信号通过FIR滤波器后产生回声,输出的信号为原来信号与噪声信号的混叠;号通过两个系统产生的信号之差(即剩余回声)来调整自适应滤波器的系数,使剩余回声逐渐收敛于0。此时的输出为滤去噪声后的信号。程序流程可以表示如下:-17-更新输入数组更新输入数组开始初始化滤波器系数、输出DSKDSK板的初始化读语音的采样值模模式(mode)模式0模式1模式2全全通滤波器LMS滤波器输出信号输岀(是否结束?)否FIR滤波器FIR滤波器结束2.最终程序延时的子程序如下:-18-voiddelay(void){for(j=0;jvlOOOOO;j++)更改j循环的上限值即可以加大延时。程序中使用dsplib库函数dlms()和fir()时要分配参数的地址,因此要手动修改CMD文件。在编完主程序后,因为引入了新的数据和变量必须在工程文件中添加一个的头文件stem.h,将这些变量放入指定了内存中。同时还修改5024.cmd文件。添加头文件stem.h:/*stem.h*/#defineLENGTH_H10//自适应滤波器长度defineSTEP100//#defineLENGTH_IN5//输入缓冲数组x[]长度声明输入缓冲数组滤波器即回声消除通道输出自适应滤波器输出aDATASECTIONcoffwcoffwDATAcoff_w[LENGTH_W];//#pragmaDATA_SECTION(coff_h,".coffh")//将数组coff_w指定到内存段.coffw声明自适应滤波器系数矢量将数组coff_h指定到内存段.coffhDATAcoff_h[LENGTH_H]={790,2661,4629,6919,8210,8210,6919,4629,2661,790};//定义FIR滤波器的系数即回声通道的权系数#pragmaDATA_SECTION(dbuffer_h,".dbufferh")//将数组dbuffer_h指定到内存段.dbufferhDATAdbuffer_h[LENGTH_IN];//该数组存放FIR上一时刻的输出pragmaDATASECTIONdbufferw,".dbufferw")//将数组指定到内存段.dbufferwDATAdbuffer_w[LENGTH」N];//该数组存放自适应滤波器上一时刻输出修改5402.cmd文件:AMorigin0080h,length:lengthl-19SCRATCHoriginhlength=0020h/*ScratchPadDataRAMDMARAMoriginOCOOhlengthhDMAbuffer/-20-DATA:origin=1100h,length=0080h/*InternalDataRAMSTACKoriginhlength0h/*StackMemorySpaceINRAMorigin00h,length=0100h/*InternalDataRAMHPRAM0:origin=1A00h,length=0002haccessiblebyHostandDSP*/HPRAM1:origin=1A02h,length=0280haccessiblebyHostandDSP*/HPRAMorigin=1C82h,length=0280haccessiblebyHostandDSP*/EXRAM:origin=1F10h,length=4000h/*ExternalDataRAM/*/*/*INT_DM_RAM:origin=6000h,length=4000h//添加部分,开辟新空间}■DSPMemoryAllocation/*******/{.cinit>PRAMPAGE0.text>PRAMPAGE0.vectors>VECSPAGE0init_var>PRAMPAGE0detect>PRAM21-vrcprg-22-.stack>STACKPAGE1.trap>SCRATCHPAGE1.const>EXRAMPAGE1.data>EXRAMPAGE1.bss>EXRAMPAGE1.cio>EXRAMPAGE1.switch>EXRAMPAGE1tables>EXRAMPAGE1var>EXRAMPAGE1svctab>EXRAMPAGE1vctab>EXRAMPAGE1uvctab>EXRAMPAGE1cuvtab>EXRAMPAGE1cdbktab>EXRAMPAGE1logtab>EXRAMPAGE1powtab>EXRAMPAGE1hamtab>EXRAMPAGE1lgwtab>EXRAMPAGE1acostab>EXRAMPAGE1sqrtab>EXRAMPAGE1acbtab>EXRAMPAGE1/*SS_VLSPtable*//*VLSPtable*//*UVLSPtable*//*Stochasticcodebook*//*variouscodebooktables*//*tableforlog2*//*tableforpow2*//*tableforhamming*//*tableforlagwindow*//*tableforarccos*//*tableforsquareroot*//*tableforthresholdsinacb*/-23-.dbufferh:{}>INT_DM_RAM.dbufferw:{}>INT_DM_RAM1KBIT.coffh:{}>INT_DM_RAMfir()两.coffw:{}>INT_DM_RAM要求Ealign//添加部分//将这些段指定到//界,以满足dlms()//个函数对参数的-24-V23>INRAMPAGE1FSK>INRAMPAGE1hpibuffO>HPRAM0PAGE1hpibuffl>HPRAM1PAGE1hpibuff2>HPRAM2PAGE1dma_buff>DMARAMPAGE1}C语言的程序如下:*****************************************************■Codecc/*DigitalLoopbackexample*/*****************************************************■#include"type.h"include"board.h"include"codec.h"include"mcbsp54.h"#include<tms320.h>#include<dsplib.h>#include"setm.h"/*FunctionPrototypes*//*ThisdelayroutinedoesnotconflictwithDSP/BIOS.ItisusedinthisrddelaymsecwhichcausesDSPBIOSconflictsjustbecauseofthisIfyouarenotusingDSP/BIOS,youcanchangethecodetousebrd_delay_msec*/voiddelay(void);//延迟dupdateDATAxDATAdkitarrayDATAx*********************************************************//*GlobalVariabl*/HANDLEhHandset;//CODEC句柄/*****************************************************************/*MAIN*//*****************************************************************■-25-DATAdpwdbuffer_w[0];-26-DATAdph&dbuffer_h[O];voidmain(){s16cnt=2;//灯循环闪次数,初始化等待时钟周期数ks16mode=1;//决定是否产生回波是否使用回波抵消foriiLENGTHINidbufferhi;iLENGTHINiouthiforutwi/*blinktheledsacoupletimes*/while(ent--)/*//clearoutputbuffer//clearcoeffbuffer//clearoutputbuffer板子初始化,用灯闪来表示*/{brddelay_msec(1000);*/delay();}/*OpenHandsetCodec*/hHandset=codec_open(HANDSET_CODEC);/^Acquirehandletocodec*//*Setcodeccodec_dac_mode(hHandset,codec_adc_mode(hHandset,codec_ain_gain(hHandset,CODEC_DAC_15BIT);/*DACn15-bitmode*/CODEC_ADC_15BIT);/*ADCn15-bitmode*/CODEC_AIN_6dBy*6dBgainonanaloginputtoADC*/codec_aout_gain(hHandset,CODEC_AOUT_MINUS_6dB);/*-6dBgainonanalogoutputfromDACcodecsampleratehHandset,SR_8000);/*8KHzsamplingrate*/brd」ggleBRDLEDinitarray(x);//初始化所有数组j=3000;-27-while(1)//读数循环{while(!MCBSP_RRDY(HANDSET_CODEC)){};dk=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);//*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=dk;从ADC读数update(x,dk);{*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=dk;}lseifmode{fir(x,coff_h,out_h,&dp_h,LENGTH_H,LENGTH_IN);ifi)i=0;ifi)i=0;bfiouthi+;〃放入缓冲区outdelaybfibfjbfmykdkoutdelayDXRADDRHANDSETCODECyk}lseifmode{fir(x,coff_h,out_h,&dp_h,LENGTH_H,LENGTH_IN);ifi)i=0;ifjj0;ifm0)m=0;bfiouthi++;out_delay=0.5*bf1[i+1]+1.5*bf1[j++]+bf1[m++];yk=dk+out_delay;volatileuDXRADDRHANDSETCODECoutwi];-28-}}}voiddelay(void){for(j=0;jvlOOOOO;j++)voidupdate(DATAx[],DATAdk){for(j=1;j<LENGTH_IN;++j){kLENGTHINjxkx[k-1];}x[0]=dk;}voidinitarray(DATAx[]){si;for(i=O;i<LENGTH_IN;++i){x[i]=0;}调试与结果分析滤波输入输出信号:输入1k+6k信号,通过低通滤波器,输出平滑的1k波形;-29-由时域图可看出,滤波后的语音波形明显比输入信号平滑。第一次调节DS板,mode=0寸,DS板等效一全通滤波器,对信号不进行滤波。第二次调节DS板,mode=时,DS板等效一混波器,它将源信号以及源信号的延迟衰减进行了混合,产生了需要的噪声与原信号的混叠。第三次调节DS板,mode=2寸,DS板等效一自适应滤波器,它将mode=情况下的输出噪声进行了滤波,调用dlms()函数将FIR滤波器的输出out_h[]作为自己的理想输出des[],不断逼近,最终能听到比较纯的声音。但杂音无法完全消除,比起mode=时的情况有了很大-30-五.设计与调试的体会王婷:感觉语音噪声滤波器的设计还是有点难,关键是要找到合适的算法来实现各种功能。开始并没有想到要使用LMSI法,最初设计的时候觉得语音噪声的滤波也就是有点类似于信号实时滤波,参考了《DS技术及其应用》的大部分内容,但是对回声信号的产生和消除并没有相应的概念。通过维普论文数据库和以前学长的设计思想,我们找到了许多有关噪声消除的资料,其中讲的比较简单的方法就是LMSf法构造的自适应滤波器。通过学习我们基本弄懂了语音噪声滤波的原理及算法,接下来最最要的就是程序的编写。通过做这次试验设计,我认识到自己在汇编语言,程序的使用这一块还是有很大的欠缺。在大一的时候就学习了C语言,但是现在发现自己已经把这方面的知识忘得差不多了,自己编出来的也是错误百出,最后还得参考同学的设计来修改。后来才发现其实有好多资源调用Dsplib库中子函数就可以,Dsplib库中的函数为我们的程序编写简化了诸多任务,也使有关CCS勺C语言程序设计部分省去了很多繁琐的程序。,实验设计课程就方面多多努力。实验里我们使用论了好长时间还是不知道为什么不行,后来其他组告诉我们可能是电脑病毒的问题,好多组都遇到了类似的问题,后来我们觉得可能是我们自己编写的头文件没有生效。设计程序时,还有一个地方思考了很长时间就是LM算法中步长的计算,要选取合适的步长,查阅资料后,我们了解到,在延时小于50m啲情况下我们人耳是无法辨别回声的,所以设计中有三种模式,可以在不同的模式下,选取不同的步长以达到我们想要的效果。回声路径的延时和抖动都相当大,其延迟包括算法延迟(0.125ms-30ms),处理延迟(〜30ms)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 5分钟竞聘演讲稿范文教师(范本8篇)
- 迪拜肿瘤早筛产业市场前景及投资策略分析报告
- 2025年空气清新器合作协议书
- 电信部门工作总结(3篇)
- 2025年ALN-BN复合陶瓷项目建议书
- 2025年映前广告合作协议书
- 2025年紫外激光传输光纤项目发展计划
- 2025年频率测量仪器项目发展计划
- 植物提取物AI智能设备行业跨境出海战略研究报告
- 科学实验俱乐部行业深度调研及发展战略咨询报告
- 印章管理责任承诺书4篇
- 事故隐患报告和奖励制度
- 新建项目员工四新培训
- 试岗期七天试岗协议书范文
- 2024年彩色锆石项目可行性研究报告
- DB3402T 59-2023 露天矿山无人驾驶矿车作业通 用要求
- 人教版四年级下册音乐全册表格式教案(集体备课)
- 西方文论概览(第二版)-第六章课件
- 初中语文教材常见问题答疑(八年级)
- 2024燃煤机组锅炉水冷壁高温腐蚀防治技术导则
- 2024北京一零一中初三(下)英语月考试卷和答案
评论
0/150
提交评论