《信息处理课群综合训练与设计》

课程设计任务书

学生姓名: 专业班级:

指导教师: 工作单位:

题 目: 基于RLS算法的多麦克风降噪

设计任务:

给定主麦克风录制的受噪声污染的语音信号和参考麦克风录制的噪声,实现语音增强的目标,得到清晰的语音信号。

设计要求:

(1)阅读参考资料和文献,明晰算法的计算过程,理解RLS算法基本过程;

(2)主麦克风录制的语音信号是RLSprimsp.wav,参考麦克风录制的参考噪声是RLSrefns.wav,用matlab指令读取;

(3)根据算法编写相应的MATLAB程序;

(4)算法仿真收敛以后,得到增强的语音信号;

(5)用matlab指令回放增强后的语音信号;

(6)分别对增强前后的语音信号作频谱分析。

指导教师签名: 年 月 日

系主任(或责任教师)签名: 年 月 日

摘 要

MATLAB功能强大、简单易学、编程效率高,可以很方便地进行信号分析、处理和设计。自适应滤波器经过几十年的发展和完善,已逐渐成为人们常用的语音去噪技术,而MATLAB的出现又为其提供了更为方便快捷的方法来对语音信号进行去噪处理。而递推最小二乘(RLS,Recusive Least-Squares)算法是其中一种常用的线性自适应滤波算法。

标准RLS算法是通过输入数据的相关矩阵来完成权向量的计算,矩阵来完成最小二乘向量的计算。QR-RLS算法则是基于脉冲响应数字滤波器(FIR),其实现是通过直接处理经QR分解的输入数据矩阵来完成权向量的计算,在数值上比标准的RLS算法更稳定。MATLAB的工具箱中包含RLS自适应滤波器的两个应用函数。

关键词:MATLAB,自适应滤波,RLS算法

Abstract

MATLAB is powerful, easily learned, programming, and high-efficiency.It can be analyse, processed and design easily. After decades of development and perfection, adaptive filter has gradually commonly used for speech sound denoising technology, and the emergence of MATLAB has provided a more convenient way to deal with the noise speech signal. Meanwhile,the recursive Least Squares (RLS, Recusive further - Squares) algorithm is one of the commonly used linear adaptive filter algorithm.

Through dealing with the input data, Standard matrix RLS algorithm can complete the calculation of weight vector,and the matrix is to complete the least squares vector calculation. QR - RLS algorithm is based on impulse response (FIR) digital filter, its implementation is through direct processing by the input data matrix QR decomposition to complete the calculation of weight vector, the RLS algorithm is more stable than the standard value. MATLAB toolbox contains two applications of RLS adaptive filter function.

Key words: MATLAB, adaptive filtering, RLS algorithm,

目录

摘 要1

Abstract2

目录3

1 基本原理4

1.1 基于RLS算法的自适应滤波器4

1.2 RLS算法原理4

1.3 RLS算法的步骤7

2 原始语音信号采集8

2.1 语音信号的采样理论依据8

2.2 语音信号的分析8

3、基于RLS算法的多麦克风降噪的方法论证10

3.1 自行编写BLS算法程序块10

3.2 直调用的RLS算法函数设计程序11

4 提取语音信号11

5 调试程序12

5.1环境噪声中的语音波形分析12

5.2 RLS算法的滤波效果:14

5.3分别对增强前后的语音信号做频谱分析15

心得体会16

参考文献17

附录:程序清单18

1 基本原理

1.1 基于RLS算法的自适应滤波器

所谓自适应实现是指利用前一时刻获得的滤波器参数,根据估计误差自动调节现时刻的参数,使得某个代价函数达到最小,从而实现最优滤波。

如图所示的是自适应干扰抵消器的基本结构,它有着很广泛的应用。期望响应是信号和噪声之和,即,自适应处理器的输入是与相关的另一个噪声。当与不相关时,自适应处理器将调整自己的参数,以力图使成为的最佳估计。这样,将逼近信号,且其均方值为最小。噪声就得到了一定程度的抵消

+

自适应处理器

图1 自适应干扰抵消原理图

1.2 RLS算法原理

RLS算法的收敛特性较LMS算法优越,但相应的复杂度也要高许多,考虑到收敛时间的影响,从起始时间到收敛时间经滤波器处理得到到输出误差依然很大,故直接将前32项去掉,先通过两输入作差得到预期值,再将所有预期值与对应时刻的实际输出值作差求平方,将这些平方值相加可以得到一个变量为W的函数,取W是函数的值最小。另外,显然距离n最近的量与Y(n)最接近,引入遗忘因子使得从n-1到0,相关程度逐渐减小。最后求得相关偏差,反馈给滤波器以矫正输出,达到减小误差的目的。

RLS算法的关键是用二乘方的时间平均的最小化准则取代最小均方准则,并按时间迭代计算。具体来说,是要对初始时刻到当前时刻所有误差的平方进行平均并使其最小化,即使得误差的平方和最小。

使用指数加权的误差平方和,其代价函数为:

(0=fmax,则采样后的数字信号完整地保留了原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍,采样定理又称奈奎斯特定理。

2.2 语音信号的分析

在MATLAB软件平台下,利用wavread函数对语音信号进行采集,记住采样频率和采样点数,wavread函数调用格式如下:

y=wavread(file)%读取file所规定的wav文件,返回采样值放在向量y中

[y,fs,bits]=wavread(file)%采样值放在向量y中,fs表示采样频率,bits表示采样位数

对语音信号RLSprimsp.wav进行采样,程序如下:

[y,fs,nbits]=wavread(‘RLSprimsp.wav’) ;

画出语音信号的时域波形,在对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:

参数为变换的时域序列向量,N是DFT变换区间长度,当N大于的长度2,fft函数自动在后面补零。当N小于的长度时,fft函数计算的前N个元素。利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。程序如下:

[y,fs,nbits]=wavread(‘RLSprimsp.wav’) %语音信号的采集

sound(y,fs,nbits); %语音信号的播放

n=length(y);

Y=fft(y,n); %快速傅里叶变换

figure;

subplot(2,1,1);

plot(y);

title(’原始信号波形’,’fontweight’,’bold’);

grid;

subplot(2,1,2);

plot(abs(Y));

title(’原始信号频谱’,’fontweight’,’bold’);

axis([0 0 4000]);

grid;

程序结果如下图:

图3 原始语音信号波形、频谱图

3、基于RLS算法的多麦克风降噪的方法论证

3.1 自行编写BLS算法程序块

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

for i=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;

3.2 直调用的RLS算法函数设计程序

Hadapt = adaptfilt.rls(M,lam,P0,w0,Zi);

Hadapt.ResetBeforeFiltering = off;

[y,e] = filter(Hadapt,fref,primary);

MATLAB自带的RLS算法adaptfilt.rls(L,lambda,invcov,coeffs,states),L指滤波器的长度,必须为正数,默认值为10;lambda指RLS的遗忘因子,为标量,取值范围 [0 1] ,默认值为1;invcov指输入矩阵的协方差的逆,为使滤波器性能最佳,常将其初始化为正定矩阵;coeffs指初始化滤波器系数向量,长度必须为滤波器的阶数,默认下所有元素全零;states指矢量自适应滤波器的初始过滤状态,长度必须为阶数减1,默认下所有元素全零。 该方案运用现成的RLS算法函数,操作简单,易实现,但不能深入了解RLS算法的根本原理,不利于RLS算法的掌握。所以本文选用方案一。

4 提取语音信号

用MATLAB中的wavread指令分别读取被噪声污染后的语音文件RLSprimsp.wav和噪声文件RLSrefns.wav后,进行RLS算法处理,滤除噪声后,得到语音文件,先由plot指令绘出语音文件波形,再通过MATLAB中的sound命令播放语音文件。代码如下所示:

figure; %作图

subplot(2,3,1);

plot(primary); %画主麦克风语音波形

title(primary input);

subplot(2,3,2);

plot(fref); %画参考麦克风语音波形

title(fref noise);

subplot(2,3,3);

plot(output); %画降噪后的语音波形

title(output);

wavwrite(output,fs,lym0); %生成降噪后的语音波形

sound(output,fs,bits);

5 调试程序

5.1环境噪声中的语音波形分析

(1)麦克风主噪音RLSprimsp.wav信号波形如下:

图4 麦克风主噪音波形图

(2)参考噪音RLSrefns.wav 信号波形如下:

图5 参考噪音波形图

5.2 RLS算法的滤波效果:

算法仿真收敛以后,得到增强的语音信号 如下图所示:

图6 增强的语音信号波形图

5.3分别对增强前后的语音信号做频谱分析

对于时域信号,我们往往难以找出其中蕴含的规律,仅从时域角度完成特征信号的提取、噪声信号的滤除和信号的分割不仅十分困难,有时甚至根本无法实现,这时如果从频域角度来看,问题就变得简单许多,首先将时域信号经傅里叶变换得到对应频域信号。

傅里叶变换,即将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。对于离散信号,通常采用离散福利叶变换,为提高计算机的运算速度又衍生出快速离散傅里叶变换,接下来频谱信号的绘制即是直接调用MATLAB中指令fft先得到对应的频谱信号,再通过plot命令得到的。

心得体会

这次的课程设计,我再一次认识到了MATLAB软件的强大,能够进行语音信号的各种处理。

通过这次课程设计,我明白了基于RLS算法的多麦克风降噪的过程,也对RLS算法有了深一层的理解。通过MATLAB编程与仿真,实现了语音信号的去噪,通过对去噪前后语音信号的波形及频谱的对比,形象地认识到RLS算法的作用。

这次的课程设计,我第一次接触到了语音去噪的相关知识。语音识别以语音我研究对象,是语音信号处理的一个重要研究方向,是模式识别的一个分支。语音识别的研究工作迄今已有几十年,但仍未有突破性进展,其主要原因有:

(1)语音识别系统的适应性差;

(2)在强噪声干扰环境下语音识别难;

(3)基元的选择问题;

(4)端点检测问题等。

但自适应信号处理的理论和技术日益完善,加之MATLAB的出现,使实验室研究语音识别技术成为可能。

参考文献

[2] 郑宝玉. 自适应滤波器原理[M]. 北京:电子工业出版社,2006年.

[3] StevenW.Smith, 实用数字信号处理,人民邮电出版社,2010年.

[4] 何振亚,自适应信号处理,科学出版社出版,2003年.

附录:程序清单

primary=wavread(RLSprimsp.wav); %读入主麦克风语音信号

n=length(primary);

Y=fft(primary,n); %快速傅里叶变换

figure;

subplot(2,1,1);

plot(primary);

title(原始信号波形,fontweight,bold);

grid;

subplot(2,1,2);

plot(abs(Y));

title(原始信号频谱,fontweight,bold);

axis([0 15000 0 4000]);

grid;

primary=primary;

fref=wavread(RLSrefns.wav); %读入参考语音信号

n1=length(fref);

Y1=fft(fref,n1); %快速傅里叶变换

figure;

subplot(2,1,1);

plot(fref);

title(参考麦克风信号波形,fontweight,bold);

grid;

subplot(2,1,2);

plot(abs(Y));

title(参考麦克风信号频谱,fontweight,bold);

axis([0 15000 0 4000]);

grid;

fref= fref;

% 初始化

Worder=32; %滤波器阶数

lambda=1 ; % 设置遗忘因子

Delta=0.001 ;

p=(1/Delta) * eye ( Worder,Worder ) ;

w=zeros(Worder,1);

output=primary; %主语音输出

loopsize=max(size(primary));

for i=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;

figure; %作图

subplot(2,1,1);

output=output;

plot(output);

title(去噪后语音信号波形,fontweight,bold);

n=length(output);

Y=fft(output,n); %快速傅里叶变换

subplot(2,1,2);

plot(abs(Y));

title(去噪后语音信号频谱,fontweight,bold);

axis([0 15000 0 4000]);

wavwrite(output,lym0.wa); %生成降噪后的语音

wavplay(lym0,fs); %语音输出降噪后的语音

本科生课程设计成绩评定表

姓 名

性 别

专业、班级

课程设计题目:

课程设计答辩或质疑记录:

成绩评定依据:

最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:

年 月 日

22

展开阅读全文

matlab adaptfilt.rls,基于RLS算法的多麦克风降噪相关推荐

  1. matlab 最大熵谱估计,基于Burg算法的最大熵谱估计

    <基于Burg算法的最大熵谱估计>由会员分享,可在线阅读,更多相关<基于Burg算法的最大熵谱估计(6页珍藏版)>请在人人文库网上搜索. 1.基于Burg算法的最大熵谱估计一. ...

  2. MATLAB代码:基于蒙特卡洛算法的电动汽车充电负荷预测 关键词:蒙特卡洛 电动汽车 充电负荷预测

    MATLAB代码:基于蒙特卡洛算法的电动汽车充电负荷预测 关键词:蒙特卡洛 电动汽车 充电负荷预测 仿真平台:MATLAB 主要内容:代码主要做的是电动汽车的充电负荷模拟预测,具体为:从影响电动汽车充 ...

  3. MATLAB 用LMS算法实现语音去噪,在Matlab中实现基于LMS算法语音信号去噪

    ComputerKnowledgeand Technology 电脑知识与技术 第10卷第32期 (2014年11月) 本栏目责任编辑:谢媛媛软件设计开发 在Matlab中实现基于LMS算法语音信号去 ...

  4. 时间窗口算法用matlab,一种基于动态规划算法的时间窗口相关的参与者选择方法与流程...

    本发明涉及一种移动群智感知中时间窗口相关的参与者选择方法,特别地,涉及一种基于动态规划算法的时间窗口相关的参与者选择方法. 背景技术: 在移动群智感知网络中,智能设备中嵌入了麦克风.相机.温度传感器. ...

  5. kalman滤波基础及matlab仿真_MATLAB基于EKF算法估计电动汽车蓄电池的SOC

    点击上方蓝字关注"公众号" MATLAB基于EKF算法估计电动汽车蓄电池的SOC 电动汽车(EV)是未来汽车的一大发展方向.动力锂电池组是电动汽车动力源,其荷电状态(SOC)直接反 ...

  6. 数字信号处理--基于MATLAB的小波去噪算法--小波变换在信号降噪和压缩中的应用

    小波分析的重要应用之一就是用于信号消噪,首先简要地说明一下小波变换实现信号消噪的基本原理. 一.基本原理 含噪的一维信号模型可以表示如下 式中s(k)为含噪信号,f(k)为有用信号,e(k)为噪声信号 ...

  7. rls算法matlab实现,第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现.PDF

    第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现 第 5章 基于 RLS算法的数据预测与 第5章 基于RLS算法的数据预测与MATLAB实现 MATLAB实现 RLS 1795 递归最 ...

  8. qr-rls算法matlab实现,【预测模型】基于RLS算法进行预测matlab源码

    一.简介 1 概述 递归最小二乘(RLS)算法是一种典型的数据处理方法,由著名学者高斯在1795年提出,高斯认为,根据所获得的观测数据来推断未知参数时,未知参数最可能的值是这样一个数据,即它使各项实际 ...

  9. rls lms 对比 matlab,自适应均衡器的LMS和RLS两种算法的特性与仿真分析

    自适应均衡属于自适应信号处理的应用范畴,各种各样的自适应均衡算法如迫零(ZF)算法.最小均方(LMS)算法.递归最小二乘(RLS)算法.变换域均衡算法.Bussgang算法.高阶或循环统计量算法.基于 ...

最新文章

  1. FPGA中实现对数运算
  2. 一种结合混沌密码理论的彩色图象水印算法
  3. 【C 语言】文件操作 ( 文件加密解密 | 加密解密原理 | 对称加密 | 非对称加密 | 散列函数 )
  4. forbiden django1.4 timezone active warning which annoying alot
  5. jax-ws 生成soap_在Spring中记录JAX-WS SOAP消息
  6. 2018-04-22接口自动化测试学习心得(1)
  7. ftp+linux+使用webdav,群晖-win/mac/nfs ftp tftp webdav文件服务的概念及设置
  8. 小程序 | 保存图片时处理名称的细节(时间戳+后缀名)
  9. 梅西、内马尔谁是全能的五边形战士?教你用BI做出可视化能力图
  10. 查看CentOS系统版本,Linux内核版本,32位还是64位
  11. 三万字带你了解那些年面过的Java八股文
  12. MySQL建表规范与常见问题
  13. 线性表的顺序表示---练习题(算法设计题
  14. access怎么做批注_添加、编辑和删除记录的方法
  15. matlab2008 软件下载及安装教程
  16. 2022-2028全球昼夜节律性睡眠障碍行业调研及趋势分析报告
  17. 平行四边形周长和面积计算c语言,平行四边形的周长公式
  18. shiro 调用 subject.login(token)方法后
  19. linux startx无效_startx启动图形界面失败的几个解决方法
  20. “爱拍照”的OPPO逆袭战:合并一加,跑步造车

热门文章

  1. B2B、B2C、C2C、O2O分别是什么
  2. Mac键盘和Windows键盘对应表
  3. 寻找“最好”(6)——心的距离
  4. python写入csv或excel时,数字0开头丢失的解决方案
  5. Armbian bullseye 系统OMV 6.x安装分享
  6. 光纤熔接机的光纤对准方式
  7. Postman之CSV或JOSN文件实现数据驱动(参数化)
  8. try catch 用法
  9. Unity UGUI Toggle监听onValueChanged
  10. 曲线绕x轴旋转曲面方程_绕x轴旋转(微积分旋转体绕y轴旋转体积~我看不懂图片上的公式~...)...