找回密码
 注册
关于网站域名变更的通知
查看: 451|回复: 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)
8 a% Q3 `( A* |* E  c$ o; q%----------------输入参数--------------------------------------------------- C* c( |: [( _/ b7 A% ^* j  I
%      A -- 系统矩阵) a1 x# C: c" m
%      H -- 观察矩阵, R+ \  E" t+ V
%     Rw -- 扰动向量/ v- r7 u# S9 R; |) @& U
%     Rv -- 测量噪声
0 i9 d9 Q1 \) R& r) W( I1 J%   Rw_c -- 扰动向量的协方差+ _3 B  t/ G( v' U+ K
%   Rv_c -- 测量噪声的协方差
" n! f6 e. }) l9 ]" c%     x0 -- 节点初始位置向量(x,y)'" I) r; Q; T5 H2 a
%     p0 -- 初试协方差阵
0 y' F6 {, _( B7 f" P( y" f" ~%      y -- 采样周期
# H# \4 L: G7 G. [%--------------------------------------------------------------------------

8 [; K* `) K( ]6 ?) h% M1 x
%--------------------------------------------------------------------------
( c. t( ^+ t9 I0 ?/ B% o%   X(k) = A*X(k) + Rw(k)     噪声Q0 f6 H7 X  {( P9 J$ S
%   Z(k) = H*X(k) + Rv(k)     噪声R
# O8 g! d* O/ L

%  x(k|k-1) = A*x(k-1|k-1) + B*U(k)* k; H/ J4 [) @2 g
%  P(k|k-1) = A*P(k-1|k-1)*A' + Q( x: x1 R: f3 Y
%  x(k|k) = x(k|k-1) + kg(k)*(z(k)-H*s(k|k-1))8 o7 f( E+ k: F. v
%  kg(k) = P(k|k-1)*H' / (H*P(k|k-1)*H' + R)6 Q0 z: Z+ |, ~& u0 ?8 d
%  P(k|k) = (I-kg(k)*H)*P(k|k-1)
* w, X5 I( K' }. G* v& B" V%--------------------------------------------------------------------------

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

r = size(A,1);                                                            %获取系统矩阵A的行数- g/ {( v! S7 x
I= eye( r(1) );                                                           %生成单位矩阵
1 `( U1 c2 C9 y6 P P1 = zeros( r(1),r(1) );                                                  %初始化协方差阵

%初始化节点位置,协方差阵* P0 N+ q  G( |8 \
X = x0;5 j" A3 U" R5 n
P = p0;

len1 = size( H*X ,1);' D+ [4 B7 o* [: [7 _
for s=1:1:len9 d% f' F' K4 e  K) I$ D6 F! o
     z1 = A*X+ Rw;                        % X(k) = A*X(k) + Rw(k)     协方差  Rw_c7 m' S/ }8 z4 o! K1 E' Y8 a8 ?
     zx(1:r(1),s) = z1(1:r(1)) ;    - @4 ]/ E, B' J+ e
     z2 = H*X + Rv;                       % Z(k) = H*X(k) + Rv(k)     协方差  Rv_c( S/ ~; k; H6 G3 O8 B4 V" ?
     zy(1:len1,s) = z2(1:len1 );# ~$ b* R( |% |( X/ M& z
   
* h* k" G1 ]5 g& }6 V2 z/ `     P1 = A*P*A' + Rw_c;                  %  P(k|k-1) = A*P(k-1|k-1)*A' + Q2 C; P: H) [1 m
     K = P1*H'*inv( H*P1*H' + Rv_c );     %  kg(k) = P(k|k-1)*H' / (H*P(k|k-1)*H' + R)
6 g, _7 l$ r( N0 M% ~  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))  S9 Z4 `5 W8 x# i9 d$ {0 T. J* C7 z
     P = ( I - K*H ) * P1;                %  P(k|k) = (I-kg(k)*H)*P(k|k-1)% s& Q, A) p" t! v
end


/ I) P4 h* f1 Z8 creturn

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

1 N) {0 C/ y+ a5 T$ V

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-4 11:10 , Processed in 0.140625 second(s), 24 queries , Gzip On.

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

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

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