📄 rls_cancelationprom.m
字号:
%自适应噪声抵消matlab编程实现—rls实现
clear all;
r1=wavread('C:\MATLAB6p5p1\work\sound1.wav'); %读入含噪语音信号
r2=wavread('C:\MATLAB6p5p1\work\noise.wav'); %读入噪声信号
r1=r1(1:34000); %取语音信号-写成行向量1*30000
r2=r2(1:34000); %取噪声信号-写成行向量1*30000
figure(1); %画出语音信号的时域图形
plot(r1,'b');
xlabel('t');
ylabel('value of sound1');
title('sound1');
figure(2); %画出噪声信号的时域图形
plot(r2,'b');
xlabel('t');
ylabel('value of noise');
title('noise');
k=64;
N=size(r1);
N=length(r1);
error=zeros(N,1); %误差矩阵N*1
db_error=error;
output=zeros(N,1);
mu=0.01;
win=zeros(k,1);
g=zeros(k,1);
R=eye(k);
alfa=0;
for i=k:N
input1=r1(i);
input2=r2(i:-1:i-k+1);
g=inv(R)*input2';
e=input1-input2*win; %迭代(Matrix dimensions must agree)
output(i)=e; %最后的 语音输出
alfa==1-(g')*input2';
aipuxilon=alfa*e;
%R=inv(R)-((inv(R))*input2'*input2*(inv(R))/(1+input2*(inv(R))*input2));
% (R^-1)=(R^-1)-((R^-1)*input2*input2'*(R^-1))/(1+input2'*(R^-1)*input2);
win=win+g*e; %win 是列向量 input2 是行向量 维数不一致
error(i)=error(i)+e^2;
end;
wavwrite(output,'cancelloutput_rls.wav');
figure(3); %画出抵消的误差信号变化的时域图形
db_error=10*log10(error);
plot(db_error,'b');
xlabel('t');
ylabel('value of db_error');
title('db_error');
figure(4); %画出抵消后的语音信号的时域图形
plot(output,'b');
xlabel('t');
ylabel('value of output');
title('output');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -