clear
u=[10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100];
y=[6.5 9.2 10.4 13.6 19.0 23.4 27.7 29.1 31.1 31.6 32.4 33.6 34.0 34.5 35.1 35.8 36.6 37.4 38.3];
v=randn(1,19); %产生一组正态分布随机噪声
R=corrcoef(u,v); %计算输入信号与随机噪声信号的相关系数
r=R(1,2); %互相关系数
rv=std(v)*std(v); %计算随机噪声的方差
z(2)=0; z(1)=0; zs(2)=0; zs(1)=0;zm(2)=0;zm(1)=0; %赋初值
%Bayes辨识
c0=[0.001 0.001]'; %被辨识参数的初始值
p0=10^6*eye(2,2); %初始状态P0
E=0.00000000005; %相对误差E<=0.000000005为停机准则
c=[c0,zeros(2,18)]; %被辨识参数矩阵的初始值及大小
e=zeros(2,19); %相对误差的初始值及大小
for k=3:19; %开始求K
h1=[y(k-1) u(k-2)]';
x=h1'*p0*h1+rv;
x1=inv(x);
k1=p0*h1*x1;
d1=y(k)-h1'*c0;
c1=c0+k1*d1;
e1=c1-c0;
e2=e1./c0;
e(:,k)=e2;
c0=c1;
c(:,k)=c1;
p1=p0-k1*k1'*[h1'*p0*h1+1];
p0=p1;
if abs(e2)<=E break;
end
end
c,e
%分离赋值
a=c(1,:); %分离出a
b=c(2,:); %分离出b
ea=e(1,:); %分离出ea的收敛情况
eb=e(2,:); %分离出eb的收敛情况
figure(1);
i=1:19;
plot(i,a,'r',i,b,'b') %画出被辨识参数的各次估计值
legend('参数a','参数b')
title('单容水箱液位系统参数辨识')
figure(2);
i=1:19;
plot(i,ea,'r',i,eb,'b') % 画出a,b的各次辨识结果的收敛情况
legend('参数a','参数b')
title('辨识参数的收敛情况')
figure(3)
y1(1)=y(1);
y1(2)=y(2);
for i=3:19;
y1(i)=c(1,19)*y(i-1)+c(2,19)*u(i-2);
ee(i)=y(i)-y1(i);
end
i=1:19;
subplot(3,1,1)
plot(u,y)
title('液位系统实际输出')
ylabel('y(k)')
subplot(3,1,2)
plot(u,y1)
title('辨识后的液位系统输出')
ylabel('y1(k)')
subplot(3,1,3)
plot(u,ee)
title('液位系统输出误差')
ylabel('e(k)')
xlabel('u(k)')
bianshi.zip_single bayes_最小二乘水箱_液位系统_系统辨识
版权申诉
73 浏览量
2022-07-15
10:11:27
上传
评论
收藏 1KB ZIP 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+