卡尔曼滤波过程噪声和测量噪声方差如何选取
大家好,小弟最近刚开始弄MPU6050,想使用卡尔曼作为我的滤波方法现在碰到一个问题就是:过程噪声的方差Q和测量噪声的方差R如何选取的问题
之前看过一个入门帖,温度的例子
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=1487&reltid=2161&pre_thread_id=0&pre_pos=1&ext=
这里Q=1e-6,R=1e-1但也没有提如何选取。网上收了下是根据经验选取{:soso_e103:}
然后在坛子里找到个帖子
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=681
角度的方差噪声,给了0.01,不太清楚如何给的
小弟现在已经有MPU6050二十分钟的静态数据,
请问
1、我该如何从该组数据中提取测量方差R?
2、过程噪声Q又如如何确定?
谢谢各位了{:soso_e154:}
提供下温度模拟示例Matlab代码
clear
N=116;
%w(1)=0;
%w=randn(1,N);
w=0; %系统控制矩阵
x(1)=0;
a=1; %温度模拟A为1
V=randn(1,N);
q1=std(V);
%Rvv=q1.^2;
Rvv=0.1; %测量过程协方差 温度模拟R为1e-1
q2=std(x);
Rxx=q2.^2;
q3=std(w);
%Rww=q3.^2;
%Rww=0.000001 %温度模拟Q为1e-6
Rww = 0.000001; %静态数据的方差
%c=0.6;
c=1; %温度模拟H为1
for k=1:N;
Y(k)=25+sqrt(0.1)*randn(1);%温度模拟平均温度为25度 方差(协方差)为0.1的温度输入 测量方程,其中V为测量系统的噪声,c为测量系统的参数
end
p(1)=10; %协方差 初始值
s(1)=1; %最优估计 初始值
for t=2:N;
s(t)=a*s(t-1)+w; %先验估计 求当前时刻的估计值
p1(t)=a.^2*p(t-1)+Rww; %协方差估计 求当前时刻的估计值的偏差,a为系统参数,没有控制量,所以没有参数b,Rww为噪声
b(t)=c*p1(t)/(c.^2*p1(t)+Rvv); %求Kg,b(t)为Kg,即Kalman增量
s(t)=a*s(t)+b(t)*(Y(t)-a*c*s(t));%后验估计 求t时刻的最优值,即当前时刻的最优值
p(t)=p1(t)-c*b(t)*p1(t); %后验协方差 求当前最状态最优值的偏差,即式子5:(1-c*b(t))*p1(t)
end
figure(1);
plot(Y,'g--');hold on;
plot(s,'r--');hold on;
还有MPU6050的静态数据
本帖最后由 johnsonzzd 于 2012-12-12 11:17 编辑
你的数据,9列各是什么东西?
数学模型:角速度积分得出角度。角速度传感器的零漂等对应模型噪声Q,这个值要小。模型不准,啥都白搭。
测量:加速度值测出来的角度。测量值的方差就是测量方差R。这个值大小不重要,估计一下就行了。
你的温度例子有点复杂,给你写一个简单的便于理解
clc; clear
N=200;
for t=1:N
z(t)=25+3*randn; %测量值
end
R=std(z)^2 %测量噪声
V=0.1*randn(1,N);
Q=std(V)^2 %模型噪声
p(1)=10;
x(1)=0;
for t=2:N;
x1(t)=x(t-1); %预测状态
p1(t)=p(t-1)+Q; %预测估计协方差
k(t)=p1(t)/(p1(t)+R); %最优卡尔曼增益
x(t)=x1(t)+k(t)*(z(t)-x1(t)); %更新状态估计
p(t)=(1-k(t))*p1(t); %更新协方差估计
end
t=1:N;
plot(,,'g',t,z,'b',t,x,'r');
legend('真实值','测量值','估计值');
最后,MPU6050内部自己有算法,能够直接取出角度,不需要自己再写卡尔曼之类的程序了。 johnsonzzd 发表于 2012-12-12 11:09 static/image/common/back.gif
你的数据,9列各是什么东西?
数学模型:角速度积分得出角度。角速度传感器的零漂等对应模型噪声Q,这个值 ...
http://www.geek-workshop.com/forum.php?mod=viewthread&tid=2747
这里面的角度置信度,角速度数据置信度指的是方差吗?都是通过数据测量计算出来的吗?这个值在滤波算法里是不是越小越好? mark :loveliness: 那个不是ARDUINO代码吧,ARDUINO应该是C/C++代码 johnsonzzd 发表于 2012-12-12 11:09
你的数据,9列各是什么东西?
数学模型:角速度积分得出角度。角速度传感器的零漂等对应模型噪声Q,这个值 ...
大神,你好,想请教您一个问题,我现在有加速度计和陀螺仪的数据,怎么实现实现卡尔曼滤波呢?得出一个图像,有一条加速度计的曲线,一条陀螺仪的曲线,一条融合之后的曲线,关键这个图怎么得到呢,我基础比较差。
页:
[1]