注册 登录
编程论坛 Matlab

基于RLS算法的多麦克风降噪matlab编程

倩子 发布于 2013-07-02 13:38, 1078 次点击
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);                      %语音输出降噪后的语音

    望高手能帮忙解决问题:为什么录入的本是女声,但最后降噪后输出的确实一个古怪的男生,而且特别慢,听起来像鬼片里的配音,也听不清说的啥,完全变质了。
还请大神帮忙解决,急!!

0 回复
1