找回密码
 注册
关于网站域名变更的通知
查看: 416|回复: 1
打印 上一主题 下一主题

转:Kalman滤波的Matlab仿真程序解读

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-27 10:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
最近因为要用到Kalman滤波器做东西,所以一直在学习这个东西,鉴于之前的仿真都是用matlab做的,所以呢,kalman滤波器的仿真程序也是用matlab编的。痛苦了几天,几天这个函数终于搞定了,具体的分析如下。

function [zx,zy]=xyKalmanFliter(A,H,Rw,Rv,Rw_c,Rv_c,x0,p0,y)+ c( m4 }5 h5 o! e, @2 \
%----------------输入参数--------------------------------------------------
% m4 g/ D& ~2 K; Y- ~# ?+ v5 t%      A -- 系统矩阵! A9 }) V3 D) f1 _; P
%      H -- 观察矩阵
! c0 K/ j7 k  r) j: ?" y8 b9 q%     Rw -- 扰动向量% o6 H- _  I: g4 v0 U  z
%     Rv -- 测量噪声
4 I& a  ^2 V+ k  m' P6 |) K%   Rw_c -- 扰动向量的协方差
" t. u5 z" ?6 Z% r$ l& b%   Rv_c -- 测量噪声的协方差
1 d4 _# s$ u; X9 c8 C%     x0 -- 节点初始位置向量(x,y)'
4 m, t7 [% M* q/ {% C%     p0 -- 初试协方差阵
0 X4 B: h9 c5 S8 y%      y -- 采样周期
1 R# I' m3 `/ V' c4 O%--------------------------------------------------------------------------


3 F/ J9 Y' J1 Q& R" P! f%--------------------------------------------------------------------------: z( t# Z1 D' g% q$ `: [
%   X(k) = A*X(k) + Rw(k)     噪声Q* l% G; x2 G$ @1 l8 a" c' ]
%   Z(k) = H*X(k) + Rv(k)     噪声R( B" c) a# g6 j1 x6 M

%  x(k|k-1) = A*x(k-1|k-1) + B*U(k)& n, ~, S, I% }" S: {9 C* `
%  P(k|k-1) = A*P(k-1|k-1)*A' + Q
3 r% r. a- b& i0 d  B  p& ?. @# h%  x(k|k) = x(k|k-1) + kg(k)*(z(k)-H*s(k|k-1))
# ~8 F; F; Y8 E%  kg(k) = P(k|k-1)*H' / (H*P(k|k-1)*H' + R)1 Q  r  a4 p9 L# {: K
%  P(k|k) = (I-kg(k)*H)*P(k|k-1)
  @' a, l5 H0 a% s%--------------------------------------------------------------------------

len = length( y );                                                        %获取采样点数

r = size(A,1);                                                            %获取系统矩阵A的行数$ y' t# `8 ]+ u: |/ q8 D
I= eye( r(1) );                                                           %生成单位矩阵6 e: j  q9 q% Q6 \
P1 = zeros( r(1),r(1) );                                                  %初始化协方差阵

%初始化节点位置,协方差阵! o6 \; N& n& F3 g6 Y2 @
X = x0;
+ Z4 [1 M" S" m* @3 K4 Y7 l; n" ] P = p0;

len1 = size( H*X ,1);
* g8 X; \7 }" X  r& c. _9 ^" `6 Y# t for s=1:1:len9 D' N! q- x# O# K
     z1 = A*X+ Rw;                        % X(k) = A*X(k) + Rw(k)     协方差  Rw_c: F; J  f" p% \
     zx(1:r(1),s) = z1(1:r(1)) ;    ) S+ i; x8 w2 B* J+ S+ `4 L
     z2 = H*X + Rv;                       % Z(k) = H*X(k) + Rv(k)     协方差  Rv_c
& `7 T5 C6 N2 {( a( |. Z     zy(1:len1,s) = z2(1:len1 );
' b. m# r8 s& o. m    ( \; N. C3 Y( ~  J' I
     P1 = A*P*A' + Rw_c;                  %  P(k|k-1) = A*P(k-1|k-1)*A' + Q
7 n4 \% I# C4 E( Y     K = P1*H'*inv( H*P1*H' + Rv_c );     %  kg(k) = P(k|k-1)*H' / (H*P(k|k-1)*H' + R)
) z* S* g, l' p) \  W4 a- g     X = A*X + K*( zy(1:len1,s) - H*A*X );      

                                          %  x(k|k) = x(k|k-1) + kg(k)*(z(k)-H*s(k|k-1))$ @4 W* ?5 s4 \# W/ D
     P = ( I - K*H ) * P1;                %  P(k|k) = (I-kg(k)*H)*P(k|k-1)
6 C1 k9 o) O' O& X0 o+ O2 ?2 N end

) e+ E  W2 V" D, J
return

原文地址:转:Kalman滤波的Matlab仿真程序解读作者:浩瀚

- R' X+ {! W8 q; x; i2 I

该用户从未签到

2#
发表于 2020-4-27 13:27 | 只看该作者
Kalman滤波的Matlab仿真程序解读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-25 20:37 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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