%遗忘因子递推最小二乘参数估量(FFRLS)
考虑如下系统:
y(k)?a1y(k?1)?a2y(k?2)?b0u(k?3)?bu1(k?4)??(k) 式中(k)为均值为0、方差为的白噪声, 对象时变参数?(k)?[a1,a2,b0,b1]T为:
T??[?1.5,0.7,1,0.5],k?500 ?(k)??T??[?1,0.4,1.5,0.2],k?500取遗忘因子=,
采纳方差为1的白噪声序列作为输入信号u(k):
clear all; close all;
a=[1 ]';b=[1 ]';d=3; %对象参数
na=length(a)-1;nb=length(b)-1; %计算阶次 L=1000;%数据长度
uk=zeros(d+nb,1);yk=zeros(na,1); %输入输出初值 u=randn(L,1); %输入采纳方差为1的白噪声序列 xi=sqrt*randn(L,1); % 方差为的白噪声干扰序列
%theta=[a(2:na+1);b]; %对象参数真值 thetae_1=zeros(na+nb+1,1); %参数初值 P=10^6*eye(na+nb+1); lambda=; %遗忘因子范围[ 1]
for k=1:L if k==501
a=[1 -1 ]';b=[ ]'; %对象参数突变 end
theta(:,k)=[a(2:na+1);b]; %对象参数真值
phi=[-yk;uk(d:d+nb)];
y(k)=phi'*theta(:,k)+xi(k); %采样输出数据
%遗忘因子递推最小二乘公式 K=P*phi/(lambda+phi'*P*phi);
thetae(:,k)=thetae_1+K*(y(k)-phi'*thetae_1); P=(eye(na+nb+1)-K*phi')*P/lambda;
%更新数据
thetae_1=thetae(:,k); for i=d+nb:-1:2 uk(i)=uk(i-1); end uk(1)=u(k);
for i=na:-1:2
yk(i)=yk(i-1); end yk(1)=y(k); end
subplot(2,1,1);
plot([1:L],thetae(1:na,:));hold on;plot([1:L],theta(1:na,:),'k:'); xlabel('k');ylabel('参数估量a'); legend('a_1','a_2');axis([0 L -2 2]); subplot(2,1,2);
plot([1:L],thetae(na+1:na+nb+1,:));hold on;plot([1:L],theta(na+1:na+nb+1,:),'k:'); xlabel('k');ylabel('参数估量b'); legend('b_0','b_1');axis([0 L 2]);
相关推荐: