一、簡介
最小均方(LMS, Least Mean Squares)是最基本的自適應濾波演算法,
LMS演算法是自適應濾波器中常用的一種演算法與維納演算法不同的是其系統的系數隨輸入序列而改變,維納演算法中截取輸入序列自相關函式的一段構造系統的最佳系數,而LMS演算法則是對初始化的濾波器系數依據最小均方誤差準則進行不斷修正來實作的,因此理論上講LMS演算法的性能在同等條件下要優于維納,但是LMS是在初始值下逐步調整的,因此在系統穩定前,會有一段調整時間,調整時間受步長因子的控制,一定范圍內,步長因子越大,調整時間越小,步長因子的最大取值為R的跡,LMS采用平方誤差最小的原則代替均方誤差最小的原則,信號基本關系如下:


二、源代碼
g=100; % 統計仿真次數為g去
N=1024; % 輸入信號抽樣點數N
k=128; % 時域抽頭LMS演算法濾波器階數
pp=zeros(g,N-k); % 將每次獨立回圈的誤差結果存于矩陣pp中,以便后面對其平均
u=0.0001;
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,5); % 加入均值為零的高斯白噪聲,信噪比為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*sign(real(e(i)))*XN; %更新抽頭系數
end
pp(q,:)=(e(k+1:N)).^2;
end
subplot(312)
plot(t,real(xn)); % 信號s時域波形
title('信號s加噪聲后的時域波形');
subplot(313)
plot(t,real(y)); % 信號s時域波形
title('自適應濾波后的輸出時域波形');
for b=1:N-k
bi(b)=sum(pp(:,b))/g; % 求誤差的統計平均
end
三、運行結果


四、備注
完整代碼或者代寫添加QQ 1564658423
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273304.html
標籤:其他
下一篇:空域的平滑
