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

 找回密码
 立即加入
搜索
查看: 645|回复: 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! g1 X$ ~5 j3 D9 {( F
    % vx[n]=vx[n-1]+ux[n]* M! e0 ~; p1 M2 g% @5 d; n) s( _
    % vy[n]=vy[n-1]+uy[n], W- F% Q  Q1 ~: [
    % rx[n]=rx[n-1]+vx[n-1]*t
    * B1 N+ w& {& D. K+ G2 o% ry[n]=ry[n-1]+vy[n-1]*t
    % [; B. Z6 }. L* n- d% s[n]=[rx[n];ry[n];vx[n];vy[n]]; [- ?) [3 x; f% k
    % A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]. H- [: x9 m2 B3 e& \! d
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]6 _8 ]2 v5 C' x0 g( @
    % u[n]=[0;0;ux[n];uy[n]]
    % H' Q& a4 p% L; I%       s[n]=As*[n-1]+u[n]
    6 J) o, h; \" Z. ^4 ]. ?# m%       x[n]=h(s[n])+w[n]  m5 q! h. M8 B# D5 _
    , ~/ S# ^6 J+ u+ Y$ S& B! z
    % initialization
    3 u- `$ S& _2 n1 ]clear;
    4 B+ ?1 J+ @* s1 @8 xn=100;4 d! u' X/ w% V; c& U; w0 H: v: B
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];$ I+ V( \1 Y/ c, A/ r$ i; {0 h
    rx=zeros(1,n); % 实际位置
    % A; f8 l# [0 i- I& T" }) ~ry=zeros(1,n); % 实际位置
    6 d% P! _5 Q" B( U/ N/ A1 lvx=zeros(1,n); % 实际速度
    6 R" v( R# ~0 Z# |( r( s0 }vy=zeros(1,n); % 实际速度
    $ `4 U! N, _& r2 Y3 Q+ ?1 \  ?( n) krxe=zeros(1,n); % 精确位置8 l% p) [9 ^: J0 H& f7 ]3 Q$ E
    rye=zeros(1,n); % 精确位置5 p9 G. d1 E/ D# g5 y2 s
    vxe=zeros(1,n); % 精确速度
    . w  V, a6 S; z4 y5 C: A$ X9 Nvye=zeros(1,n); % 精确速度
    $ W) g( U0 |' a/ J6 xrx(1,1)=10; % 位置初始2 ?/ S1 A6 Z2 x1 G
    ry(1,1)=-5; % 位置初始6 l7 l4 p; J8 m& z
    vx(1,1)=-0.2; % 速度初始" b; y* H1 H$ x
    vy(1,1)=0.2; % 速度初始9 C; a2 \6 D& c- y. g$ v% q# F3 z4 v
    rxe(1,1)=10;
    : Q0 H6 l. x, E4 m* Orye(1,1)=-5;+ U$ |  W+ D( j$ Z7 S/ q, l8 R' }. z
    vxe(1,1)=-0.2;$ @3 y  C; b- q: c; ^5 k
    vye(1,1)=0.2;
    " \% s) X/ B# es=[rx;ry;vx;vy];
    9 r) @+ Z" X/ n5 x+ v, Ese=[rxe;rye;vxe;vye];
    + s" b' `( C- U$ Gr=zeros(1,n);+ B* F# a7 g1 k/ F
    b=zeros(1,n);
    . |# R. ]% @2 a% q0 Brn=zeros(1,n);
    : q( n2 H9 u$ ?4 ire=zeros(1,n);4 |: g2 x3 i3 v% S1 z$ X1 R& Q
    bn=zeros(1,n);
    0 n9 r& ]5 R( @/ n/ x. ^5 Px=[rn;bn];2 J% a1 ]1 I+ ?5 @: i8 Y. Y
    H=zeros(2,4,n);
    ; N  O: o3 m- ], Y% z- w0 s$ q4 v% C! M5 M' J: \5 I/ g6 Z
    ux=sqrt(0.00001)*randn(1,n);! ?3 ], e" h2 W  X; G- t$ J
    uy=sqrt(0.00001)*randn(1,n);
    3 o1 o! X7 B. z5 r& k8 {. J' Iwr=sqrt(0.001)*randn(1,n);0 `7 D; N. `3 }1 n- Z7 Y5 ]( c
    wb=sqrt(0.0001)*randn(1,n);2 c* U& D1 u+ n  {# u% G
    * B+ T0 X/ e/ f' |. Y. ?. j
    Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    ) y; w; M* l9 e& IC=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵% h; h' H! m6 @, O! `; j

    3 A. U3 }- ^5 [2 L# m2 @) X) w) Xss=zeros(4,n);% 精确值- G, G2 W9 \' O- o/ v$ c5 i
    sn=zeros(4,n); % 估计修正值1 N6 k" m6 p1 r" g6 t
    sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值# Q$ K9 w( l: T( D: ]  N6 L
    ss=zeros(4,n); % 一步预测
    1 `7 |' r& ]$ ]- O3 i; T$ Hhs=zeros(2,n); % 观测值预测# ^$ A! H/ n' S- k6 i+ t
    inn=zeros(2,n); % 新息
    ) @/ j+ F; J9 Z: Z# Y* D6 i, mM=zeros(4,4,n); % 估计均方误差
    ' y/ f3 i6 G4 wM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值
    . s1 a( s: Z( w5 U" K! h( h5 RMM=zeros(4,4,n); % 一步预测均方误差( k# A. X& _) ?" P
    K=zeros(4,2,n); % 卡尔曼增益
    7 z. M% E* L+ p! ~8 p
    $ U6 p! \4 m5 b& A6 n+ ]% kalman filtering, F, Y6 J7 ?7 B8 }8 W4 {3 \

    . o; j; w5 ~% @0 K. efor t=1:n-1
    4 W$ J0 K) ?) U7 B%            s[n]=As*[n-1]+u[n]. m" f' H7 c" v  u% b
    %            x[n]=h(s[n])+w[n]
    % v7 h2 [; i, d6 n0 ~/ ^: m; F6 s; @& i/ I; }
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程
    # H2 t% i! f  u8 j    vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程! ~5 O) l5 m) }# H  e) y* f
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程1 j" Y- W  Z' ?8 q/ t
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    4 M6 h! m8 k6 I" t# o9 n/ R    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    9 n: J6 u  [% D2 w# F7 O- L6 A6 ]: w5 c% T" _
        vxe(1,t+1)=vxe(1,t); % 理论精确值% I$ u0 `0 Y7 C3 n+ ~  P- T- e
        vye(1,t+1)=vye(1,t); % 理论精确值
    7 E! Q. U, H- L& ~# [: U2 W/ U    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值4 O  t: r3 A$ f8 a5 K5 a  @
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    $ X- L) o! M/ I# i- M9 z' d    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1& l8 u' h- c  p9 M

    ( Y7 p0 \* P1 B4 ^    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
      K# j6 T& q, U5 v    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)  L$ w! x! m: i/ X4 l
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    4 v) _  S# n7 ~- u    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)& r' I) N* c; T( j' j0 `
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    " B7 Y2 O3 W+ f4 m( F/ A; ^8 q    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
      K2 f9 \- f) h: ?7 }$ Z+ S2 N4 D" r8 m6 J, h
        % 对观测方程求导,得到雅可比矩阵H,维数2*41 F4 q7 D( _( [' R% v
        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];
    ' P  f& D" Z3 U4 W) U8 Y
    ( U4 i  U3 P/ o$ e1 |4 t. T0 M8 C4 d' c. k
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差( ~! w8 {7 _& O: o* z* U; R
        K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
      V! u& m% |0 X    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差
    - s' x% b8 ~& \1 t. |( I, n    ss(:,t+1)=A*sn(:,t); % 一步预测
    2 [8 R8 ]2 C7 g4 u  i! h    hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测
    + X2 O& p' j4 E+ m7 O  E3 n    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    . G% t" F. z& ?+ Z    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正, N8 f  Q6 R% a7 Z/ F9 s
    end7 n; n. @( T# k" g- O
    ' }* V" @# M; M1 S1 B: K3 Z
    subplot(2,1,1);
    - `+ x7 ~: x1 B  S% yplot(sn(1,:),sn(2,:)); % kalman估计值
    : |6 }  c$ ~+ T5 y5 o/ s1 rhold on;! d% V" C# r0 }
    plot(se(1,:),se(2,:),'-r'); % 理论精确值3 |$ o- \7 N+ @7 \- t- Y, N6 X* I
    . `+ V& n2 l  T0 ]) s1 u' Y- S
    subplot(2,1,2); 6 \+ z" s' f3 N6 b2 l- h2 Q2 t
    plot(rn); % 实际测量距离" L/ r' w2 |' O$ D* v* W3 h( O3 V
    hold on;. V, |. t3 d+ X* z5 J
    plot(re,'-g'); % 理论精确值) a1 _! h, n# H6 h+ W
    2 l- X  G6 I& V% G8 @5 e
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-11-6 00:27

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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