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

 找回密码
 立即加入
搜索
查看: 692|回复: 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
    0 Z! x3 J6 i0 b% vx[n]=vx[n-1]+ux[n]# ?2 E* ~8 T6 A. C6 P1 v# j
    % vy[n]=vy[n-1]+uy[n]
    1 C4 G0 o2 x! x* v4 [* m$ }  k$ _$ q% rx[n]=rx[n-1]+vx[n-1]*t0 J# |% A* c: |6 U
    % ry[n]=ry[n-1]+vy[n-1]*t
    2 c* y5 C! C, j% s[n]=[rx[n];ry[n];vx[n];vy[n]]
    ' k8 b& q# Y: A, L+ s+ q9 A6 T% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]
    + [8 m0 z- u9 x$ b4 s% s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    8 }8 k$ t* f8 t3 G: ]& q* w5 @& @% u[n]=[0;0;ux[n];uy[n]]
    ' m/ t' _) {( E- L5 c6 i%       s[n]=As*[n-1]+u[n]
    9 }  n3 a. T2 i' M4 ^4 }%       x[n]=h(s[n])+w[n]
    & t5 t/ K* L' A- W8 D6 ]- j4 m' ]; V; |
    % initialization
    7 n, `1 z; j" z4 Y; b2 G& ]7 ?clear;0 i( _% ~* X) X
    n=100;8 V( m( W2 A  g/ |2 z
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];* S; q% Y- F) U% o8 b3 I
    rx=zeros(1,n); % 实际位置
    5 l/ s( v, p# U6 e) o7 ?ry=zeros(1,n); % 实际位置
    6 T- @5 V+ x0 c" n9 X- j; u' `2 nvx=zeros(1,n); % 实际速度( [* K4 c# e' y
    vy=zeros(1,n); % 实际速度2 r5 y* f6 O, k4 Y4 S
    rxe=zeros(1,n); % 精确位置
    ; T4 W3 C; \. ~1 w' T, A) w5 N% i3 Mrye=zeros(1,n); % 精确位置
    , Q6 W1 S. G3 r; K+ Bvxe=zeros(1,n); % 精确速度
    3 S2 T) B2 V5 A$ nvye=zeros(1,n); % 精确速度: R  W+ }% A1 c$ K# C! F! V
    rx(1,1)=10; % 位置初始
    ' I& j) c7 g/ l4 V5 \/ Bry(1,1)=-5; % 位置初始6 Z+ y1 ]  ?1 y2 p: b* ^
    vx(1,1)=-0.2; % 速度初始
    ! G8 t% \$ _1 L+ c% v( ^vy(1,1)=0.2; % 速度初始
    6 u1 H7 d) a* N4 l/ Z  z3 arxe(1,1)=10;  h  a; m0 G+ D- L* E
    rye(1,1)=-5;
    / {, t& h$ [' {' ]: k! vvxe(1,1)=-0.2;
    0 b3 d; Q' W& \$ p$ Yvye(1,1)=0.2;- M$ _5 g2 g# E7 d3 h: P' y% B
    s=[rx;ry;vx;vy];+ l/ R2 {' ?$ O) Q- N7 H- ^
    se=[rxe;rye;vxe;vye];
    ; n# @% P+ c; T( ~- Ur=zeros(1,n);
    + N* e. d9 g" H2 sb=zeros(1,n);* B* s: s' g9 R2 e! {% ?7 d
    rn=zeros(1,n);
      x6 H- W8 P/ u2 W5 z$ O3 u1 ~2 z& Nre=zeros(1,n);8 j7 B# Z! K" [2 M8 a; [5 q0 P5 e! z* g
    bn=zeros(1,n);- j2 u$ O3 U7 I2 H! `; ?
    x=[rn;bn];( {) D  [* l- v+ f" p. _) E- |
    H=zeros(2,4,n);
    . D6 V& |, X3 C# C! C& o8 R# @
    3 A3 U3 c: G' E2 g7 i' b8 f$ |, ]ux=sqrt(0.00001)*randn(1,n);4 |2 `: b; o$ z5 @) F+ V
    uy=sqrt(0.00001)*randn(1,n);
    ) i2 ]( e# G) x& P. S/ h' c5 ewr=sqrt(0.001)*randn(1,n);
    ( ~# B4 h7 e2 [. C: twb=sqrt(0.0001)*randn(1,n);
    3 N( _' e/ G) \' C5 b
    7 e0 o$ i3 |. @1 ZQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵2 S% _7 o! r7 H) ^* P
    C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵) r2 Z: E% t" T: w

    " }# X' `; [( J( v( b" Tss=zeros(4,n);% 精确值
    3 K& d, {9 t/ ?1 W% V8 ^. ^4 vsn=zeros(4,n); % 估计修正值
    . [, F. b- U- q" z  j( ~( @sn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值; C' i0 V$ c0 J/ m" ^$ T
    ss=zeros(4,n); % 一步预测
    ( l9 Q0 {9 `1 z: ^+ c' E; [hs=zeros(2,n); % 观测值预测2 g! Z% G5 Q# U* I- l* D  e
    inn=zeros(2,n); % 新息4 J% F9 H+ L5 O7 J' ]& I, l
    M=zeros(4,4,n); % 估计均方误差
    % V; _0 E2 l4 N9 mM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值
    . Q0 v( b3 w; ^; g# L) j: F$ _MM=zeros(4,4,n); % 一步预测均方误差9 B! T6 d* {$ }8 V/ [
    K=zeros(4,2,n); % 卡尔曼增益
    ) N: t! u3 e7 ~2 a% l; {7 m2 ~* q4 W: m* u
    % kalman filtering
    4 K1 c$ t' a! h# W1 c/ B
    5 ]! D6 }1 c2 efor t=1:n-1
      H, r; ]* i; K%            s[n]=As*[n-1]+u[n]
    $ t) q- H" p2 k' a% h8 P6 n%            x[n]=h(s[n])+w[n]- R$ O0 Q6 m6 E6 [- B$ B1 o' z5 q' w9 ~

    9 \: R- T& |- t& Y    vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程8 n3 n5 o0 s& X% m2 l0 n
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程
    , E$ }0 h! @, m8 n# x; G: v6 e    rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    5 A7 z( k5 b# u, y) r    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    . J4 R  f  L5 M, F0 K( U4 V    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    ! Z, |5 Q# Y8 l! a5 e0 l' o3 v: ?3 Y: k9 a  R4 r! d
        vxe(1,t+1)=vxe(1,t); % 理论精确值
    # a% f$ f) {$ J" D5 ]    vye(1,t+1)=vye(1,t); % 理论精确值
    / o) H2 N: J, L( ?0 X8 l    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值$ l0 b! f3 s1 E5 _1 a( L+ p2 _7 J* }
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值3 B" H6 B$ m, M1 {' x5 q
        se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1' k- |& c! B, `$ h0 L
    + ^0 H# e7 O# W) t4 o
        r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    : N. r8 d+ S9 h    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)+ T" |9 j7 x% c$ |. C" K! S9 g6 G
        rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离) D5 V5 J$ L, {. K! m
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)' L. I! l  X. x; M
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    7 Z  V' M- {8 s6 l. a" n% X3 X    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*12 D( T* d% L8 t% r
    , g3 A" c/ D1 Y& m( l; ^4 K8 c
        % 对观测方程求导,得到雅可比矩阵H,维数2*4! b# t2 o3 z2 R
        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];% X4 j3 T& g0 a( F  H( F

    : L& @& ]1 j' y- o
    4 ?9 k0 A5 m# b8 p% o- I& r1 D    MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    ' o- \" X2 d+ q: V; P, b8 D# e    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益- D% w+ L' V" i# K( T: i0 c
        M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差
    & ?' Y  p7 c+ J/ `    ss(:,t+1)=A*sn(:,t); % 一步预测
      ^3 Z( e8 q- C( U2 X* ], O* [    hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测
    * M6 G  f% ^* Z* w2 F    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    ) z' ?" r( L, }8 ]* J, Y    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正% P: V8 s0 j# v! B/ V1 `( i
    end9 j8 _, j4 k2 M7 L( S- x+ p& n
    ( u( U& z2 @+ B" c. @* V8 [/ u
    subplot(2,1,1);- {4 N6 X7 N7 g, }1 K
    plot(sn(1,:),sn(2,:)); % kalman估计值3 r  B" |  i7 h  R" J
    hold on;
    . n2 s. Q0 I7 Wplot(se(1,:),se(2,:),'-r'); % 理论精确值
    , D% i) P5 I" p2 G" p6 b6 |6 n" [% ]" @8 L
    subplot(2,1,2); - _" @% d" d/ Q# i7 r
    plot(rn); % 实际测量距离
    ; U9 [' n, Q; ohold on;
    ) V2 o9 h, N( m9 X4 f& `. _plot(re,'-g'); % 理论精确值
    # T  J2 _' X% k6 O; ~
    # D( q$ }1 Z% }0 Y7 [/ O% K
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-3-16 08:42

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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