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

 找回密码
 立即加入
搜索
查看: 790|回复: 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
    % E0 W) \' I0 y4 |- w% vx[n]=vx[n-1]+ux[n]
    3 ~; r( b$ ]: Z0 y% t) c% vy[n]=vy[n-1]+uy[n]
    ' L  Y7 Q9 `! [; k% rx[n]=rx[n-1]+vx[n-1]*t
    4 F6 i  v* b" ?) U2 E4 L( N0 k% ry[n]=ry[n-1]+vy[n-1]*t
    * D* b/ u1 J  j, \& F! t% s[n]=[rx[n];ry[n];vx[n];vy[n]]
    $ P: M/ ^) y* b+ l% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]$ B: J4 Y3 x( \4 o
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    - }+ I0 k9 `) r( F6 F" f3 L% u[n]=[0;0;ux[n];uy[n]]
    $ I; `1 y7 K3 ?%       s[n]=As*[n-1]+u[n]6 e% ]2 b& u! K* _# g
    %       x[n]=h(s[n])+w[n]
    : O3 P  N0 X1 d% Y! p* X0 H. A3 z+ ^1 j
    % initialization* Z6 z, n1 L0 A3 h
    clear;! p, A. C, r. `0 O' h/ ]
    n=100;3 ~2 r: G0 x  [$ ~, K
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];8 A. L. j0 x8 i& M  T& `5 ]% z
    rx=zeros(1,n); % 实际位置8 J: l* l/ ~- l( C5 a
    ry=zeros(1,n); % 实际位置
    + i/ O4 K' J% l+ jvx=zeros(1,n); % 实际速度
    4 x; {* P  G. B, b: ovy=zeros(1,n); % 实际速度
    . N& m8 K9 T* ~% t! arxe=zeros(1,n); % 精确位置
    ; u( r' n: ~% X- m' Trye=zeros(1,n); % 精确位置
    3 D4 s( R- V' t. `vxe=zeros(1,n); % 精确速度
    + D4 i) j8 c4 f) P$ Tvye=zeros(1,n); % 精确速度7 G9 f  d& H0 v# A( `: _9 q0 e
    rx(1,1)=10; % 位置初始
    3 u& e4 l/ e" D7 Wry(1,1)=-5; % 位置初始
    ' m' r. h/ q; ~* ?0 @  i' Yvx(1,1)=-0.2; % 速度初始
    6 W3 y. e9 l9 b: N' Pvy(1,1)=0.2; % 速度初始5 P* {, r1 d5 {) [
    rxe(1,1)=10;0 j" q9 B  m2 e  F, ?. ^, J, ~
    rye(1,1)=-5;
    2 S* D- i8 T! V1 ]7 a+ gvxe(1,1)=-0.2;
    , H% x9 E# _% ^+ v0 S, avye(1,1)=0.2;7 J4 g7 }. i2 X7 D( s
    s=[rx;ry;vx;vy];
    & ]* U/ d* X( S/ R. U- wse=[rxe;rye;vxe;vye];$ D" J+ Z8 R* ]/ O, w: t; R- V
    r=zeros(1,n);
    1 e0 d8 C4 j! I7 r* M- |  db=zeros(1,n);& x: L6 |8 g% u/ @3 F% q
    rn=zeros(1,n);
    0 c% @+ [/ m* ]! ?* Z' {8 ?re=zeros(1,n);. o5 j; Z. U( I) P( K5 U# C
    bn=zeros(1,n);7 [: _5 ?4 d; g, U; B
    x=[rn;bn];$ k  q; G( k) c
    H=zeros(2,4,n);
    , E# \' v. ~9 D& X8 p: r6 M, O2 g4 H- `8 |
    ux=sqrt(0.00001)*randn(1,n);+ U/ b$ A" F  E8 }
    uy=sqrt(0.00001)*randn(1,n);
    $ g1 `0 ]$ _6 zwr=sqrt(0.001)*randn(1,n);+ ]- f. M6 k4 S+ o9 f
    wb=sqrt(0.0001)*randn(1,n);
    2 F3 t/ c3 u4 H1 m0 q6 ~/ v4 ~! p! j* A8 v
    Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    . I( a2 H$ i0 n6 W* XC=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵9 d% v, i9 F( ?3 o3 H  d* N
    + R9 w) w0 J* s! S/ G' S* e2 i
    ss=zeros(4,n);% 精确值
    * b9 ~2 v9 ~" T% hsn=zeros(4,n); % 估计修正值$ u4 r; _- h5 [. Y& {6 m5 \
    sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值: @4 e1 k; c$ Y/ J9 J% y# {& X. O
    ss=zeros(4,n); % 一步预测
    0 ~; u7 Y0 |# ?  g# k3 S5 Mhs=zeros(2,n); % 观测值预测/ K- ?& B2 ^: B) h
    inn=zeros(2,n); % 新息( }) u) m  Q- s2 e1 j. _, S
    M=zeros(4,4,n); % 估计均方误差
    3 z- L3 R& c4 _9 T9 z' K+ M- dM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值6 a# _7 C  n; V: G
    MM=zeros(4,4,n); % 一步预测均方误差5 E) u& e* j' T$ v/ g- {
    K=zeros(4,2,n); % 卡尔曼增益& n9 \4 V  j' {% z- g) t  {9 n

    8 S( b9 }, N$ ?$ t. ~% kalman filtering
    1 e) c* _9 }7 ?. Z
    6 `" t& a6 v* x% zfor t=1:n-19 n7 E; p3 A) l4 W8 {; H
    %            s[n]=As*[n-1]+u[n]
    ; W: b2 G: X9 J# A; a7 c" f%            x[n]=h(s[n])+w[n]
    % ?! i  {/ G4 c% M0 ^; _
    8 \3 u1 W' n3 v7 d! g# @    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程9 \3 c  b) q0 v. L7 ~9 f8 s+ s! C
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    2 \2 q" D( q+ I: f5 d7 o    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程5 q1 M" I: f' r3 p9 y* L% T
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程; u! L* g5 X  G
        s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    2 g* V  {4 _: a  z2 D7 B& H$ E6 y% j* J+ q. [( u+ ?8 K
        vxe(1,t+1)=vxe(1,t); % 理论精确值
    # b8 H: k/ ^% @6 k9 C    vye(1,t+1)=vye(1,t); % 理论精确值
    6 \. n" O. Q" X    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值. l4 M$ E( x) U* P0 S# f7 L: y) s4 n6 q
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    : G7 y/ s1 ?( g0 U$ i9 i- e& \8 c' o    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1
    # L, Y: ^+ o6 P. o" k0 d" q' W1 a, s1 |! d9 M
        r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)& |- c% Y4 V1 B! N' q$ V" k
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)+ n5 ?  ~+ W; J% Z' G8 v$ Y
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
    9 [& |2 k  M+ ]$ c# i$ P# T) j    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    1 @  V/ Q: f2 Z    bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    ! i6 J$ z  }/ Q# Y    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    ; h  f2 i' k  d+ x3 T0 L' O4 ?2 O7 E7 I7 i
        % 对观测方程求导,得到雅可比矩阵H,维数2*4  d( Y% `- ]/ 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];3 t0 {  X' P4 p. ~, k, P. N. l9 p
    ' o6 e. T- S/ ]; i+ t2 l. ]- t- o

    9 M5 f, L6 p& b    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    5 {' l& ?! W, v    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益( j2 j. i% Z# h, P
        M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差& X; L" q2 f: Y" _  B+ v  q1 }3 s
        ss(:,t+1)=A*sn(:,t); % 一步预测
    ' i. G: Q7 o- o% q0 Z# F) p    hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测5 U4 U6 Q6 W1 P# A# g' F) D& W4 E
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息0 p$ s9 b) }  Y
        sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正, H& a! K& Q+ M! C, [
    end% l6 X  h% a7 d8 E
    % T  ^2 j+ o9 T3 |; U0 E
    subplot(2,1,1);
    8 C' R0 C5 h, ]' Hplot(sn(1,:),sn(2,:)); % kalman估计值9 G6 M2 b$ n0 [; t5 `/ a
    hold on;
    : |5 k, N$ q; r8 s/ qplot(se(1,:),se(2,:),'-r'); % 理论精确值
    7 W: k( w; p" y' U- v
    6 h+ ]  d9 k- H& o1 x  p! Q5 n3 O) zsubplot(2,1,2);
    : r4 w& L7 c- d% R) W1 e! Kplot(rn); % 实际测量距离# Q$ L% S+ S9 I% p1 X
    hold on;' O4 p0 }2 e1 P8 A  Y# N
    plot(re,'-g'); % 理论精确值
    $ }* j7 a$ |3 I7 F: r4 z) E& e* C& }" K" D1 d1 P" 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, 2026-10-24 14:49

    Powered by Discuz! X3.5 Licensed

    © 2001-2026 Discuz! Team.

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