找回密码
 注册
关于网站域名变更的通知
查看: 440|回复: 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)
) m& b  ~. {4 U  a" H" m! G%----------------输入参数--------------------------------------------------
! f/ T0 R% N3 X" r& H% ^. _%      A -- 系统矩阵
- h; ?& f4 E1 M%      H -- 观察矩阵
) c9 }1 K5 u- h* H1 w& ?%     Rw -- 扰动向量# |, s4 K4 _; J8 Y+ W
%     Rv -- 测量噪声* i, h* I! r& G5 l! X2 O
%   Rw_c -- 扰动向量的协方差: _  i( T: @6 o* g
%   Rv_c -- 测量噪声的协方差
7 [6 k* K  L9 w- [0 ?- R% L%     x0 -- 节点初始位置向量(x,y)'7 [# {# l) ]6 E0 z$ I: A* Z
%     p0 -- 初试协方差阵
6 {2 \5 S9 D" T6 B%      y -- 采样周期
* b; y8 ~) S4 M- M/ k+ v5 Y8 C%--------------------------------------------------------------------------


# K% R, ]% J6 F( N; U* J+ @%--------------------------------------------------------------------------& N1 X9 C9 \! p9 e# D& Q. [
%   X(k) = A*X(k) + Rw(k)     噪声Q; u/ c, b  h5 [/ z3 v" G5 S# f
%   Z(k) = H*X(k) + Rv(k)     噪声R8 T! m# x$ s2 w. L5 M: [

%  x(k|k-1) = A*x(k-1|k-1) + B*U(k)
3 r& P# K, X: y0 @& ]- u%  P(k|k-1) = A*P(k-1|k-1)*A' + Q
* E% `* d. T, N; M%  x(k|k) = x(k|k-1) + kg(k)*(z(k)-H*s(k|k-1))
6 H" ^9 c% v% V8 i- w) t1 K! R%  kg(k) = P(k|k-1)*H' / (H*P(k|k-1)*H' + R)6 A1 D/ U6 I0 R
%  P(k|k) = (I-kg(k)*H)*P(k|k-1)" K6 ]7 R$ M$ D1 p! O0 j- P- e
%--------------------------------------------------------------------------

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

r = size(A,1);                                                            %获取系统矩阵A的行数* Q5 G: S+ V% K9 z
I= eye( r(1) );                                                           %生成单位矩阵
" P3 `* P$ S" H+ Z P1 = zeros( r(1),r(1) );                                                  %初始化协方差阵

%初始化节点位置,协方差阵9 d  X, b$ b% C; L. X& t6 G0 j
X = x0;
% f- i& q& F" m) V% F P = p0;

len1 = size( H*X ,1);
+ G" [' O$ N' l$ }% Z0 T4 c for s=1:1:len
, H" w4 f# p4 z- W     z1 = A*X+ Rw;                        % X(k) = A*X(k) + Rw(k)     协方差  Rw_c$ s4 Y! D" U' w/ c) A3 F7 `6 C& i
     zx(1:r(1),s) = z1(1:r(1)) ;   
# r9 D  ]- L8 k' O( ?     z2 = H*X + Rv;                       % Z(k) = H*X(k) + Rv(k)     协方差  Rv_c
; l2 C: _6 |5 ^     zy(1:len1,s) = z2(1:len1 );: ^# t% ^' M5 Z! t0 K$ @
   
0 D# k' Q" K  b2 B! A. K     P1 = A*P*A' + Rw_c;                  %  P(k|k-1) = A*P(k-1|k-1)*A' + Q9 P& G) \- l- h% \
     K = P1*H'*inv( H*P1*H' + Rv_c );     %  kg(k) = P(k|k-1)*H' / (H*P(k|k-1)*H' + R): S  ~- ~7 `' ^, d+ s) _( z+ A/ C% F
     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))
( `. |/ ~' h/ y6 {! f+ i     P = ( I - K*H ) * P1;                %  P(k|k) = (I-kg(k)*H)*P(k|k-1)
2 G( n; u9 [5 q. _( z, g" ]2 b end

; p* @* H/ L6 ~" d
return

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


: e( u4 F: i5 I

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-23 13:05 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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