DSP实验报告 王婷要点.docx

上传人:b****6 文档编号:8386460 上传时间:2023-01-31 格式:DOCX 页数:25 大小:308.75KB
下载 相关 举报
DSP实验报告 王婷要点.docx_第1页
第1页 / 共25页
DSP实验报告 王婷要点.docx_第2页
第2页 / 共25页
DSP实验报告 王婷要点.docx_第3页
第3页 / 共25页
DSP实验报告 王婷要点.docx_第4页
第4页 / 共25页
DSP实验报告 王婷要点.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

DSP实验报告 王婷要点.docx

《DSP实验报告 王婷要点.docx》由会员分享,可在线阅读,更多相关《DSP实验报告 王婷要点.docx(25页珍藏版)》请在冰豆网上搜索。

DSP实验报告 王婷要点.docx

DSP实验报告王婷要点

 

DSP应用课程设计

《实验报告》

 

语音噪声滤波

学院:

电子信息工程学院

小组成员:

姓名:

王婷班级:

通信0706学号:

07211117

姓名:

缪小川班级:

通信0706学号:

07211128

成绩:

工程设计50

报告20

答辩30

总分

评语:

 

指导教师签字:

日期:

2010-1-20

目录

一、设计任务书…………………………………………………………3

二、设计原理……………………………………………………………4

三、设计方案说明………………………………………………………8

四、程序设计、调试与结果分析………………………………………14

五、设计与调试的体会…………………………………………………24

六、参考文献……………………………………………………………25

 

一.设计任务书

设计题目:

语音噪声滤波

题目背景介绍

随着信息技术的发展,信号处理正向着数字化、软件化方向发展。

数字信号处理的主要研究对象是语音信号和图像信号,语音信号的研究可以从时域和频域两个方面来进行。

其中时域的分析处理有两种方法:

一种是进行语音信号分析,这属于线性处理的范畴,主要是通过信号的加减、时移、倍乘、卷积、求相关函数等来实现;另一种是生成和变换成各种调制信号,这属于非线性的范畴,主要是对信号平均累加器的动态范围进行压缩扩张,用门限方法对噪声的抑制。

对频域分析处理,即对信号的频率特性在频谱中加以分析研究,这拓展了信号分析的范围,是对不确定信号分析的主要方法。

在实际应用中,信号的时域频分析经常同时进行。

由于环境的原因,我们采集到语音信号经常含有不同程度的噪声,因此要对语音信号中的噪声滤除。

DSP利用直接存储器访问方式DMA采集数据时不打扰CPU,因此CPU可以对语音信号进行实时地滤波。

首先利用DSP的DMA方式对外部含噪声的语音信号进行实时采集,语音信号先经过A/D转换为数字信号,利用MCBSP的接收寄存器接收数据。

编写滤波算法程序,或调用DSPLIB中的滤波函数,对信号进行滤波。

滤波后的数据利用DMA方式送到D/A转换器转换为模拟信号。

实验要求及目标

1.实验目的

1)掌握信号滤波的基本原理和方法;

2)掌握利用DSP直接存储器访问(DMA)的方法;

3)掌握综合利用A/D、D/A及DMA等资源实现信号滤波的完整过程。

2.实验要求

基本部分:

1)对DMA进行初始化;

2)对A/D、D/A进行初始化;

3)编写DMA中断服务程序和滤波算法程序,实现语音信号的实时滤波;

发挥部分:

1)使用DSP产生带回波的语音信号;

2)利用自适应滤波实现语音信号的回波对消。

3.要求完成的任务

1)编写C语言程序,并在CCS集成开发环境下调试通过;

2)将包含噪声的语音信号进行滤波,从扬声器输出端口输出,比较滤波前后的信号的变化。

 

二.设计原理

1.DMA通道初始化

DMA(直接存储器访问DirectMemoryAccess)是C54xDSP非常重要的片上外设,DMA控制器可以在不影响CPU的情况下完成数据的传输,因此在对信号实时采集和处理的系统中常采用DMA模式进行信号采集和传输。

TMS320C5402有6个可独立编程的DMA通道,每个DMA通道受各自的5个16位寄存器控制。

语音信号时模拟信号,可以利用DMA通道2与McBSP1通道结合来读取A/D转换的数据,最后利用DMA通道3与McBSP1通道结合来将处理后数据发送至D/A。

选择McBSP1通道的接收寄存器DRR11为DMA传送数据的首地址,并选择DMA源地址工作在不调整模式,选择McBSP1接收事件为DMA同步事件,以实现DMA与McBSP的结合。

DMA在传送外部来的数据时不会影响CPU的正常运行,当DMA通道2采集完一组数据后产生一个DMA中断事件中断CPU,来通知CPU对其进行相应的处理,进而按照设定进行下一组采集。

滤波后的信号输出利用3通道进行传输进入D/A等输出,因此要对DMA通道2和通道3进行初始化配置。

2.数字信号FIR滤波

进行信号滤波也就是对序列的卷积进行计算,实验的噪声信号是有限长信号,选取FIR数字滤波器。

语音信号由外部输入,由此可以得到滤波器的输出为y[k]=h[k]*x[k],可采用重叠相加法计算卷积。

将输入的长序列分解为短序列,分别与单位脉冲响应进行卷积,每进行完一段操作计算结果中后N-1个数据保留在一个缓冲区,与下一段结果重叠相加。

语音信号是低频信号,因此可以用MATLAB来设计FIR低通滤波器。

3.自适应消除噪声滤波器

最小均方(LMS,least-mean-square)算法是构建自适应消噪滤波器的主要算法。

假设原始输入为:

主信号x(n)=s(n)+vo(n);vo(n)是加性零均值Gauss白噪声。

本地参考信号为[v1(n)…vm(n)],参考输入为[v1(n)…vm(n)],[v1(n)…vm(n)]与v0(n)相关与信号s(n)不相关,可用原理图表示如下:

LMS算法流程图如下:

LMS算法:

基于最速下降法的最小均方误差算法的迭代公式如下:

e(n)=d(n)-XT(n)W(n)

W(n+1)=W(n)+2ue(n)X(n)

将以上两式联立,得:

W(n)=W(n)+2u[X(n)d(n)-X(n)XT(n)W(n)]

其中:

W(n)是自适应滤波器在时刻n的矢量,x(n)为时刻n输入信号矢量,d(n)为期望输出值,e(n)是误差信号,L是自适应滤波器的长度(步长因子)。

LMS算法熟练的条件为:

0

LMS对于每输入一个样本,只需对上式中的两个乘法与两个加法运算,该算法易于用实时系统实现。

LMS算法的原理图可以简单表示如下:

4.回声的产生

回声实际上就是自己的声音泄露到自己的接收途径中。

在任何一个通讯网络中,至少包括两个节点。

从每一个节点看来,每个呼叫都包括两个语音路径:

  发送路径——本地拾取声音,远端回放声音。

也就是说从呼叫方的嘴巴传送到接收方的耳朵中。

接收路径——远端拾取声音,本地回放声音。

也就是接收方在接收到会话时创建接受路径,发送方的声音由接收方的耳朵接听到。

我们知道,回声是由于自己的发言声音泄漏到自己的接收回路中。

一般来说从发送端泄漏到接收端而引起的回声现象,可以有两个产生途径:

线路回声——通讯回路中节点设备对发送/接收信号的耦合所产生的回声。

声回声——通过空气作为传播媒介,由Speaker直接耦合到MIC所产生的回声影响。

回声的主要两个属性:

音量和延迟:

回声和原始信号如果相差50ms以下的时候,人耳一般不会感受到回声。

而是感觉原始信号被增强了。

另外,在混响时间较长的大会场。

如果系统泄漏的回声信号低于原始信号30db以上的话,而且延时小于80ms的时候。

回声信号一般会被混响声所淹没。

用户是听不到回声的感觉。

所以实验里可以用回声的原理计算响应的延时以达到实验效果。

实验中的回声原理可用如下原理图来表示:

由此可见,实验中的语音回声噪声消除可以采用自适应滤波器来设计。

5.回声消除器

回声的消除可以采用LMS算法。

自适应合成回声,并在有干扰的情况下消除回声。

自适应滤波器是FIR横向滤波器,可以根据输出自动修改滤波器的权系数,从而逼近未知系统回声通道。

算法的实现要基于TMS320C5402DSP芯片和CCS系统的C语言。

其原理可以理解为如下:

 

三.设计方案说明

1.噪声信号的产生

噪声信号利用MATLAB产生一个信号,由于声音信号属于低频段,所以采用FIR低通滤波器来设计。

设计过程如下:

利用FDATOOL来设计低通滤波器,所取的设计参数如下:

所得的函数幅度响应图如下:

利用MATLAB功能,生成.c文件:

自定义的头文件程序如下:

/*

*FilterCoefficients(CSource)generatedbytheFilterDesignandAnalysisTool

*

*GeneratedbyMATLAB(R)7.2andtheSignalProcessingToolbox6.5.

*

*Generatedon:

20-Jan-201011:

44:

28

*

*/

/*

*Discrete-TimeFIRFilter(real)

*-------------------------------

*FilterStructure:

Direct-FormFIR

*FilterLength:

14

*Stable:

Yes

*LinearPhase:

Yes(Type2)

*

*ImplementationCost

*NumberofMultipliers:

14

*NumberofAdders:

13

*NumberofStates:

13

*MultPerInputSample:

14

*AddPerInputSample:

13

*/

/*GeneraltypeconversionforMATLABgeneratedC-code*/

#include"tmwtypes.h"

/*

*Expectedpathtotmwtypes.h

*E:

\MATLAB2006\extern\include\tmwtypes.h

*/

constintBL=14;

constreal64_TB[14]={

-0.03493880541243,-0.03194131145691,-0.01304898413846,0.0391757773104,

0.1163962365133,0.1944567316798,0.2436323378858,0.2436323378858,

0.1944567316798,0.1163962365133,0.0391757773104,-0.01304898413846,

.0319********

};

2.回声信号的产生:

回声信号也就是信号有了延迟。

麦克输入的信号在接收时有了泄露,最终输出的信号也就是原来的语音信号也语音信号的延时衰减的叠加。

回声通道的传输函数可以表示为:

S为衰减,M为延迟点数。

听到的回波是混合信号,此时不仅能听到自己的声音,也能听到几个衰减后叠加的回声。

回波产生程序如下:

while(!

MCBSP_RRDY(HANDSET_CODEC)){};//codec句柄如未准备好则等待

dk=*(volatileu16*)DRR1_ADDR(HANDSET_CODEC);//从ADC读数

bf[i]=dk;//放入缓冲区

if(i==10000)

i=0;

*(volatileu16*)DXR1_ADDR(HANDSET_CODEC)=dk+bf[i+1]/2;//延迟+衰减

3.信号的滤波

信号的滤波主要是利用LMS的算法实现对已合成信号的滤波,算法的效率与滤波的长度有关,可以改变FIR滤波器的阶数来调节滤波器的长度。

由C语言实现LMS算法的C语言程序如下所示:

doublelms(doublew[],doublex[],doubledk,doubleek)//移植到CCS中的lms算法

{

s16i;

doubleuek,yk;

yk=0;

for(i=0;i

{

yk=yk+w[i]*x[i];

}

ek=dk-yk;

uek=2*mu*ek;

for(i=0;i

{

w[i]=w[i]+uek*x[i];

}

return(ek);

}

替换原有的LMS算法的C语言实现程序,更换为CCS的diplib库中的函数shortdlms(PARAM)取代自定的lms()函数,并且用dsplib库里的函数shortfir(PARAM)产生回声通道的输出信号,该输出信号作为自适应滤波器的理想输出信号,对之进行逼近进而得到预定结果。

Dsplib库中的dlsm函数和fir函数的子程序:

Dlsm.h的程序如下,路径:

C:

\ti\c5400\dsplib\EXAMPLES\DLMS

//*****************************************************************************

//Filename:

dlms_t.c

//Version:

0.01

//Description:

testfordlmsroutine

//*****************************************************************************

#include

#include

#include

#include"test.h"

shorti;

shorteflagr=PASS;

shorteflagh=PASS;

voidmain(void)

{

/*clear*/

for(i=0;i

for(i=0;i

for(i=0;i

/*compute*/

dlms(x,h,r,&dp,des,STEP,NH,NX);

/*test*/

eflagr=test(r,rtest,NX,MAXERROR);//forr

eflagh=test(h,htest,NH,MAXERROR);//forh

if(eflagr!

=PASS)

{

exit(-1);

}

if(eflagh!

=PASS)

{

exit(-1);

}

return;

}

FIR.h的程序如下,路径:

C:

\ti\c5400\dsplib\EXAMPLES\FIR

//*****************************************************************************

//Filename:

fir_t.c

//Version:

0.01

//Description:

testforfirroutine

//*****************************************************************************

#include

#include

#include

#include"test.h"

shorti;

shorteflag1=PASS;

shorteflag2=PASS;

DATA*dbptr=&db[0];

voidmain(void)

{

/*1.Testforsingle-buffer*/

/*clear*/

for(i=0;i

for(i=0;i

/*compute*/

fir(x,h,r,&dbptr,NH,NX);

/*test*/

eflag1=test(r,rtest,NX,MAXERROR);

/*2.Testsfordual-buffer*/

/*clear*/

for(i=0;i

for(i=0;i

dbptr=&db[0];

/*compute*/

if(NX>=4)

{

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);

if(eflag1!

=PASS)

{

exit(-1);

}

if(eflag2!

=PASS)

{

exit(-2);

}

return;

}

 

四.程序设计、调试与结果分析

程序设计

1.程序流程

先初始化FIR延迟输出数组dbuffer_h[]、FIR输出数组、自适应滤波器系数矢量coff_w[]和自适应滤波器的输出数组out_w[],再进行DSK板的初始化。

然后采集输入的语音信号,根据模式的不同进行不同的处理以输出不同的信号来进行效果的比较:

模式0:

mode=0时全通,不做任何处理直接输出;

模式1:

mode=1时信号通过FIR滤波器后产生回声,输出的信号为原来信号与噪声信号的混叠;

模式2:

mode=2时用自适应滤波器逼近FIR滤波器以使之输出近似的信号,用信号通过两个系统产生的信号之差(即剩余回声)来调整自适应滤波器的系数,使剩余回声逐渐收敛于0。

此时的输出为滤去噪声后的信号。

程序流程可以表示如下:

2.最终程序

延时的子程序如下:

voiddelay(void)

{

longintj;

for(j=0;j<100000;j++)

asm("_nop");

}

更改j循环的上限值即可以加大延时。

程序中使用dsplib库函数dlms()和fir()时要分配参数的地址,因此要手动修改CMD文件。

在编完主程序后,因为引入了新的数据和变量必须在工程文件中添加一个的头文件stem.h,将这些变量放入指定了内存中。

同时还修改5024.cmd文件。

添加头文件stem.h:

/*stem.h*/

#defineLENGTH_W10//LMS滤波器长度,

#defineLENGTH_H10//自适应滤波器长度

#defineSTEP100//自适应步长

#defineLENGTH_IN5//输入缓冲数组x[]长度

DATAx[LENGTH_IN];//声明输入缓冲数组

DATAout_h[LENGTH_IN];//FIR滤波器即回声消除通道输出

DATAout_w[LENGTH_IN];//自适应滤波器输出

DATAe[LENGTH_IN];

#pragmaDATA_SECTION(coff_w,".coffw")//将数组coff_w指定到内存段.coffw

DATAcoff_w[LENGTH_W];//声明自适应滤波器系数矢量

#pragmaDATA_SECTION(coff_h,".coffh")//将数组coff_h指定到内存段.coffh

DATAcoff_h[LENGTH_H]={790,2661,4629,6919,8210,8210,6919,4629,2661,790};//定义FIR滤波器的系数即回声通道的权系数

#pragmaDATA_SECTION(dbuffer_h,".dbufferh")//将数组dbuffer_h指定到内存段.dbufferh

DATAdbuffer_h[LENGTH_IN];//该数组存放FIR上一时刻的输出

#pragmaDATA_SECTION(dbuffer_w,".dbufferw")//将数组指定到内存段.dbufferw

DATAdbuffer_w[LENGTH_IN];//该数组存放自适应滤波器上一时刻输出

修改5402.cmd文件:

MEMORY

{

PAGE0:

VECS:

origin=0080h,length=0080h/*InternalProgramRAM*/

PRAM:

origin=7600h,length=8000h/*InternalProgramRAM*/

PAGE1:

SCRATCH:

origin=0060h,length=0020h/*ScratchPadDataRAM*/

DMARAM:

origin=0C00h,length=0300h/*DMAbuffer*/

DATA:

origin=1100h,length=0080h/*InternalDataRAM*/

STACK:

origin=1180h,length=0560h/*StackMemorySpace*/

INRAM:

origin=1900h,length=0100h/*InternalDataRAM*/

HPRAM0:

origin=1A00h,length=0002h/*HPImemoryaccessiblebyHostandDSP*/

HPRAM1:

origin=1A02h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/

HPRAM2:

origin=1C82h,length=0280h/*HPImemoryaccessiblebyHostandDSP*/

EXRAM:

origin=1F10h,length=4000h/*ExternalDataRAM*/

INT_DM_RAM:

origin=6000h,length=4000h//添加部分,开辟新空间

}

/*****************************************************************************/

/*DSPMemoryAllocation*/

/*****************************************************************************/

SEC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

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

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