目录
一、原理
极大似然参数估计法需要构造一个以观测数据和未知参数为自变量的似然函数,使这个函数达到极大参数值,就是模型的参数估计值。
通常噪声的概率密度函数作为似然函数,所以极大似然函数法需要已知噪声的分布。在最简单的情况下,可假定噪声具有正态分布。
优点:具有良好的渐进性质
缺点:计算量大
考虑控制系统模型简化为CARMA模型:
则递推极大似然参数估计算法公式为:
此方法初值一般取、
算法步骤:
Setp1:设置初值、,输入初始数据;
Step2:采样当前输出y(k)和输入u(k);
Step3:计算,并构造.
Step4:利用上述公式,计算K(k)、和P(k);
Step5:计算、、;
Step6:,返回Step2,继续循环。
二、程序代码
系统为:
式中,是方差为1的白噪声。
取初值为、
选择方差为1的白噪声作为输入信号u(k),采用极大似然估计法进行参数估计。
%递推极大似然参数估计
a=[1 -1.5 0.7]';
b=[1 0.5]';
c=[1 -0.5]';
d=1;%对象参数
na=length(a)-1;nb=length(b)-1;nc=length(c)-1;%na、nb、nc为A、B阶次
nn=max(na,nc);%用于yf(k-i) uf(k-i)更新
L=1000;%仿真长度
uk=zeros(d+nb,1);%输入初值:uk(i)表示u(k-i)
yk=zeros(na,1);%输出初值
xik=zeros(nc,1);%白噪声初值 \xi
xiek=zeros(nc,1);%白噪声估计初值
yfk=zeros(nn,1);%yf(k-i)
ufk=zeros(nn,1);%uk(k-i)
xiefk=zeros(nc,1);%\xif(k-i)
u=sqrt(1.1)*randn(L,1);%输入采用白噪声序列
xi=sqrt(1)*randn(L,1);%白噪声序列 \xi
thetae_1=zeros(na+nb+1+nc,1);%参数估计初值
P=eye(na+nb+1+nc);
for k=1:L
y(k)=-a(2:na+1)'*yk+b'*uk(d:d+nb)+c'*[xi(k);xik];
%构造向量
phi=[-yk;uk(d:d+nb);xiek];
xie=y(k)-phi'*thetae_1;
phif=[-yfk(1:na);ufk(d:d+nb);xiefk];
%递推极大似然参数估计算法
K=P*phif/(1+phif'*P*phif);
thetae(:,k)=thetae_1+K*xie;
P=(eye(na+nb+1+nc)-K*phif')*P;
yf=y(k)-thetae(na+nb+2:na+nb+1+nc,k)'*yfk(1:nc);%yfk
uf=u(k)-thetae(na+nb+2:na+nb+1+nc,k)'*ufk(1:nc);%ufk
xief=xie-thetae(na+nb+2:na+nb+1+nc,k)'*xiefk(1:nc);%xiefk
%更新数据
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);
for i=nc:-1:2
xik(i)=xik(i-1);
xiek(i)=xiek(i-1);
xiefk(i)=xiefk(i-1);
end
xie(1)=xi(k);
xiek(1)=xie;
xiefk(1)=xief;
for i=nn:-1:2
yfk(i)=yfk(i-1);
ufk(i)=ufk(i-1);
end
yfk(1)=yf;
ufk(1)=uf;
end
figure(1)
plot([1:L],thetae(1:na,:),[1:L],thetae(na+nb+2:na+nb+1+nc,:));
xlabel('k');
ylabel('参数估计a、c');
legend('a_1','a_2','c_1');
axis([0 L -2 2]);
figure(2)
plot([1:L],thetae(na+1:na+nb+1,:));
xlabel('k');
ylabel('参数估计b');
legend('b_0','b_1');
axis([0 L 0 1.5]);
三、运行结果
a1=-1.49296309858392
a2=0.699476918865982
b0=1.02141798797169
b1=0.481829921238559
c1=0.00780319291205411
估计参数与理论值有一定差距,系统辨识认为误差在10%以内都是良好的模型复现。
附录:名词解释
1.似然函数:
假设一个袋子里有若干标号1、2的小球,从袋子中取出1的概率为,取出2的概率为
X | 1 | 2 |
P |
假设抽取5次,结果为 1 1 2 1 2
那么似然函数就是这5次结果对应概率的乘积即:
最大似然估计则为函数L取最大时,的值。
降低次数,取ln,得
求关于的导数。
由于样本量少,所以与理论值有差别,这里只举例。
本文参考:1.《系统辨识与自适应控制MATLAB仿真》庞中华 崔红