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

📄 lsl.m

📁 matlab,自适应滤波算法
💻 M
字号:
%%%%%%%%%%%%%%%%%%%% 参数输入 %%%%%%%%%%%%%%%%%%%%
clc;
clear all;
n = 300;    % 迭代次数
m = 2;       % 阶数
a1 = 1.558;  % 模型参数
a2 = -0.81;
de = 10;      % 误差剩余
%=================================================

%%%%%%%%%%%%%%%%%%%% 产生序列 %%%%%%%%%%%%%%%%%%%%
en = randn(1,n);
en = (en-mean(en))/var(en);     % 将en标准化
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                          % 绘制随机过程的一个取样序列

%%%%%%%%%%%%%% 利用LSL算法估计权值a1、a2 %%%%%%%%%%%%%%
% 初始化
for i = 1:m
    eb(i,1) = 0;  
%     ef(i,1) = 0; 
    d(i,1) = 0;
    gama(i,1) = 1;
    ebf(i,1) = de;
    ebb(i,1) = de;
end

% 迭代计算(按时间n=1,2,...)
for L = 2:n 
    eb(1,L) = x(L);
    ef(1,L) = x(L);
    ebb(1,L) = ebf(1,L-1)+x(L).^2;
    ebf(1,L) = ebf(1,L-1)+x(L).^2;
    gama(1,L) = 1;
end

% 迭代计算(按阶m=1,1,...,M)
nn(1) = 1;
for i = 2:m
    for L = 2:n
        d(i,L) = d(i,L-1)+eb(i-1,L-1).*ef(i-1,L)./gama(i-1,L-1);
        kb(i,L) = d(i,L)./ebb(i-1,L-1);
        kf(i,L) = d(i,L)./ebf(i-1,L);
        ef(i,L) = ef(i-1,L)-kb(i,L).*eb(i-1,L-1);
        eb(i,L) = eb(i-1,L-1)-kf(i,L).*ef(i-1,L);
        ebf(i,L) = ebf(i-1,L)-d(i,L).^2./ebb(i-1,L-1);
        ebb(i,L) = ebb(i-1,L-1)-d(i,L).^2./ebf(i-1,L);
        gama(i,L-1) = gama(i-1,L-1)-eb(i-1,L-1).^2./ebb(i-1,L-1);
        nn(L) = L;
    end
end
for L = 1:n
    aa1(L) = kb(1,L)-kf(1,L).*kb(2,L);
    aa2(L) = kb(2,L);
end

figure
plot(nn(1:100),-aa1(1:100),nn(1:100),-aa2(1:100));
plotyline(-0.81,'r');plotyline(1.558,'r');
grid on

⌨️ 快捷键说明

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