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

📄 lms.m

📁 最小均方误差实现的自适应滤波算法
💻 M
字号:
%最小均方差算法
% RLS 算法 
randn('seed', 0) ;
rand('seed', 0) ;
NoOfData = 8000 ;  % 设置序列的数据点数
Order = 32 ;    % 设置自适应滤波器的阶数
Lambda = 0.98 ;    % 设定因数
Delta = 0.001 ;    % 已初始化的系数
x = randn(NoOfData, 1) ;% 假定输入
h = rand(Order, 1) ;  % 系统任意选择的序列
d = filter(h, 1, x) ;  % 产生输出
% RLS初始化
P = Delta * eye ( Order, Order ) ;
w = zeros ( Order, 1 ) ;
% RLS 自适应
for n = Order : NoOfData ; 
  u = x(n:-1:n-Order+1) ;
  pi_ = u' * P ;
  k = Lambda + pi_ * u ;  K = pi_'/k;
  e(n) = d(n) - w' * u ;
  w = w + K * e(n) ;
  PPrime = K * pi_ ;
  P = ( P - PPrime ) / Lambda ;
  w_err(n) = norm(h - w) ;
end ;
% 划分结果
figure ;
plot(20*log10(abs(e))) ;
title('Learning Curve') ;%学习曲线
xlabel('Iteration Number') ;
ylabel('Output Estimation Error in dB') ;
pause;
figure ;
semilogy(w_err) ;
title('Weight Estimation Error') ;%误差函数
xlabel('Iteration Number') ;
ylabel('Weight Error in dB') ;
pause;

clear all
close all
hold off
%系统频道数
sysorder = 2 ; snr=30 ;
% 系统点数
N=2000;
inp = randn(N,1);
n = randn(N,1)/10.^(snr/10);
b=[1,0,0]; a=[1,-1.558,0.81];
Gz = tf(b,a,1);
h= [1.558;-0.81];
y = lsim(Gz, inp);% inp通过gz的输出响应
%加噪声
d = y + n;
totallength=size(d,1);
%算法开始
M=totallength;
%初始化各系数
f0=zeros(1,M);f1=zeros(1,M);f2=zeros(1,M);
k1=zeros(1,M);k2=zeros(1,M);
b0=zeros(1,M);b1=zeros(1,M);b2=zeros(1,M);
a1=zeros(1,M);a2=zeros(1,M);
f0=inp;b0=inp;
f1(1)=inp(1);
k1(1)=0;k2(1)=0;b1(1)=0;
k1(2)=0;f2(1)=inp(1);
b2(1)=0;k2(2)=0;
u=0.05;
for n = sysorder : M-1
 i=n+2-sysorder;
 f1(i)=f0(i)+k1(i)*b0(i-1);
 b1(i)=b0(i-1)+k1(i)*f0(i);
 k1(i+1)=k1(i)-2*u*(f1(i)*b0(i-1)+b1(i)*f0(i));
 f2(i)=f1(i)+k2(i)*b1(i-1);
 b2(i)=b1(i-1)+k2(i)*f1(i);
 k2(i+1)=k2(i)-2*u*(f2(i)*b1(i-1)+b2(i)*f1(i));
end 
for n = sysorder:M
i=n+1-sysorder;
a1(i)=(-k1(i)*(1+k2(i)));a2(i)=-k2(i);
end
hold on
figure(1); subplot(3,1,1)
plot(d)
plot(y, 'r');
title('System output') ;%系统输出
xlabel('Samples')
ylabel('True and estimated output')
subplot(3,1,3)
plot(h, 'k+')
hold on
plot(a,'r*')
legend('Actual weights',' Estimated weights')
title('Comparison of the actual weights and the estimated weights') ;%真实加权值与估计加权值的比较
axis([0 3 -2.35 2.35])



⌨️ 快捷键说明

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