基于RLS算法的多麦克风降噪matlab编程
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');
axis([55000 60000 -0.4 0.4]);grid;
n=length(output);
Y=fft(output,n); %快速傅里叶变换
subplot(2,1,2);
plot(abs(Y));
title('去噪后语音信号频谱','fontweight','bold');grid;
axis([0 15000 0 4000]);
wavwrite(output,Fs,'lym0.wav'); %生成降噪后的语音
sound(output,Fs); %语音输出降噪后的语音
望高手能帮忙解决问题:为什么录入的本是女声,但最后降噪后输出的确实一个古怪的男生,而且特别慢,听起来像鬼片里的配音,也听不清说的啥,完全变质了。
还请大神帮忙解决,急!!