📄 lms.m
字号:
%%%%%%%%%%%%%%%%%%%% 绘制自适应权系数的过渡过程图 P63 图3.15
%%%%%%%%%%%%%%%%%%%% 序列由零均值、单位方差的白噪声通过一个二阶自回归模型产生
%%%%%%%%%%%%%%%%%%%% 参数输入 %%%%%%%%%%%%%%%%%%%%
clc;
clear all;
m = 500; % 迭代次数
u = 0.002; % 步长
lamada = 1; % 收敛因子
a1 = -1.6; % 模型参数
a2 = 0.8
%=================================================
%%%%%%%%%%%%%%%%%%%% 产生序列 %%%%%%%%%%%%%%%%%%%%
en = randn(1,m);
en = (en-mean(en))/var(en); % 将en标准化
x(1) = en(1); % 赋初值
x(2) = en(2);
for i = 3 : m
x(i) = -a1*x(i-1)-a2*x(i-2)+en(i);
end
%=================================================
%%%%%%%%%%%%%%%%%%%% 判断步长取值是否在收敛范围内 %%%%%%%%%%%%%%%%%%%%
trR = m*mean(x.^2);
if u<=0
error('步长超出范围');
else if u>=trR
error('步长超出范围');
end
end
%==================================================================
%%%%%%%%%%%%%%%%%%%% 赋初始值 %%%%%%%%%%%%%%%%%%%%
X = [x(2) ; x(1)];
w1 = [0 ; -1]; % 权系数赋初值
w2 = w1;
R = [0 0 ; 0 0]; % 自相关矩阵初值R(-1)=0
e1(2) = x(2)-w1'*X; % 产生误差信号(LMS)
%=================================================
%%%%%%%%%%%%%%%%%%%% 估计权系数 %%%%%%%%%%%%%%%%%%%%
for k = 3 : m
w1 = w1+2*u*e1(k-1)*X; % LMS算法的权系数迭代公式
X = [x(k-1);x(k-2)]; % 下一时刻的输入信号
e1(k) = x(k)-w1'*X; % 下一时刻的输出信号误差e(n)
R = lamada*R+ X*X'; % 迭代公式中自相关矩阵的计算
e2 = x(k)-w2'*X; % 下一时刻的输出信号误差e(n\n-1)
w2 = w2+inv(R)*X*e2; % RLS算法的权系数迭代公式
a11(k) = -w1(1);
a22(k) = -w1(2);
b11(k) = -w2(1);
b22(k) = -w2(2);
n(k) = k;
end
%=================================================
%%%%%%%%%%%%%%%%%%%% 绘制图形 %%%%%%%%%%%%%%%%%%%%
plot(n,a11,'k',n,a22,'k'); % 绘制LMS算法权系数的收敛特性图
hold on;
plot(n,b11,'b',n,b22,'b'); % 绘制RLS算法权系数的收敛特性图
hold on;
plotyline(0.8,'r');hold on;
plotyline(-1.6,'r'); % 绘制理想权系数图
legend('LMS算法权系数收敛特性a1','LMS算法权系数收敛特性a2',...
'RLS算法权系数收敛特性a1','RLS算法权系数收敛特性a2',...
'理想权系数a1','理想权系数a2','Location','East');
xlabel('迭代次数 n');ylabel('权系数 a');
ylim([-2 1.5])
grid on
%=================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -