⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nlms.m

📁 This file include the normalized LMS algorithm and subband LMS algorithm. all of them are in m.file
💻 M
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% lmsalgo : NLMS algorithm demo% Author : Tamer abdelazim Mellik% Contact information : %Department of Electrical & Computer Engineering,%University of Calgary,%2500 University Drive N.W. ,%Calgary, AB T2N 1N4 ,%Canada .% email :abdelasi@enel.ucalgary.ca  % email : tabdelaz@ucalgary.ca% Webpage : http://www.enel.ucalgary.ca/~abdelasi/% Date    : 25-2-2001% Version : 1.0.0% Reference : S. Haykin, Adaptive Filter Theory. 3rd edition, Upper Saddle River, NJ: Prentice-Hall, 1996. % Note : The author doesn't take any responsibility for any harm caused by the use of this fileclear allclose allhold off%channel system ordersysorder = 5 ;% Number of system pointsN=2000;inp = randn(N,1);n = randn(N,1);[b,a] = butter(2,0.25);Gz = tf(b,a,-1);%This function is submitted to make inverse Z-transform (Matlab central file exchange)%The first sysorder weight value%h=ldiv(b,a,sysorder)';  %download and uncomment to get h matrix% if you use ldiv this will give h :filter weights to beh=  [0.0976;    0.2873;    0.3360;    0.2210;    0.0964;];y = lsim(Gz,inp);%add some noisen = n * std(y)/(10*std(n));d = y + n;totallength=size(d,1);%Take 60 points for trainingN=60 ;	%begin of algorithmw = zeros ( sysorder  , 1 ) ;for n = sysorder : N 	u = inp(n:-1:n-sysorder+1) ;    y(n)= w' * u;    e(n) = d(n) - y(n) ;% Start with big mu for speeding the convergence then slow down to reach the correct weights%      if n < 20%          mu=2;%      else%          mu=0.5;%      end% Use adaptive step to reach the solution faster mu = 0.95 * 2/M*r(0)    mu=0.95*2/(5*(0.001+var(u)));% alpha = 0.01     	w = w + mu/(0.001+u'*u ) * u * e(n) ;end %check of resultsfor n =  N+1 : totallength	u = inp(n:-1:n-sysorder+1) ;    y(n) = w' * u ;    e(n) = d(n) - y(n) ;end hold onplot(d)plot(y,'r');title('System output') ;xlabel('Samples')ylabel('True and estimated output')figuresemilogy((abs(e))) ;title('Error curve') ;xlabel('Samples')ylabel('Error value')figureplot(h, 'k+')hold onplot(w, 'r*')legend('Actual weights','Estimated weights')title('Comparison of the actual weights and the estimated weights') ;axis([0 6 -0.5 0.5]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -