% 輸入引數:
% xn 輸入的信號序列 (列向量)
% dn 所期望的回應序列 (列向量)
% M 濾波器的階數 (標量)
% mu 收斂因子(步長) (標量) 要求大于0,小于xn的相關矩陣最大特征值的倒數
% 輸出引數:
% W 濾波器的權值矩陣 (矩陣)
% 大小為M x itr,
% en 誤差序列(itr x 1) (列向量)
% yn 實際輸出序列 (列向量)
function [yn,W,en]=LMSfilter(xn,dn,M,mu)
itr = length(xn);
en = zeros(itr,1); % 誤差序列,en(k)表示第k次迭代時預期輸出與實際輸入的誤差
W = zeros(M,itr); % 每一行代表一個加權參量,每一列代表-次迭代,初始為0
% 迭代計算
for k = M:itr % 第k次迭代
x = xn(k:-1:k-M+1); % 濾波器M個抽頭的輸入,為向量
y = W(:,k-1).' * x; % 濾波器的輸出
en(k) = dn(k) - y ; % 第k次迭代的誤差
% 濾波器權值計算的迭代式
W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
end
% 求最優時濾波器的輸出序列 r如果沒有yn回傳引數可以不要下面的
yn = inf * ones(size(xn)); % inf 是無窮大的意思
for k = M:length(xn)
x = xn(k:-1:k-M+1);
yn(k) = W(:,end).'* x;%用最后得到的最佳估計得到輸出
end
這是代碼,大佬們,小弟主要是有兩個問題不明白:
1. yn = inf * ones(size(xn)); 這一行代碼是為了什么目的,我沒看明白
2. 這段代碼針對的是時不變信號,所以可以用最后一次迭代作為最優濾波器,但是如果針對的是時變信號,是不是該改為yn(k) = W(:,k).'* x; 呀?但是很明顯最開始的部分還沒收斂完全,誤差較大,怎么頂哦?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/55702.html
標籤:其他開發語言
上一篇:匯編遷移堆疊段
下一篇:關于野火mini led的學習
