递推最小二乘参数估计(RLS)
考虑如下系统:
式中x(k)为方差为0.1的白噪声。
clear all; close all;
a=[1 -1.5 0.7]';b=[1 0.5]';d=3; %对象参数
na=length(a)-1;nb=length(b)-1;%计算阶次,na=2,nb=1
L=500; %数据长度(仿真长度)
uk=zeros(d+nb,1);yk=zeros(na,1);%输入输出初值uk:4x1,ykx1
u=randn(L,1); %输入采用方差为1的白噪声序列
xi=sqrt(0.1)*randn(L,1); %方差为0.1的白噪声干扰序列
theta=[a(2:na+1);b];%对象参数真值theta=[-1.5,0.7;1,0.5]
thetae_1=zeros(na+nb+1,1); %参数初值q为4x1的全零矩阵
P=10^6*eye(na+nb+1);
for k=1:L
phi=[-yk;uk(d:d+nb)]; %此处phi为列向量4x1
y(k)=phi'*theta+xi(k); %采集输出数据
%递推公式
K=P*phi/(1+phi'*P*phi);
thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1);
P=(eye(na+nb+1)-K*phi')*P;
%更新数据
thetae_1=thetae(:,k);
fori=d+nb:-1:2
uk(i)=uk(i-1);
end
uk(1)=u(k);
fori=na:-1:2
yk(i)=yk(i-1);
end
yk(1)=y(k);
end
plot([1:L],thetae);%line([1:L],[theta,theta]);
xlabel('k');ylabel('参数估计a,b');
legend('a_1','a_2','b_0','b_1');
axis([0 L -2 2]);