zhaoqingtao008 发表于 2014-6-30 11:19:43

请教一个关于卡尔曼滤波的问题

小弟最近学习卡尔曼滤波,手头上正好有角度摆(陀螺仪和加速度计)。
下面是我的建模方程:
= + ugyro(t) + w(t)

z(t) = + v(t)

x1 = 角度
x2 = 陀螺仪的漂移
下面是我写的MATLAB代码,大家不要喷我。
%两个状态变量:1、为角度;2、为陀螺仪的误差。
n=300;
x1=4;
for i=1:n
    real_value(i)=x1;
end

R=100; %测量方差
w=sqrt(R)*randn(1,n);%观测噪声

yuce=zeros(2,n);
A=;
B=;
C=;
y=w+x1;%测量方程

X=;%初始状态
P0=;
Q=;
P1=zeros(2,2);
%---------------------------
for i=1:n;
    tempx=X;               %迭代
    %-----------------------
    xdot=A*tempx+B;          %预测
    P1=A*P0*A'+Q;            %预测
    %----------------------
    K=P1*C'*inv(C*P1*C'+R);%用于修正
    %------------------------            
    x=xdot+K*(y(i)-C*xdot);%修正
    P0=P1-K*C*P1;   
    %----------迭代-----------
    X=x;                     %迭代,最优估计值作为下一次的迭代值   
   
    yuce(1,i)=x(1);
end

figure
plot(y,'b');          %加入噪声后的角度值
hold on
plot(real_value,'k'); %真实角度值
hold on
plot(yuce(1,:),'r');%滤波后的角度值
title('角度大小');

现在比较困惑我的是其中的Q(过程噪声)和R(测量噪声)的选取问题。网上也没有找到关于这方面的信息。
我自己关于R(测量噪声)的想法是:用加速度计测量出一组数据,直接拉到MATLAB求取方差,但是不知道这个对不对。
还有关于Q的选取就更加没有头绪了,有的人说用经验选取,是不是给一个很小的Q值,然后看滤波效果,然后不断调整呢?这个也太麻烦了,也有说用自适应的。

zhaoqingtao008 发表于 2014-6-30 17:30:27

都没人,自己顶
页: [1]
查看完整版本: 请教一个关于卡尔曼滤波的问题