卡尔曼滤波的matlab实现
看了三天的卡尔曼滤波 写了个小的滤波程序%%% 观测值 噪声 定义比如超生波 噪声主要是观测噪声
N=800;
real=linspace(4,5,N);
z=real; % 观测值
w=0.5*randn(1,N); %观测噪声
z=z+w; % 加上观测噪声后的观测值
R=(std(w))^2; % 观测噪声的协方差
v=0.01*randn(1,N);% 定义过程噪声
Q=(std(v))^2; %由过程噪声求出协方差
%%%变量初始化
p(1)=1;
x(1)=0;
%%%卡尔曼滤波程序 其中A=1 U=0 H=1
for t=2:N;
x_(t)=x(t-1);
p_(t)=p(t-1)+Q;
k(t)=p_(t)/(p_(t)+R);
x(t)=x_(t)+k(t)*(z(t)-x_(t));
p(t)=(1-k(t))*p_(t);
end
t=1:N;
plot(t,z,'b',t,x,'r',t,real,'k'),legend('观测值','滤波后','实际值');
另外总结的参数变化对滤波的影响 大家看看对不对
当状态转换过程为已确定时, Q 的取值越小越好。当 Q 取值逐渐增大时, 滤波收敛变慢, 且状态变量的扰动变大
R 取值过小或者过大都会造成滤波效果变差
R 取值越大收敛越慢(即动态相应变慢),但是滤波越平滑。
R越大 表示测量噪声越大 越不信任测量值,就是Kg越小当R为无穷时Kg=0完全变为了X(k)=X(k-1)
Q越大 表示过程噪音越大 越不信任过程值,反过来就是相信测量值结果Kg越大 当Q无穷大时Kg=1。 谢谢楼主分享。我已理解卡尔曼基本原理,还没机会实践。。。。。 谢谢楼主分享 xiong57785 发表于 2015-3-10 20:13
另外总结的参数变化对滤波的影响 大家看看对不对
当状态转换过程为已确定时, Q 的取值越小越好。当 Q 取值 ...
采用楼主的程序,对一组数据处理如下。数据来源于二极管测温数据,那一组滤波结果更好呢?
R=25,Q=0.0001
R=9,Q=0.01
mark一下 本帖最后由 bailao99 于 2015-3-11 10:49 编辑
重新定义观测噪声与过程噪声
令
观测噪声是原始数据N点平均值与原始数据之差
过程噪声是观测噪声的0.01
测试发现:随着N增大,Q和Q同步增大,波形平滑程度变化不大,数据如下:
N 3 5 10 50 100 256
R 1.8 2.2 2.4 2.7 2.7 2.8
LZ怎么看待处理结果?
mark!!!谢楼主分享 楼主厉害,正找这方面知识呢,谢谢!
页:
[1]