ARX
ARX
clc;
clear;
close all;
%% 参数设置
na = 2; % A(z)阶数
nb = 2; % B(z)阶数
nk = 1; % 输入延迟
N = 1000; % 数据点数
%% 生成时不变系统数据
% 真实参数
% 生成输入和噪声
u = randn(N, 1);
% 初始化输出
% 生成输出数据
a_true(1)
for k = 4:N
end
%% 时不变系统参数估计
start_idx = 4
% 递推最小二乘 (RLS)
innovation = zeros(N,1);
I_eye = eye(5);
for k = start_idx:N
y_k = y(k);
innovation(k)=y_k-phi'*theta_hat(:,k-1);
Lt = P_t*phi/(1+phi'*P_t*phi);
P_t = (I_eye-Lt*phi')*P_t;
theta_hat(:,k) = theta;
end
theta_hat;
% 带遗忘因子 RLS
innovation_ff = zeros(N,1);
for k = start_idx:N
phi = [-y(k-1), -y(k-2), u(k-1), u(k-2), u(k-3)]';
y_k = y(k);
innovation_ff(k)=y_k-phi'*theta_rls_ff(:,k-1);
P_ff = (I_eye-Lt_ff*phi')*P_ff/lambda;
theta_rls_ff(:,k) = theta_ff;
end
%% 时不变系统结果可视化
figure('Name','时不变系统参数估计');
subplot(2,2,1);
plot(theta_hat(1:2,start_idx:end)');
hold on;
title('AR 参数估计');
legend('a1-RLS','a2-RLS','真实值');
subplot(2,2,2);
plot(theta_hat(3:5,start_idx:end)');
hold on;
title('X 参数估计');
legend('b0-RLS','b1-RLS','b2-RLS','真实值');
subplot(2,2,3);
plot(theta_rls_ff(1:2,start_idx:end)');
hold on;
title('AR 参数估计(RLS-FF)');
legend('a1-RLS','a2-RLS','真实值');
subplot(2,2,4);
plot(theta_rls_ff(3:5,start_idx:end)');
hold on;
title('X 参数估计(RLS-FF)');
legend('b0-RLS','b1-RLS','b2-RLS','真实值');
figure('Name','innovation 对比')
subplot(3,1,1);
plot(innovation(start_idx:end)');
subplot(3,1,2);
plot(innovation_ff(start_idx:end)');
subplot(3,1,3);
plot(innovation(start_idx:end)','b');
hold on;
plot(innovation_ff(start_idx:end)','r');
%% 生成时变系统数据
% 时变参数设置
% 生成输出数据
for k = 4:N
end
%% 时变系统参数估计
% 标准 RLS
innovation_tv = zeros(N,1);
for k = start_idx:N
ytv = y_tv(k);
innovation_tv(k)=ytv-phi_tv'*theta_rls_tv(:,k-1);
Lt_tv = P_rls_tv*phi_tv/(1+phi_tv'*P_rls_tv*phi_tv);
P_rls_tv = (I_eye-Lt_tv*phi_tv')*P_rls_tv;
thetaa = theta_rls_tv(:,k-1) + Lt_tv * innovation_tv(k);
theta_rls_tv(:,k) = thetaa;
end
% 带遗忘因子 RLS
% 带遗忘因子 RLS
innovation_ff_tv = zeros(N,1);
for k = start_idx:N
y_ftv = y_tv(k);
innovation_ff_tv(k)=y_ftv-phi_ff'*theta_rls_ff_tv(:,k-1);
theta_rls_ff_tv(:,k) = theta_ff_tv;
end
%% 时变系统结果可视化
figure('Name','时变系统参数估计');
subplot(2,2,1);
plot(theta_rls_tv(1:2,start_idx:end)');
hold on;
title('AR 参数估计');
legend('a1-RLS','a2-RLS','真实值');
subplot(2,2,2);
plot(theta_rls_tv(3:5,start_idx:end)');
hold on;
title('X 参数估计');
legend('b0-RLS','b1-RLS','b2-RLS','真实值');
subplot(2,2,3);
plot(theta_rls_ff_tv(1:2,start_idx:end)');
hold on;
title('AR 参数估计(RLS-FF)');
legend('a1-RLS','a2-RLS','真实值');
subplot(2,2,4);
plot(theta_rls_ff_tv(3:5,start_idx:end)');
hold on;
legend('b0-RLS','b1-RLS','b2-RLS','真实值');
figure('Name','innovation 对比')
subplot(3,1,1);
plot(innovation_tv(start_idx:end)');
subplot(3,1,2);
plot(innovation_ff_tv(start_idx:end)');
subplot(3,1,3);
plot(innovation_tv(start_idx:end)','b');
hold on;
plot(innovation_ff_tv(start_idx:end)','r');