搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2014-6-30 11:19:43 | 显示全部楼层 |阅读模式
小弟最近学习卡尔曼滤波,手头上正好有角度摆(陀螺仪和加速度计)。
下面是我的建模方程:
[x1(t+1); x2(t+1)] = [1, -T; 0, 1][x1(t); x2(t)] + [Ts; 0]ugyro(t) + w(t)

z(t) = [1; 0][x1(t); x2(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=[1,-0.02;0,1];
B=[0.02;0];
C=[1,0];
y=w+x1;%测量方程

X=[0;0];%初始状态
P0=[0.005,0.005;0.005,0.005];
Q=[0.5,0;0,0.01];
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值,然后看滤波效果,然后不断调整呢?这个也太麻烦了,也有说用自适应的。

出0入0汤圆

 楼主| 发表于 2014-6-30 17:30:27 | 显示全部楼层
都没人,自己顶
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-6 07:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表