資源簡介
很實用的代碼,保證代碼正確無誤,可以直接運行并查看結果

代碼片段和文件信息
function?[ynWen]=LMS(xndnMmuitr)
%?LMS(Least?Mean?Squre)算法
%?輸入?yún)?shù):
%?????xn???輸入的信號序列??????(列向量)
%?????dn???所期望的響應序列????(列向量)
%?????M????濾波器的階數(shù)????????(標量)
%?????mu???收斂因子(步長)??????(標量)?????要求大于0小于xn的相關矩陣最大特征值的倒數(shù)????
%?????itr??迭代次數(shù)????????????(標量)?????默認為xn的長度M %?輸出參數(shù):
%?????W????濾波器的權值矩陣?????(矩陣)
%??????????大小為M?x?itr
%?????en???誤差序列(itr?x?1)????(列向量)??
%?????yn???實際輸出序列?????????????(列向量)
%?參數(shù)個數(shù)必須為4個或5個
if?nargin?==?4?????????????????%?4個時遞歸迭代的次數(shù)為xn的長度?
????itr?=?length(xn);
elseif?nargin?==?5?????????????%?5個時滿足M ????if?itr>length(xn)?|?itr ????????error(‘迭代次數(shù)過大或過小!‘);
????end
else
????error(‘請檢查輸入?yún)?shù)的個數(shù)!‘);
end
%?初始化參數(shù)
en?=?zeros(itr1);?????????????%?誤差序列en(k)表示第k次迭代時預期輸出與實際輸入的誤差
W??=?zeros(Mitr);?????????????%?每一行代表一個加權參量每一列代表-次迭代初始為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
%?求最優(yōu)時濾波器的輸出序列
yn?=?inf?*?ones(size(xn));
for?k?=?M:length(xn)
????x?=?xn(k:-1:k-M+1);
????yn(k)?=?W(:end).‘*?x;
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1457??2015-09-28?11:58??LMS.m
?????文件???????1107??2015-09-28?11:58??main.m
-----------?---------??----------?-----??----
?????????????????2564????????????????????2
評論
共有 條評論