|
相信大家对卡尔曼这个名字并不陌生,网上也有很多代码,我初次接触也对网上的代码(matleb和C)进行了测试,都或多或少有些疑问
下面是我在网上找到的两段matleb代码,仿真过是可以使用的,现在的问题是代码里由库函数产生的随机数如何转换成调用我电脑里做好
的TXT文件里的数据,请高手指点!
代码一:
clear
clc;
N=300;
CON=5;
x=zeros(1,N);
x(1)=1;p=10;
Q=randn(1,N)*0.2;%过程噪声协方差
R=randn(1,N);%观测噪声协方差
y= R+CON;%加过程噪声的状态输出
for k =2:N
Q1=cov(Q(1:k-1));%过程噪声协方差
Q2=cov(R(1:k-1));
x(k)=x(k-1);%预估计k时刻状态变量的值
p=p+Q1;%对应于预估值的协方差
kg=p/(p+Q2);%kalman gain
x(k)=x(k)+kg*(y(k)-x(k));
p=(1-kg)*p;
end
Q=randn(1,N)*0.2;%过程噪声协方差
R=randn(1,N);%观测噪声协方差
y=R+CON;%加过程噪声的状态输出
for k=2:N
Q1=cov(Q(1:k-1));%过程噪声协方差
Q2=cov(R(1:k-1));
x(k)=x(k-1);%预估计k时刻状态变量的值
p=p+Q1;%对应于预估值的协方差
kg=p/(p+Q2);%kalman gain
x(k)=x(k)+kg*(y(k)-x(k));
p=(1-kg)*p;
end
Filter_Wid=10;
smooth_res=zeros(1,N);
kalman_p=zeros(1,N);
for i=Filter_Wid+1:N
tempsum=0;
kalman_m=0;
for j=i-Filter_Wid:i-1
tempsum=tempsum+y(j);
kalman_m=kalman_m+x(j);end
kalman_p(i)=kalman_m/Filter_Wid;
smooth_res(i)=tempsum/Filter_Wid;%平滑滤波
end
% figure(1); % hist(y);
t=1:N;
figure(1);
expValue=zeros(1,N);
for i=1:N
expValue(i)=CON;
end
plot(t,expValue,'r',t,x,'g',t,y,'b',t,smooth_res,'k',t,kalman_p,'m');
legend('truth','estimate','measure','smooth result','smooth kalman');
%axis([0 N 0 30])
xlabel('Sample time');
ylabel('Room Temperature');
title('Smooth filter VS kalman filter');
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|