matlab语音算法,[转载]RLS算法多麦克风语音降噪( matlab编程 )
RLS算法多麦克风语音降噪
一、课程设计的目的
综合运用信号与系统、数字信号处理、概率论、矩阵运算的知识进行语音信号的增强,利用MATLAB作为编程工具进行计算机实现,从而加深对所学知识的理解,建立概念。
二、课程设计的要求
① 学会MATLAB的使用,掌握MATLAB的程序设计方法;
② 利用MATLAB实现具体算法,学会做仿真实验;
③ 掌握迭代算法的计算编程方法;
④ 对语音进行频谱分析;
⑤ 掌握RLS算法的基本原理。
三、课程设计内容
给定主麦克风录制的受噪声污染的语音信号和参考麦克风录制的噪声,实现语音增强的目标,得到清晰的语音信号。
四、课程设计的实验步骤及详细过程如下:
(1)设计方法一:直接编写RLS算法进行设计算法的方法过程
目标:对观测信号进行自适应滤波,滤波器为w,得到
“干净”的信号。
2、算法的计算过程,和RLS算法基本过程
滤波器Filter的阶数是worder,
滤波器的输出y(i)
以上RLS公式算法用MATLAB编程如下:
for
i=1+Worder:loopsize
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、其上算法初始化如下:
Worder=32; %滤波器阶数
lambda=1
; % 设置遗忘因子
Delta=0.001 ;
p=(1/Delta) * eye ( Worder,Worder )
; %P= *I
w=zeros(Worder,1);
output=primary; %主语音输出
loopsize=max(size(primary)); %音频的最大长度
(2)设计方法二:直接调用库的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; % Filter order
lam =
1; % Exponential weighting
factor
delta =
0.1; %
Initial input covariance estimate
w0 =
zeros(M,1); % Initial tap
weight vector
P0 = (1/delta)*eye(M,M); % Initial
setting for the P matrix
Zi =
zeros(M-1,1); %
FIR filter initial states
(3)读入音频信号的程序设计
主麦克风录制的语音信号是RLSprimsp.wav,参考麦克风录制的参考噪声是RLSrefns.wav,都是.wav格式,用waveread指令读取音频信号;
指令写为如下:
primary = wavread('RLSprimsp.wav'); primary = primary';
ref = wavread('RLSrefns.wav'); fref = fref';
(4)画波形及频谱图的程序设计
figure; %作图
subplot(2,2,1);
plot(output); %画降噪后的语音波形
title('output');
wavwrite(output,'lym0'); %生成降噪后的语音
subplot(2,2,2);plot(primary); %画主麦克风输入的语音波形
title('primary input');
subplot(2,2,3);plot(fref); %画参考麦克风输入语音波形
title('fref noise');
(5)语音读出音频信息及生成音频的指令
wavplay(output) %语音输出降噪后的语音
wavwrite(output,’output’) %生成语音文件wav.格式
(6)对比设计感想说明:
直接调用库的RLS算法函数的设计方法比较简单,直接用Hadapt函数调用RLS数字滤波器就可以滤波输出。而直接编写RLS算法公式的设计方法就比较难,设计时要先要弄懂基本的RLS算法,公式的推导,每一步的含义等,好有的是要掌握好MATLAB指令,如何去编写公式也是难点,此方法的设计过程当中就参考了一些数字滤波器的设计资料,还有矩阵的写法与匹配问题,需要自己分析解决一些问题。
五、调试分析
1、环境噪声中的语音波形分析:
(1)麦克风主噪音RLSprimsp.wav信号波形如下:
(2)参考噪音RLSrefns.wav 信号波形如下:
2、RLS算法的滤波效果:
算法仿真收敛以后,得到增强的语音信号
3、分别对增强前后的语音信号作频谱分析
(1)对麦克风主噪音RLSprimsp.wav信号进行频谱分析:
频谱图如下:
频谱分析代码如下:
[y,fs,bits]=wavread('C:MATLAB6p5p1exampleRLSprimsp.wav');
sound(y,fs,bits);
plot(y);
Y=fft(y,4096);
subplot(211);plot(y);title('麦克风主语音输入波形');
subplot(212);plot(abs(Y));title('麦克风主语音输入频谱');
(2)对参考噪音RLSrefns.wav
信号进行频谱分析:
频谱图如下:
频谱分析代码如下:
[y,fs,bits]=wavread('C:MATLAB6p5p1exampleRLSrefns.wav');
sound(y,fs,bits);
plot(y);
Y=fft(y,4096);
subplot(211);plot(y);title('参考语音输入波形');
subplot(212);plot(abs(Y));title('参考语音输入频谱');
(3)对降噪后的输出语音lym0.wav进行频谱分析
频谱图如下:
频谱分析代码如下:
[y,fs,bits]=wavread('C:MATLAB6p5p1examplelym0.wav');
sound(y,fs,bits);
plot(y);
Y=fft(y,4096);
subplot(211);plot(y);title('降噪后语音输出波形');
subplot(212);plot(abs(Y));title('降噪后语音输出频谱');
六、结果分析
调试过程及波形和频谱的分析,两种设计方法都可以滤波输出源语音信号,达到了降噪滤波的效果。
五、参考文献
信号与系统基础—应用web和matlab 科学出版社
数字信号处理 清华大学出版社
Matlab信号处理与应用 国防工业出版社
数字信号处理及其matlab实现 化学工业出版社
(1)方法一、直接编写RLS算法进行设计的主程序清单
primary=wavread('RLSprimsp.wav');
%读入主麦克风语音信号
primary=primary';
fref=wavread('RLSrefns.wav'); %读入参考语音信号
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,2,1);
plot(output); %画降噪后的语音波形
title('output');
wavwrite(output,'lym0'); %生成降噪后的语音
subplot(2,2,2);plot(primary);
%画主麦克风语音波形
title('primary input');
subplot(2,2,3);plot(fref);
%画参考麦克风语音波形
title('fref noise');
wavplay(output); %语音输出降噪后的语音
(2)方法二、直接调用库RLS算法函数滤波器的设计程序
primary = wavread('RLSprimsp.wav'); primary =
primary'; %读入语音信号
fref = wavread('RLSrefns.wav'); fref = fref';
subplot(2,2,1);plot(primary);grid;
%画输入语音波形
title('primary');
subplot(2,2,2);plot(fref);grid;
title('fref');
M =
32; %初始化
lam =
1;
delta =
0.1;
w0 =
zeros(M,1);
P0 = (1/delta)*eye(M,M);
Zi =
zeros(M-1,1);
Hadapt =
adaptfilt.rls(M,lam,P0,w0,Zi); %调用库函数滤波器
Hadapt.ResetBeforeFiltering = 'off';
[y,e] = filter(Hadapt,fref,primary);
subplot(2,2,3); plot(y);grid;
title('y');
subplot(2,2,4); plot(e);grid;
title('e'); %画滤波输出波形
grid on;
wavwrite(y,'y0');
wavwrite(e,'lym');
wavplay(lym)
matlab语音算法,[转载]RLS算法多麦克风语音降噪( matlab编程 )相关推荐
- matlab中partdata,[转载]meanshift算法
Mean Shift算法,一般是指一个迭代的步骤,即先算出当前点的偏移均值,移动该点到其偏移均值,然后以此为新的起始点,继续移动,直到满足一定的条件结束. 1. Meanshift推导 给定d维空间R ...
- lms算法的matlab实现,Matlab LMS 算法和 RLS 算法实现
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %LMS自适应滤波器性能分析 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear clc ...
- matlab adaptfilt.rls,基于RLS算法的多麦克风降噪
<信息处理课群综合训练与设计> 课程设计任务书 学生姓名: 专业班级: 指导教师: 工作单位: 题 目: 基于RLS算法的多麦克风降噪 设计任务: 给定主麦克风录制的受噪声污染的语音信号和 ...
- qr-rls算法matlab实现,【预测模型】基于RLS算法进行预测matlab源码
一.简介 1 概述 递归最小二乘(RLS)算法是一种典型的数据处理方法,由著名学者高斯在1795年提出,高斯认为,根据所获得的观测数据来推断未知参数时,未知参数最可能的值是这样一个数据,即它使各项实际 ...
- 麦克风阵列定位matlab算法,基于麦克风阵列的MUSIC声源定位算法研究
摘要: 作为阵列信号处理领域的一个分支,麦克风阵列已广泛应用于电视会议.语音增强及识别等方面.声源定位是麦克风阵列进行空间滤波的重要基础,近年来发展迅速.基于阵列的定位算法可以分为超分辨算法和非超分辨 ...
- rls算法matlab实现,第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现.PDF
第5章基于RLS算法的数据预测与MATLAB实现MATLAB实现 第 5章 基于 RLS算法的数据预测与 第5章 基于RLS算法的数据预测与MATLAB实现 MATLAB实现 RLS 1795 递归最 ...
- 【老生谈算法】matlab实现RLS算法自适应均衡器——RLS算法
用RLS算法实现自适应均衡器的MATLAB程序 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]用RLS算法实现自适应均衡器的 ...
- 波束赋形技术lms算法在matlab仿真,自适应波束成形算法LMS、RLS、VSSLMS分解
1.传统的通信系统中,基站天线通常是全向天线,此时,基站在向某一个用户发射或接收信号时,不仅会造成发射功率的浪费,还会对处于其他方位的用户产生干扰.然而,虽然阵列天线的方向图是全向的,但是通过一定技术 ...
- 转载:基于MATLAB的几种图像分割算法
基于MATLAB的几种图像分割算法 转载自:https://blog.csdn.net/bentleydelll/article/details/82456150 最大类间方差法 基本思路是根据直方图 ...
最新文章
- Python DAG—归简法—拓扑排序
- 汇编语言程序如何转化成c语言,如何把汇编语言转换成C语言
- java创建计数器变量,用于检查变量(计数器)最大长度的Java方法
- svn如何取消某个文件的版本管理_微服务架构如何统一管理工程配置文件
- 监控linux终端键盘输入,Linux内核实时监控键盘输入
- 制造业一声叹息!干30年实业不如炒股?
- spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据
- java构造反射和函数_反射类的构造函数和方法
- 额外参数_Redis的复制参数学习笔记
- Everything+ listary+TotalCommander+QTTabBar相互整合
- 兴业研发晨会纪要2008年 10月 30日
- 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被
- linux c led 驱动程序,uclinux简单LED驱动程序
- linux检查apr,Linux上安装APR
- 什么查重软件比较好用?
- CMMI3-CMMI5评估认证需要遵循七大原则
- 如何在表格里做计算机统计表,如何运用Excel编制统计表并做一般数据分析?-excel统计怎么做,最简单的统计表格怎么做...
- 7-2 平面向量加法 (15 分)
- [Android Pro] 将你的安卓手机屏幕共享到PC或Mac上
- 大数据学情分析_大数据背景下的大学生学情分析研究
热门文章
- 全国计算机二级考试mc,新版全国计算机等级考试二级MSoffice选择题题库.docx
- python刷弹幕_每个大主播都是满屏弹幕,怎么做到的?Python实战无限刷弹幕!
- linux安装包安装方法
- 如何让ecshop做淘宝客
- 超实用总结,一文通吃所有整流滤波电路
- 百度AI开放平台人体分析_人像分割的Python示例代码
- 配置大华网络摄像机,并远程存储到FTP服务器
- intellij idea 创建web 项目
- 养生的方法有哪些 十种长寿方法,全是免费的!
- 偷天换日合约易主,地址变脸移花接木——底层函数误用漏洞 | 漏洞分析连载之四