模块化编程便于程序的阅读、理解和二次开发,本文将《系统辨识与自适应控制Matlab仿真》书中递推极大似然参数估计算法改写为Matlab子函数的形式,方便以后调用。
function [theta] = LG_RML(u,y,oa,ob,od)
% Writer: GeoLee
% Date: 2015.9.25
% 参数说明:
% CARMA模型:A[z^(-1)]*y(k) = B[z^(-1)]*u(k) + D[z^(-1)]*e(k)
% A[z^(-1)] = 1 + a1*z^(-1) + ... + a_na*z^(-na);
% B[z^(-1)] = b0 + b1*z^(-1) + ... + b_nb*z^(-nb);
% D[z^(-1)] = 1 + d1*z^(-1) + ... + d_nd*z^(-nd);
% u: 输入向量
% y: 输出向量
% oa: A的阶数, ob:B的阶数, od: D的阶数
% theta: 估计的参数
% 例子:
% y(k) = 1.5y(k-1)-0.7y(k-2)+u(k)+0.5u(k-2)+e(k)-0.5e(k)
% theta应为[1.5,-0.7,1,0.5,-0.5]的估计值
% 参数初始化
na = oa - 1;nb = ob - 1;nc = od - 1;d = 1;
L = length(u);%驱动数据个数
nn = max(na,nc);
uk = zeros(d + nb,1);%输入初值
yk = zeros(na,1);%输出初值
vk = zeros(nc,1);% 白噪声估计初值
yfk =