1. 程式人生 > 其它 >【語音去噪】基於matlab最小二乘法(LMS)自適應濾波器【含Matlab原始碼 481期】

【語音去噪】基於matlab最小二乘法(LMS)自適應濾波器【含Matlab原始碼 481期】

一、簡介




二、原始碼

%該程式實現時域LMS演算法,並用統計的方法模擬得出不同步長下的收斂曲線
clear                     %   清空變數空間
close all

g=100;                    %   統計模擬次數為g
N=1024;                    %   輸入訊號抽樣點數N
k=128;                      %   時域抽頭LMS演算法濾波器階數
pp=zeros(g,N-k);          %   將每次獨立迴圈的誤差結果存於矩陣pp中,以便後面對其平均
u=0.001;                
for q=1:g                 
t=1:N;
a=1;
s=a*sin(0.05*pi*t);     %   輸入單頻訊號s 
figure(1);
subplot(311)
plot(t,real(s));          %   訊號s時域波形
title('訊號s時域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn=awgn(s,3);            %   加入均值為零的高斯白噪聲,信噪比為3dB    
% 設定初值
y=zeros(1,N);             %   輸出訊號y
y(1:k)=xn(1:k);           %   將輸入訊號xn的前k個值作為輸出y的前k個值
w=zeros(1,k);          %   設定抽頭加權初值
e=zeros(1,N);             %   誤差訊號
% 用LMS演算法迭代濾波
for i=(k+1):N
    XN=xn((i-k+1):i);  
    y(i)=w*XN';
    e(i)=s(i)-y(i);
    w=w+u*e(i)*XN;    
end
pp(q,:)=(e(k+1:N)).^2;   
end
subplot(312)
plot(t,real(xn));          %   訊號s時域波形
plot(t,real(y));          %   訊號s時域波形
title('自適應濾波後的輸出時域波形');
for b=1:N-k
bi(b)=sum(pp(:,b))/g; %   求誤差的統計平均
end

三、執行結果

四、備註

版本:2014a
完整程式碼或代寫加1564658423