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

 找回密码
 立即加入
搜索
查看: 621|回复: 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: E5 z4 h5 e" d4 I; L! N9 b
    % vx[n]=vx[n-1]+ux[n]6 [5 ^* k" t: C
    % vy[n]=vy[n-1]+uy[n]( G5 z0 v; \6 X0 [+ Q
    % rx[n]=rx[n-1]+vx[n-1]*t" U# A" R* p! }% L. Z
    % ry[n]=ry[n-1]+vy[n-1]*t/ ~6 y: \5 W5 l, a
    % s[n]=[rx[n];ry[n];vx[n];vy[n]]
    # F/ M- y, h$ Y, Z" L% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]3 a' J: l6 I: r+ M
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]& g! R. x" s$ l
    % u[n]=[0;0;ux[n];uy[n]]: q0 a  F7 g; Q- }, X" Z9 l
    %       s[n]=As*[n-1]+u[n]' E6 h& O1 ~4 N* }
    %       x[n]=h(s[n])+w[n]
    - |* F8 ?) ?, g5 z
    3 g+ `3 c" o0 P7 s& O+ P% initialization
    * K/ W( \6 {2 W! g1 iclear;3 @) k6 i9 Q8 }5 m
    n=100;$ y3 W8 @' }4 I, H
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    # t& A4 V' f/ y& Irx=zeros(1,n); % 实际位置
    ! J$ |3 ]7 s2 f6 Z0 v5 qry=zeros(1,n); % 实际位置
      w6 e& b0 B  Pvx=zeros(1,n); % 实际速度
    - |  A" N; z3 J# B) Lvy=zeros(1,n); % 实际速度/ @6 J' h2 a/ L; o) M+ Q
    rxe=zeros(1,n); % 精确位置* B4 m6 K% T6 @: C# B' H% v3 q
    rye=zeros(1,n); % 精确位置
    # d* A; Y7 X' C3 B7 \vxe=zeros(1,n); % 精确速度; Z4 X% I; H( Y- g( g$ K- ~
    vye=zeros(1,n); % 精确速度; _; v& ?# u/ W" ~2 n. S
    rx(1,1)=10; % 位置初始; P. D' N0 u: b: [# q
    ry(1,1)=-5; % 位置初始
    , V% p9 Y& f: e* Fvx(1,1)=-0.2; % 速度初始
    , S1 [; _7 C  z, j- Avy(1,1)=0.2; % 速度初始3 J. t# c( ]. [, Y4 D  e" @" l
    rxe(1,1)=10;
    5 |& x+ s6 b# l4 ~5 H* ^rye(1,1)=-5;
    ) b- [+ a' s6 r! N0 }4 |+ Avxe(1,1)=-0.2;
    & ?3 d. Y, k/ t  Z4 Zvye(1,1)=0.2;7 s9 K7 z' d' t
    s=[rx;ry;vx;vy];
    $ o  s  O+ o# C4 ^1 Xse=[rxe;rye;vxe;vye];, D; E9 T; h* t) O- \! i) K
    r=zeros(1,n);
    - Y5 \. _1 u3 \7 Nb=zeros(1,n);
    1 C+ G" k' s/ V) h0 trn=zeros(1,n);
    8 `* T; p0 A% F) y" Pre=zeros(1,n);
    $ h- R3 h- R9 Wbn=zeros(1,n);' z% k) n9 ?9 C' s  x$ T1 h' I
    x=[rn;bn];0 J/ P/ w4 A1 k- Q
    H=zeros(2,4,n);
    - f: R: g0 z) [4 Z5 y" N) x+ F6 o7 _8 v) p) w- s3 Y
    ux=sqrt(0.00001)*randn(1,n);! j& t' R3 w. J' b
    uy=sqrt(0.00001)*randn(1,n);
    4 N1 ]5 C+ H7 V% l  }7 V' m" _wr=sqrt(0.001)*randn(1,n);
    ) |$ R3 @1 l. V; Kwb=sqrt(0.0001)*randn(1,n);
    + J5 `6 L1 e$ e( G/ B  z0 a4 N3 W0 y
    Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵0 Y0 H% Y. l% L1 {! h& E2 P! c
    C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵; O( X, v, p  i  D
    # n( ~8 U- \( _. v: V' v( }
    ss=zeros(4,n);% 精确值
    ) L% j; j3 t" @# I/ Isn=zeros(4,n); % 估计修正值
    7 ]1 W) o6 J; Wsn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值6 |8 E0 r+ K) J* v
    ss=zeros(4,n); % 一步预测
    & J2 K3 L" N( D) r' G7 rhs=zeros(2,n); % 观测值预测
    ) t' y  L! f! _inn=zeros(2,n); % 新息7 U' [$ Y( T. c  \
    M=zeros(4,4,n); % 估计均方误差. C) G: ]4 p9 g
    M(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值
    - [3 r+ x3 o. Z- b! p7 lMM=zeros(4,4,n); % 一步预测均方误差
    6 Y1 n( W8 D! L: cK=zeros(4,2,n); % 卡尔曼增益5 K( R4 J: |/ Q  i  V

    ' c; i+ }6 B7 x! ?% kalman filtering
    + L1 g# [  w3 W6 F
    ; O9 l$ E* F3 q2 ]) b1 jfor t=1:n-1: b, f" \# w" B/ W
    %            s[n]=As*[n-1]+u[n]: x, ?6 Q9 D7 F4 K$ ?' Q4 o
    %            x[n]=h(s[n])+w[n]
    * w* V! ?- H" z" u. x; L* O9 A0 i7 \8 F* f' h4 g
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    & q7 o6 D+ E8 K  T% T7 V    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程, G8 R$ A7 I2 M$ g
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    ( L2 T0 g0 a  P& v' z' C    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程/ P5 \5 c" W# p- `
        s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    $ ~" n) p9 T9 P( Z0 v: e8 ]6 n- ^: Z2 m
        vxe(1,t+1)=vxe(1,t); % 理论精确值
    & D, `6 k' _& O7 B% C    vye(1,t+1)=vye(1,t); % 理论精确值' B- D9 `$ X# \" n  s
        rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值& [- S2 g% D0 n  G( B7 c. R! q
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值. Z% I6 k% s& \  e2 v
        se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1& d4 i' ]0 v+ g# |5 n' \& k, `

    ( |1 X7 E! C- |  e4 i5 D% C    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    5 r5 A' H' I, n( ?) a+ H    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)! O) V5 d/ U. P8 G5 y
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离) p$ `# S3 k  v& K8 m- G% P
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    1 h* P7 S" T2 }6 b    bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    * C* o/ |0 J: }    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1: V* K. J" j9 h4 O7 H

    " o' s. _" j$ t$ l    % 对观测方程求导,得到雅可比矩阵H,维数2*4" h( L1 w+ ?# @' `+ C% C
        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];, H. D+ K+ i, M+ @) ~9 M+ N

    # g9 \# C5 |9 S) d- b! z; ?- R
    7 h/ Y9 J5 b' ^2 h7 z    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差" K" Z* [. F6 w6 z: q
        K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    $ L! E/ U0 r# A+ R6 c0 B( t    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差
      Y) u0 U5 _8 B    ss(:,t+1)=A*sn(:,t); % 一步预测8 P3 G3 M' {! N7 |  W7 z# D
        hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测6 Y) i7 `# n6 N
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    3 n" G! t* R5 k+ T    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    % E! v9 M* D; i1 ^end
    ' g, f8 U" s) \8 Y! {, V
    ( U7 [2 E' S+ p" w- j$ l5 V- msubplot(2,1,1);
    6 C+ X2 J) Z9 O- Lplot(sn(1,:),sn(2,:)); % kalman估计值
    ( ^1 J* P0 {% z. m+ vhold on;* ~" l* w, `& c. `" k
    plot(se(1,:),se(2,:),'-r'); % 理论精确值8 P! K) R, Z3 j9 m  p

    5 V! b5 M, ~( V" Y' L5 Fsubplot(2,1,2); " ?0 J2 f# X- ?2 l; E
    plot(rn); % 实际测量距离
    % A" E( _- m( J. f7 Uhold on;
    6 u. s: W6 ?2 H' Y1 I1 }  Iplot(re,'-g'); % 理论精确值
    1 q% H7 J/ F, K$ P& H/ Y
      Y, _3 j, J( d4 O% A
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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, 2025-7-21 21:13

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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