matlab课设基于RLS算法多麦克风降噪.docx
- 文档编号:11078204
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:20
- 大小:264.44KB
matlab课设基于RLS算法多麦克风降噪.docx
《matlab课设基于RLS算法多麦克风降噪.docx》由会员分享,可在线阅读,更多相关《matlab课设基于RLS算法多麦克风降噪.docx(20页珍藏版)》请在冰豆网上搜索。
matlab课设基于RLS算法多麦克风降噪
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
基于RLS算法的多麦克风降噪
初始条件:
电脑,matlab
要求完成的主要任务:
(1)阅读参考资料和文献,明晰算法的计算过程,理解RLS算法基本过程;
(2)主麦克风录制的语音信号是RLSprimsp.wav,参考麦克风录制的参考噪声是RLSrefns.wav,用matlab指令读取;
(3)根据算法编写相应的matlab程序;
(4)算法仿真收敛以后,得到增强的语音信号;
(5)用matlab指令回放增强后的语音信号;
(6)分别对增强前后的语音信号作频谱分析。
时间安排:
6月15日到6月22日理论设计与仿真
6月23日到6月25日撰写报告
6月26日答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要3
Abstract3
1设计任务3
2设计要求3
3基本原理3
3.1自适应干扰抵消原理3
3.2RLS算法基本原理3
4方案论证3
5功能设计3
5.1读取语音文件3
5.2算法实现3
5.3提取语音信号3
6信号的获取3
7调试程序3
7.1环境噪声中的语音波形分析3
7.2RLS算法的滤波效果:
3
7.3分别对增强前后的语音信号做频谱分析3
8心得体会3
9参考文献3
附录:
程序清单3
摘要
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
自适应滤波器以输入和输出信号的统计特性的估计为依据,采取特定算法自动地调整滤波器系数,使其达到最佳滤波特性的一种算法或装置。
自适应滤波器可以是连续域的或是离散域的。
离散域自适应滤波器由一组抽头延迟线、可变加权系数和自动调整系数的机构组成。
附图表示一个离散域自适应滤波器用于模拟未知离散系统的信号流图。
自适应滤波器对输入信号序列x(n)的每一个样值,按特定的算法,更新、调整加权系数,使输出信号序列y(n)与期望输出信号序列d(n)相比较的均方误差为最小,即输出信号序列y(n)逼近期望信号序列d(n)。
本次课程设计正是要求使用具有强大运算能力的MATLAB软件,运用自适应滤波中的RLS算法实现麦克风降噪。
旨在培养我们使用计算机处理庞大的数据的能力和熟悉MATLAB在信息技术中的应用。
关键词:
MATLAB,自适应滤波,RLS算法,麦克风降噪
Abstract
MATLAB isthemainface ofscientificcomputing, visualizationandinteractiveprogram designofhigh-tech releasedbythe AmericancompanyMathWorks computingenvironment. The numericalanalysis, matrix computationandvisualization, aswellasthemodelingandSimulation ofnonlineardynamicsystems andmanyother powerfulfunction integratedin aneasy-to-use Windowsenvironment, scientific research, engineeringdesignand mustprovide a comprehensivesolutionfor manyscientificand effectivenumerical computational domain, and getridofthetraditional noninteractiveprogramminglanguage toalargeextent (suchasC,Fortran) ineditmode, representstheadvancedlevel oftheinternational scientific calculationsoftware.
Adaptive filterto estimatethe statisticalpropertiesof theinputandoutput signal asthebasis, the algorithmcanautomaticallyadjustthefiltercoefficients, analgorithm or device toachievethebestfilteringcharacteristics. Adaptiveilter canbeontinuous or discretedomain domain. Compositionofadaptive filter indiscretedomainconsistsofasetof tappeddelayline, variableweightingcoefficientandautomatic adjustmentcoefficient mechanism. Thefigureshowsadiscrete domainadaptivefilterisusedinthe signalsimulation ofunknowndiscrete-time system flow chart. Adaptive filtertothe inputsignalsequence x (n) ofeach sample, accordingto certainalgorithm, update, adjustthe weightingoefficient, theoutputsignalsequencey (n) andtheexpectedoutputsignal sequenceD (n)meansquareerror compared toaminimum, i.e.theoutputsignalsequencey (n) approximation expectation thesignal sequenceofD(n).
Thecurriculumdesign isa powerfulcomputationability requirementsoftheuseof MATLABsoftware, usingRLS adaptivefilteringalgorithm torealize themicrophone noisereduction. Totrain ourabilitytouse computer processingofhuge dataand familiarwiththeapplicationofMATLAB ininformationtechnology.
Keywords:
MATLAB, adaptivefiltering, RLSalgorithm, themicrophone noisereduction
1设计任务
给定主麦克风录制的受噪声污染的语音信号和参考麦克风录制的噪声,实现语音增强的目标,得到清晰的语音信号。
2设计要求
(1)阅读参考资料和文献,明晰算法的计算过程,理解RLS算法基本过程;
(2)主麦克风录制的语音信号是RLSprimsp.wav,参考麦克风录制的参考噪声是RLSrefns.wav,用matlab指令读取;
(3)根据算法编写相应的MATLAB程序;
(4)算法仿真收敛以后,得到增强的语音信号;
(5)用matlab指令回放增强后的语音信号;
(6)分别对增强前后的语音信号作频谱分析。
3基本原理
3.1自适应干扰抵消原理
自适应滤波器在实际应用中,由于没有充足的信息来设计固定系数的数字滤波器,或者设计规则会在滤波器正常运行时改变,因此我们需要研究自适应滤波器。
凡是需要处理未知统计环境下运算结果所产生的信号或需要处理非平稳信号时,自适应滤波器可以提供一种吸引人的解决方法,而且其性能通常远优于用常方法设计的固定滤波器。
此外,自适应滤波器还能提供非自适应方法所不可能提供的新的信号处理能力。
自适应噪声抵消技术是自适应信号处理的一个应用分支,其主要理论和框架在1975年提出,经过三十多年的丰富和扩充,现在已经应用到了很多领域,比如车载免提通话设备,房间或无线通讯中的回声抵消在母体上检测胎儿心音,机载电子干扰机收发隔离等,都是用自适应干扰抵消的办法消除混入接收信号中的其他声音信号。
如图所示的是自适应干扰抵消器的基本结构,它有着很广泛的应用。
期望响应
是信号和噪声之和,即
,自适应处理器的输入是与
相关的另一个噪声
。
当
与
不相关时,自适应处理器将调整自己的参数,以力图使
成为
的最佳估计
。
这样,
将逼近信号
,且其均方值
为最小。
噪声
就得到了一定程度的抵消。
图3-1自适应干扰抵消原理图
3.2RLS算法基本原理
所谓自适应实现是指利用前一时刻获得的滤波器参数,根据估计误差自动调节现时刻的参数,使得某个代价函数达到最小,从而实现最优滤波。
(公式1)
下降算法:
最广泛使用的自适应算法包括自适应梯度算法(LMS)、自适应高斯-牛顿算法(RLS)。
RLS算法:
(RecursiveLeast-Squares),递归最小二乘算法。
它是利用在已知n-1时滤波器抽头权系数的情况下,通过简单的更新,求出n时刻的滤波器抽头权系数。
代价函数:
使用指数加权的误差平方和
(公式2)
(0<λ<1,称为遗忘因子)引入遗忘因子作用是离n时刻近的误差附较大权重,离n时刻远的误差赋较小权重,确保在过去某一段时间的观测数据被“遗忘”,从而使滤波器可以工作在非平稳状态下。
估计误差定义:
(公式3)
(公式4)
可取滤波器的实际输入d*(i)作为期望响应d(i)。
将误差代入代价函数得到加权误差平方和的完整表达式:
(公式5)
抽头权向量取的是n时刻的w(n)而不是i时刻的w(i)。
i<=n时刻,
(公式6)
(公式7)
故代价函数
比
更合理。
为了使代价函数取得最小值,可通过对权向量求导:
(公式8)
解得
其中
(公式9)
(公式10)
由此可见指数加权最小二乘法的解转化为Wiener滤波器的形式:
下面研究它的自适应更新过程:
由公式9可得
令
、
、
、
原式可化为
由矩阵求逆引理得
令
,则
,其中k(n)为增益向量。
(公式11)
又由
式中
图3-2指数加权的RLS算法功能示意图
4方案论证
方案一:
理解RLS算法的基本原理,自行编写RLS算法程序块,RLS算法可以理解为将输出反馈给滤波器来调整相关参数,达到校正误差的目的。
算法实现代码如下所示:
Worder=32。
%滤波器阶数
lambda=1。
%设置遗忘因子
Delta=0.001。
p=(1/Delta)*eye(Worder,Worder)。
w=zeros(Worder,1)。
output=primary。
%主语音输出
loopsize=max(size(primary))。
fori=1+Worder:
loopsize %写RLS算法公式
z=primary(i)-w'*(fref(i-Worder+1:
i))'。
n2=fref(i-Worder+1:
i)'。
k=(1/lambda)*p*n2。
K=k/(1+n2'*k)。
w=w+K*z。
p0=K*n2'。
p=(p-p0*p)/lambda。
output(i-Worder)=z。
disp(i)。
end。
方案二:
直接调用MATLAB自带的RLS算法,此设计直接调用了MATLAB软件里面的RLS算法函数。
1、调用的RLS算法函数设计程序如下:
Hadapt=adaptfilt.rls(M,lam,P0,w0,Zi);
Hadapt.ResetBeforeFiltering='off';
[y,e]=filter(Hadapt,fref,primary);
2、初始化如下:
M=32; %Filterorder
lam=L; %Exponentialweightingfactor
delta=0.1; %Initialinputcovarianceestimate
w0=zeros(M,1); %Initialtapweightvector
P0=(1/delta)*eye(M,M); %InitialsettingforthePmatrix
Zi=zeros(M-1,1); %FIRfilterinitialstates
L指滤波器的长度,必须为正数,默认值为10;lambda指RLS的遗忘因子,为标量,取值范围[0,1],默认值为1;invcov指输入矩阵的协方差的逆,为使滤波器性能最佳,常将其初始化为正定矩阵;coeffs指初始化滤波器系数向量,长度必须为滤波器的阶数,默认下所有元素全零;states指矢量自适应滤波器的初始过滤状态,长度必须为阶数减1,默认下所有元素全零。
该方案运用现成的RLS算法函数,操作简单,易实现,但不能深入了解RLS算法的根本原理,不利于RLS算法的掌握。
直接调用库的RLS算法函数的设计方法比较简单,直接用Hadapt函数调用RLS数字滤波器就可以滤波输出。
而直接编写RLS算法公式的设计方法就比较难,设计时要先要弄懂基本的RLS算法,公式的推导,每一步的含义等,好的是可以掌握好MATLAB指令,如何去编写公式也是难点,此方法的设计过程当中就参考了一些数字滤波器的设计资料,还有矩阵的写法与匹配问题,需要自己分析解决一些问题。
为了加深对MATLAB的了解,我们选择方案一。
5功能设计
5.1读取语音文件
主麦克风录制的语音信号是RLSprimsp.wav,参考麦克风录制的参考噪声是RLSrefns.wav,都是.wav格式,用waveread指令读取音频信号;
指令写为如下:
primary=wavread('RLSprimsp.wav')。
primary=primary'。
ref=wavread('RLSrefns.wav')。
fref=fref'。
5.2算法实现
RLS算法的收敛特性较LMS算法优越,但相应的复杂度也要高许多,考虑到收敛时间的影响,从起始时间到收敛时间经滤波器处理得到到输出误差依然很大,故直接将前32项去掉,先通过两输入作差得到预期值,再将所有预期值与对应时刻的实际输出值作差求平方,将这些平方值相加可以得到一个变量为W的函数,取W是函数的值最小。
另外,显然距离n最近的量与Y(n)最接近,引入遗忘因子使得从n-1到0,相关程度逐渐减小。
最后求得相关偏差,反馈给滤波器以矫正输出,达到减小误差的目的。
%初始化
Worder=32。
%滤波器阶数
Delta=0.001。
p=(1/Delta)*eye(Worder,Worder)。
w=zeros(Worder,1)。
output=primary。
%主语音输出
loopsize=max(size(primary))。
fori=1+Worder:
loopsize%写RLS算法公式
z=primary(i)-w'*(fref(i-Worder+1:
i))'。
n2=fref(i-Worder+1:
i)'。
k=p*n2。
K=k/(1+n2'*k)。
w=w+K*z。
p0=K*n2'。
p=(p-p0*p)。
output(i-Worder)=z。
disp(i)。
end。
5.3提取语音信号
用MATLAB中的wavread指令分别读取被噪声污染后的语音文件RLSprimsp.wav和噪声文件RLSrefns.wav后,进行RLS算法处理,滤除噪声后,得到语音文件,先由plot指令绘出语音文件波形,再通过MATLAB中的sound命令播放语音文件。
代码如下所示:
figure。
%作图
subplot(2,3,1)。
plot(primary)。
%画主麦克风语音波形
title('primaryinput')。
subplot(2,3,2)。
plot(fref)。
%画参考麦克风语音波形
title('frefnoise')。
subplot(2,3,3)。
plot(output)。
%画降噪后的语音波形
title('output')。
wavwrite(output,fs,'lym0')。
%生成降噪后的语音波形
sound(output,fs,bits)。
6信号的获取
本次课程设计对我们自行处理和灵活运用的能力提出了很高的要求。
首先,老师没有给我们提供设计中所需要用到的语音信号;其次,怎样录制噪声和被噪声污染的语音信号也是一个很现实的问题。
开始接触这个课程设计这些问题就摆在了我们的面前,经过一段时间我发现自己并不能够很好的解决这些问题。
最后在老师的指导下我确定了获取被噪声污染的信号和噪声信号的方法。
本次设计我算选用的噪声信号是风扇转动时所发出的声音信号,而语音信号怎是自己用windows自带的录音设备录下的声音信号。
由于这些信号特别容易受到外界环境的影响,所以在录音时要找一个相对安静的的环境。
我首先录的是噪声信号,就是在一个安静的环境中打开风扇,然后用windows录音器录下此时风扇转动的声音,保存下来记做RLSrefns.wav。
然后再录带有噪声的语音信号,同样在录制噪声信号之后很短的一段时间之后用windows录音设备录下在几乎相似的环境下人的声音加风扇的声音信号,这样就得到了带有噪声的语音信号了。
录好之后将它命名为RLSprimsp.wav。
7调试程序
7.1环境噪声中的语音波形分析
(1)麦克风主噪音RLSprimsp.wav信号波形如下:
图7-1麦克风主噪音波形图
(2)参考噪音RLSrefns.wav信号波形如下:
图7-2参考噪音波形图
7.2RLS算法的滤波效果:
算法仿真收敛以后,得到增强的语音信号
图7-3增强的语音信号波形图
7.3分别对增强前后的语音信号做频谱分析
对于时域信号,我们往往难以找出其中蕴含的规律,仅从时域角度完成特征信号的提取、噪声信号的滤除和信号的分割不仅十分困难,有时甚至根本无法实现,这时如果从频域角度来看,问题就变得简单许多,首先将时域信号经傅里叶变换得到对应频域信号。
傅里叶变换,即将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。
在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。
对于离散信号,通常采用离散福利叶变换,为提高计算机的运算速度又衍生出快速离散傅里叶变换,接下来频谱信号的绘制即是直接调用MATLAB中指令fft先得到对应的频谱信号,再通过plot命令得到的。
(1)对麦克风主噪音RLSprimsp.wav信号进行频谱分析:
频谱图如下:
图7-4麦克风主语音输入频谱
(2)对参考噪音RLSrefns.wav信号进行频谱分析:
频谱图如下:
图7-5参考麦克风语音输入频谱
(3)对降噪后的输出语音lym0.wav进行频谱分析
频谱图如下:
图7-6降噪后语音输出频谱图
8心得体会
在这短短的一周内从开始的一头雾水,到自己看书学习,到同学讨论,再进行整个题目的理论分析和计算,参考课程上的代码,写出自己的代码。
我们也明白了学无止尽的道理,在我们所查的很多参考书中,很多知识是我们从没有接触过的,我们对它的了解还仅限于皮毛,对它的很多功能以及函数还不是很了解,所以在这个学习的过程中我们穿越在知识的海洋中,一点一点吸取着它的知识。
在MATLAB编程中需要很多的参考书,要尽量多的熟悉matlab自带的函数及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。
这一点对程序非常有帮助,可以使程序简单,运行效率高,可以节省很多时间。
本次课设中用了很多MATLAB自带的函数,使程序变得很简单。
这次的课程设计结束了,虽然开始的时候不知道从何入手,该怎么样达到要求,完成设计,但是经过一步步的摸索和总结,最后总算完成了这次任务。
由于对于理论知识学习不够扎实,便重拾教材与实验手册,对知识系统而全面进行了梳理,遇到难处先是苦思冥想再向同学请教,终于熟练掌握了基本理论知识,而且领悟诸多平时学习难以理解掌握的较难知识,学会了如何思考的思维方式,找到了设计的方向。
通过此次学科课程设计,我掌握了自适应算法的一些基本知识,加强了我对MATLAB软件的应用能力,提高了运用RLS算法进行滤波器设计的基本能力。
提高自己的基础理论知识、基本动手能力,提高人才培养的基本素质,并帮助我们掌握基本的文献检索和文献阅读的方法,同时提高我们正确地撰写论文的基本能力。
当然,经过此次RLS算法多麦克风语音降噪课程设计,我也发现了自己的很多不足。
但是通过自己的动手动脑,既增加了知识,又给了我专业知识以及专业技能上的提升,我也会更加努力,认真学习,争取在以后的课程中做得更好。
9参考文献
[1]陈怀琛.MATLAB及在电子信息课程中的应用.西安:
西安电子科技大学出版社,2000
[2]胡广书.数字信号处理—理论、算法与实现.北京:
清华大学出版社,2003
[3]何振亚.自适应信号处理.科学出版社,2002
[4]安颖,侯国强.自适应滤波算法研究与DSP实现.现代电子技术,2007
[5]王洪元主编.MATLAB语言以及在电子信息工程中的应用.清华大学出版社,2004
[6]郑宝玉.自适应滤波器原理[M].北京:
电子工业出版社,2006
附录:
程序清单
primary=wavread('RLSprimsp.wav')。
%读入主麦克风语音信号
primary=primary'。
fref=wavread('RLSrefns.wav')。
%读入参考语音信号
fref=fref'。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 基于 RLS 算法 麦克风
![提示](https://static.bdocx.com/images/bang_tan.gif)