设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 713|回复: 2

扩展卡尔曼滤波小程序

[复制链接]
  • TA的每日心情
    郁闷
    2018-5-7 15:44
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    累计签到:10 天
    连续签到:1 天
    发表于 2017-4-5 11:56:50 | 显示全部楼层 |阅读模式
    电子图书
    电子图书名: 扩展卡尔曼滤波小程序
    编者: H
    内容简介: 简单的卡尔曼滤波程序
    所属专业方向: matlab
    出版社:
    来源:

    马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

    您需要 登录 才可以下载或查看,没有账号?立即加入

    ×
    % function  EXT Kalman Filtering# f) i3 C1 _( F. J! _/ m$ ^! H
    % vx[n]=vx[n-1]+ux[n]& }" R! c9 {# K, f& j
    % vy[n]=vy[n-1]+uy[n]
    & S' [( U5 j7 k7 J- s: ~- H% rx[n]=rx[n-1]+vx[n-1]*t$ A3 _, z" @! G4 v% V3 O. T
    % ry[n]=ry[n-1]+vy[n-1]*t
    / O* H7 a  h' d& U$ b# Z% s[n]=[rx[n];ry[n];vx[n];vy[n]]/ H( t% G/ e5 M5 s6 j7 ]- a
    % A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]
    / O4 o" ~0 v- R0 S% s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    + i2 S. F0 y2 x# X4 g% ^% u[n]=[0;0;ux[n];uy[n]]4 E% x' t2 ]0 N8 F; h+ N. U2 g
    %       s[n]=As*[n-1]+u[n]* P4 c; ~; F6 Z! M( ~: n: d' ^
    %       x[n]=h(s[n])+w[n]
    ' B( @$ N  g- B  ]; n: ^# O# V" E( G- {- _5 }2 r" ^
    % initialization
    5 m6 e* O* c# v( \: Bclear;
    : }3 k' U" s8 w) Pn=100;/ c' e1 ~- H2 J& d
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];* d% D: [$ t) y$ W
    rx=zeros(1,n); % 实际位置
      P5 E9 h9 j) k0 |+ Jry=zeros(1,n); % 实际位置
      h) u9 V3 C4 x7 h4 E# g" C; avx=zeros(1,n); % 实际速度; T) ~7 y; v: l# U
    vy=zeros(1,n); % 实际速度3 m' ~7 R6 ^. G
    rxe=zeros(1,n); % 精确位置8 Q* S. i& l& {, W: s% l
    rye=zeros(1,n); % 精确位置
    3 ^6 y0 k9 O0 Y' s0 u/ v% y, ?0 Evxe=zeros(1,n); % 精确速度
    + G/ m) w0 ^* A. q6 U# I! X  Dvye=zeros(1,n); % 精确速度
    3 S5 Y8 P* i$ K( Q( I1 urx(1,1)=10; % 位置初始2 J; }  q* ?# K, O8 ?4 v1 D
    ry(1,1)=-5; % 位置初始
    - T, C( S* \' X0 I' Zvx(1,1)=-0.2; % 速度初始
    0 q/ n0 _. c% M( w# D) ^5 k6 svy(1,1)=0.2; % 速度初始) n7 h) X  O( F  }5 ?+ H
    rxe(1,1)=10;
    8 |( h" c( f/ F, e; E) D2 urye(1,1)=-5;
    - S" {/ v; i! v  Hvxe(1,1)=-0.2;
    2 f# e/ c4 `1 |- d* v3 hvye(1,1)=0.2;# `% {) Y# i4 |' S
    s=[rx;ry;vx;vy];
    7 q( i8 `" p# W; r* i! W+ h- zse=[rxe;rye;vxe;vye];! ^$ Y# s2 z* v! }8 i
    r=zeros(1,n);4 Z* k) n; z2 K2 j
    b=zeros(1,n);
    ) [2 r4 J7 ^" `9 n% F) [( xrn=zeros(1,n);- U6 l5 L# p" ^) l: C. G
    re=zeros(1,n);
    . L) I5 u+ F" y0 B% c2 A4 \bn=zeros(1,n);! M0 B2 }: L/ w$ F; ~* Q
    x=[rn;bn];" \' c# ^& D; {
    H=zeros(2,4,n);, `9 Y' d1 ?5 f7 G$ }3 D- Z, u# Y- |1 b

    . ~4 ?1 @3 a; U  M7 q# ?2 L  wux=sqrt(0.00001)*randn(1,n);
    " X) b1 T4 Q6 Auy=sqrt(0.00001)*randn(1,n);
    5 G" j" H, L% n( x! R" X* z& |  Qwr=sqrt(0.001)*randn(1,n);
    & z1 R1 }/ M4 g( J' fwb=sqrt(0.0001)*randn(1,n);- w$ C0 W! n+ Q  U
    7 d% ~9 W1 [2 h" g, C. e
    Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    & W$ E" _, I) V! [C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    - n$ d5 |) \/ j& |) n9 t! r& |7 q, x* P
    ss=zeros(4,n);% 精确值, v. j( K: _4 ?
    sn=zeros(4,n); % 估计修正值
    + F# C; k+ p" V0 j8 g4 o( esn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值& P$ o% v. K- {
    ss=zeros(4,n); % 一步预测- F' ^# i& W. [( W
    hs=zeros(2,n); % 观测值预测5 @  s  z6 r$ m8 g4 q* `; Q
    inn=zeros(2,n); % 新息) P4 D/ T8 H  g' B7 ?) d6 ?, J
    M=zeros(4,4,n); % 估计均方误差! a% C0 s% I5 k! R( n2 P  s7 B
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值9 ^* l4 C6 ?9 \& L" s
    MM=zeros(4,4,n); % 一步预测均方误差
    9 O: b. n: G' \+ s0 `K=zeros(4,2,n); % 卡尔曼增益
    : K5 R4 Z7 s% {( G
    7 g4 x1 x5 d. r% `! n, s( \$ q7 Y7 A% kalman filtering* g1 i9 H' N6 A; _4 x7 z! k9 `6 K

      Z2 K/ m# ^9 u: h; b# g1 Efor t=1:n-1
    : H6 X/ I4 k* l& f) i: l%            s[n]=As*[n-1]+u[n]1 q; x& m- h9 l/ N7 b* p1 n7 h) u' J  |
    %            x[n]=h(s[n])+w[n]
      w3 f- m  r4 M$ Y8 l$ b# t! o
    8 s! r) q/ A6 n$ N) M    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    ! g9 T4 d2 N. [% [( ]% O; @: t    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    + k* r3 b/ d7 Q! W! m" s) ^    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    : N% \. z7 D" @3 e* E0 N    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程* m5 U5 ^( J' v  b8 @
        s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*15 x3 \  P7 y8 I" e
    $ r' B8 c' j1 O; p' u  H4 G, A: r
        vxe(1,t+1)=vxe(1,t); % 理论精确值
    : y9 U& O/ W+ f( f2 a    vye(1,t+1)=vye(1,t); % 理论精确值
    . n% e  X( D' y2 @, v9 r    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值
    # Z" M* }# T. Q; b0 Z" r    rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    . s7 N" Z- }. B* @- i    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1( M+ D6 f; l& j9 d) W% m

    # g) N$ V- m" _! V& {  f    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    ( e  _5 @% o. I# s! r+ ?- j    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)9 o6 k5 _$ N; [" |: \! ?
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    " p) h, e# ?0 B5 ^" n    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)2 Y, T8 |, E* n* S, s( O
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    1 ~: I/ ^4 N3 T    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    * r: C: \3 C: q$ S( |7 `
    ) ~# A& `9 v% N) b8 s" S$ j# W    % 对观测方程求导,得到雅可比矩阵H,维数2*4
    ; k; [2 E# v8 x. v8 a. b    H(:,:,t+1)=[rx(1,t+1)/((rx(1,t+1)^2+ry(1,t+1)^2)^(1/2)) ry(1,t+1)/((rx(1,t+1)^2+ry(1,t+1)^2)^(1/2)) 0 0;-ry(1,t+1)/(rx(1,t+1)^2+ry(1,t+1)^2) rx(1,t+1)/(rx(1,t+1)^2+ry(1,t+1)^2) 0 0];1 L! u7 x. _7 |: v' `# D! |
    ' f3 E* ?/ h' ]0 {/ ?
    ! e" b& {1 l: E/ g- x  I" Y0 t
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差2 n0 p* I- E1 W/ d9 D) _0 N; r5 o
        K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    7 D9 r% h5 v! l" E3 X: n  q    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差7 {( d) d2 y; i- z1 \
        ss(:,t+1)=A*sn(:,t); % 一步预测/ Y' q* v$ R8 M" d" v
        hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测. y, i; C2 ]) p9 R! i' t' V
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    4 {% m2 p1 t  T2 T    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正( ^( X& B7 {/ a6 W1 L5 j
    end) u% j& `* f; U

    / [: W2 s" C8 R' esubplot(2,1,1);
    , L6 W2 C# G) j6 G, A, A8 rplot(sn(1,:),sn(2,:)); % kalman估计值
    # u9 l. H& Z/ Ohold on;+ |/ Y6 z& ^& G+ ]" m% ]3 b
    plot(se(1,:),se(2,:),'-r'); % 理论精确值% L+ G2 F+ X8 `
    % Z8 l" T* z6 U# x
    subplot(2,1,2);
    ( v3 [8 K3 ^3 ]/ Bplot(rn); % 实际测量距离; J& R" ~! m. j( \% Y$ o
    hold on;& F9 r5 }0 s9 B, O& k& I
    plot(re,'-g'); % 理论精确值
    2 |, z  l& x  @/ `$ t4 W% {, o2 ^: j( W( J1 a6 _9 J
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • TA的每日心情
    郁闷
    2018-5-7 15:44
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    累计签到:10 天
    连续签到:1 天
     楼主| 发表于 2017-4-5 11:58:00 | 显示全部楼层
    这是一个位置和速度跟踪的小程序,感兴趣的可以看一下
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    [发帖际遇]: 帮助老师傅注册上研学论坛,HYSYYRPS受奖励威望5 点. 幸运榜 / 衰神榜
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    回复 推荐 踩下

    使用道具 举报

  • TA的每日心情
    郁闷
    2018-5-7 15:44
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    累计签到:10 天
    连续签到:1 天
     楼主| 发表于 2017-4-5 11:59:36 | 显示全部楼层
    有没有同学是电力系统方向的,有的话,有没有做电力系统状态估计方向的,可以交流下
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
    回复 推荐 踩下

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即加入

    本版积分规则

    招聘斑竹

    小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

    GMT+8, 2026-4-16 02:56

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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