?? matlab 實例.txt
字號:
matlab 實例
lms 算法
function [wn,en]=lms(xn,dn,M,delt,varargin)
% LMS Algorithm ,返回濾波器加權(quán)系數(shù)矩陣和誤差向量
%
% 調(diào)用格式
% [wn,en]=lms(xn,dn,M,delt,itr)
% en=濾波器輸出和d(n)的誤差序列,為列向量
% wn=濾波器的加權(quán)參量序列,為一矩陣,其每行代表一個加權(quán)參量,每列代表一次迭代;初始化值設為0
% xn=輸入列向量信號
% dn=期望列向量信號
% M=濾波器階數(shù)
% delt=步長
% itr=迭代次數(shù)
%
% [wn,en]=lms(xn,dn,M,delt)
% 迭代次數(shù)為默認值,即等于x(n)的點數(shù)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 輸入輸出參數(shù)的檢查
%--------------------------------------------------------------------------
vin=length(varargin); Item=vin+4;
error(nargchk(4,Item,nargin)); % 檢查輸入變量數(shù)目是否合適,其中前四個參數(shù)必須輸入
if nargout>2 % 檢查輸出變量數(shù)目是否合適
error('Too many output arguments');
end
%------------------------------------------------------------------------
Nx=length(xn); % x(n)的長度
if Nx~=length(dn) % 檢查x(n)和d(n)長度是否相等
error('The length of x(n) is not equal to that of d(n)');
end
%------------------------------------------------------------------------
sizex=size(xn); % 檢查輸入向量是否為列向量
if sizex(1)<sizex(2)
xn=xn.';
end
sizedn=size(dn); % 檢查期望信號向量是否為列向量
if sizedn(1)<sizedn(2)
dn=dn.';
end
%-------------------------------------------------------------------------
itr=Nx; % 迭代次數(shù)取默認值
%-------------------------------------------------------------------------
% 當輸入變量為5個時
if Item==5 % 確定迭代次數(shù)
itr=varargin{1};
if itr>Nx | itr<M
error('Too many or too few iterations');
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 參數(shù)的初始化
en=zeros(itr,1);
wn=zeros(M,itr); % 每行代表一個加權(quán)參量,每列代表一次迭代
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 迭代計算
for k=M:itr % 第k次迭代
x_tap=xn(k:-1:k-M+1);
en(k)=dn(k)-wn(:,k-1)'*x_tap;
wn(:,k)=wn(:,k-1)+2*delt*en(k,1)*x_tap;
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -