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

📄 lsl1.m

📁 matlab,自适应滤波算法
💻 M
字号:
%  Arithmetic comparision between LSL and LMS
%  Latest change: $Date: 2008/3/27 20:36(The fifth change) 
%  Author: Mr Wu & Mr Gao $Tutor: Professor Jiang
%  $Revision: Beta 1.2 $

%%%%%%%%%%%%%%%%%%%% 参数输入 %%%%%%%%%%%%%%%%%%%%
clc;
clear all;
n = 200;    % 迭代次数
m = 2;       % 阶数
a1 = 1.4;  % 模型参数
a2 = -0.4;
de = 1;
u = 0.005;  % 步长
%=================================================

%%%%%%%%%%%%%%%%%%%% 产生序列 %%%%%%%%%%%%%%%%%%%%
en = randn(1,n);
x(1) = en(1);                   % 赋初值
x(2) = en(2);
nn(1) = 1;
nn(2) = 2;
for L = 3 : n
    x(L) = a1*x(L-1)+a2*x(L-2)+en(L);
    nn(L) = L;
end
x = x';
%=================================================

plot(nn,x); grid on                          % 绘制随机过程的一个取样序列
xlabel('n');
ylabel('x(n)');
title('2阶自回归随机过程的取样序列');

%  ------------------LSL--------------------
%%%%%%%%%%%%%% 利用LSL算法估计权值a1、a2 %%%%%%%%%%%%%%
% 初始化
eb0(1) = 0;     eb1(1) = 0;  
d1(1) = 0;    d2(1) = 0;
gama0(1) = 1;    gama1(1) = 1;
ebf0(1) = de;    ebf1(1) = de;
ebb0(1) = de;    ebb1(1) = de;

% 迭代计算(按时间n=1,2,...)
for L = 2:n 
    eb0(L) = x(L);
    ef0(L) = x(L);
    ebf0(L) = ebf0(L-1)+x(L).^2;
    ebb0(L) = ebb0(L-1)+x(L).^2;
    gama0(L) = 1;
end

% 1阶时(m=0)
for L = 2:n
    d1(L) = d1(L-1)+eb0(L-1).*ef0(L)./gama0(L-1);
    kb1(L) = d1(L)./ebb0(L-1);
    kf1(L) = d1(L)./ebf0(L);
    ef1(L) = ef0(L)-kb1(L).*eb0(L-1);
    eb1(L) = eb0(L-1)-kf1(L).*ef0(L);
    ebf1(L) = ebf0(L)-d1(L).^2./ebb0(L-1);
    ebb1(L) = ebb0(L-1)-d1(L).^2./ebf0(L);
    gama1(L-1) = gama0(L-1)-eb0(L-1).^2./ebb0(L-1);
end

% 2阶时(m=1)
for L = 2:n
    d2(L) = d2(L-1)+eb1(L-1).*ef1(L)./gama1(L-1);
    kb2(L) = d2(L)./ebb1(L-1);
    kf2(L) = d2(L)./ebf1(L);
    ef2(L) = ef1(L)-kb2(L).*eb1(L-1);
    eb2(L) = eb1(L-1)-kf2(L).*ef1(L);
    ebf2(L) = ebf1(L)-d2(L).^2./ebb1(L-1);
    ebb2(L) = ebb1(L-1)-d2(L).^2./ebf1(L);
    gama2(L-1) = gama1(L-1)-eb1(L-1).^2./ebb1(L-1);
end

for L = 1:n
    aa1(L) = kb1(L)-kf1(L).*kb2(L);
    aa2(L) = kb2(L);
    nn(L) = L;
end

figure
plot(nn,aa1,'b',nn,aa2,'c');
grid on
%===============================================

% ---------------------LMS-----------------------
%%%%%%%%%%%%%%%%%%%% 赋初始值 %%%%%%%%%%%%%%%%%%%%
X = [x(2) ; x(1)];
w1 = [0 ; 0];       % 权系数赋初值
e1(2) = x(2)-w1'*X;  % 产生误差信号(LMS)
%=================================================

%%%%%%%%%%%%%%%%%%%% 估计权系数 %%%%%%%%%%%%%%%%%%%%
for k = 3 : n
    w1 = w1+2*u*e1(k-1)*X;       % LMS算法的权系数迭代公式
    X = [x(k-1);x(k-2)];         % 下一时刻的输入信号
    e1(k) = x(k)-w1'*X;          % 下一时刻的输出信号误差e(n)
    a11(k) = w1(1);
    a22(k) = w1(2);
    n1(k) = k;
end
%=================================================
hold on;
plot(n1,a11,'g',n1,a22,'k');   % 绘制LMS算法权系数的收敛特性图
xlabel('n');
ylabel('a1(n),a2(n)');
plotyline(a1,'r');plotyline(a2,'r');
legend('LSL算法a1','LSL算法a2','LMS算法a1','LMS算法a2','理想权值','Location','Best')
title('LSL和LMS算法估计信号模型参数的性能比较 a1=1.558,a2=-0.81');

% ---------初始预测误差剩余对LSL收敛性能的影响------------
% 出示预测误差剩余分别取0.1、1、10

de = [0.1 1 10];
figure

for i = 1:3
% 初始化
ebf0(1) = de(i);    
ebb0(1) = de(i);    

% 迭代计算(按时间n=1,2,...)
for L = 2:n 
    eb0(L) = x(L);
    ef0(L) = x(L);
    ebf0(L) = ebf0(L-1)+x(L).^2;
    ebb0(L) = ebb0(L-1)+x(L).^2;
    gama0(L) = 1;
end

% 1阶时(m=0)
for L = 2:n
    d1(L) = d1(L-1)+eb0(L-1).*ef0(L)./gama0(L-1);
    kb1(L) = d1(L)./ebb0(L-1);
    kf1(L) = d1(L)./ebf0(L);
    ef1(L) = ef0(L)-kb1(L).*eb0(L-1);
    eb1(L) = eb0(L-1)-kf1(L).*ef0(L);
    ebf1(L) = ebf0(L)-d1(L).^2./ebb0(L-1);
    ebb1(L) = ebb0(L-1)-d1(L).^2./ebf0(L);
    gama1(L-1) = gama0(L-1)-eb0(L-1).^2./ebb0(L-1);
end

% 2阶时(m=1)
for L = 2:n
    d2(L) = d2(L-1)+eb1(L-1).*ef1(L)./gama1(L-1);
    kb2(L) = d2(L)./ebb1(L-1);
    kf2(L) = d2(L)./ebf1(L);
    ef2(L) = ef1(L)-kb2(L).*eb1(L-1);
    eb2(L) = eb1(L-1)-kf2(L).*ef1(L);
    ebf2(L) = ebf1(L)-d2(L).^2./ebb1(L-1);
    ebb2(L) = ebb1(L-1)-d2(L).^2./ebf1(L);
    gama2(L-1) = gama1(L-1)-eb1(L-1).^2./ebb1(L-1);
end

for L = 1:n
    aa1(i,L) = kb1(L)-kf1(L).*kb2(L);
    aa2(i,L) = kb2(L);
    nn(i,L) = L;
end
end
plot(nn(1,:),aa1(1,:),'b');
hold on;grid on;
plot(nn(2,:),aa1(2,:),'c');
plot(nn(3,:),aa1(3,:),'g');
xlim([0 100])
xlabel('n');ylabel('a1(n)');
title('初始预测误差剩余对LSL收敛性能的影响');
plotyline(a1,'r')
legend('0.1','1','10','Ideal Value','Location','Best')

⌨️ 快捷键说明

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