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

 找回密码
 立即加入
搜索
查看: 611|回复: 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. `. A  F( p, r: o
    % vx[n]=vx[n-1]+ux[n]! S0 w# \- h3 T% s3 K: s
    % vy[n]=vy[n-1]+uy[n]" L  E. B. B# ?/ ^  n$ V1 Y1 e
    % rx[n]=rx[n-1]+vx[n-1]*t
    ' K/ y( B- e) j$ Y7 S/ w1 d% ry[n]=ry[n-1]+vy[n-1]*t! W6 O) o$ E3 w1 \1 V+ S' c- A
    % s[n]=[rx[n];ry[n];vx[n];vy[n]]. M$ V5 q# e' Q0 e. y/ ~! E" O% n9 [2 R
    % A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]
    . N2 q, j5 X8 V& ?, z% s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]
    8 A+ D# v) r' Q, g  Z. L% u[n]=[0;0;ux[n];uy[n]]
    6 s- c: O; {+ m  |8 W) N%       s[n]=As*[n-1]+u[n]% G# r. }/ C" n. O5 D
    %       x[n]=h(s[n])+w[n]0 `  s% b5 l) q0 r4 x. a) {/ e
    # g$ q# u" ?9 n& h# U: F  N! u
    % initialization% R- l! i7 S9 j; u' h! p! O0 D
    clear;
      T8 ?% o2 D0 {$ p* I, v3 L* hn=100;: |9 A4 |5 v" i8 H9 r/ j; _$ c9 `* S
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    ! l2 Q4 ]% z- V! P# n: |' \( krx=zeros(1,n); % 实际位置
    , l, {) F/ l. M& i% k1 kry=zeros(1,n); % 实际位置9 l% ]+ x/ d& b" N7 @3 c" L
    vx=zeros(1,n); % 实际速度# W' W9 H* e; ~% ~! t! b
    vy=zeros(1,n); % 实际速度
    ! Y' c( y  n/ `0 Qrxe=zeros(1,n); % 精确位置9 y4 Y4 r) J1 o) J8 ^6 Q" N0 Z$ m  F
    rye=zeros(1,n); % 精确位置5 B- U9 ~. K( D
    vxe=zeros(1,n); % 精确速度1 Z1 ?# @3 H3 Y
    vye=zeros(1,n); % 精确速度/ N, Q8 M( C9 ~/ G0 D
    rx(1,1)=10; % 位置初始
    : H' ]" C% g$ G# O) [ry(1,1)=-5; % 位置初始* B) ^. _6 Z3 D
    vx(1,1)=-0.2; % 速度初始
    5 m# A2 z/ w' |; ~1 mvy(1,1)=0.2; % 速度初始
    9 T8 W8 W* A, i2 Orxe(1,1)=10;
    , I/ j  y2 _+ u. D6 D0 c' I! ?rye(1,1)=-5;
    ) b( G" V& ~/ Yvxe(1,1)=-0.2;. x3 `2 A9 h; ~( g/ j
    vye(1,1)=0.2;
    4 Y+ @& z9 _, s$ P! ]' g& Js=[rx;ry;vx;vy];# |. p# C/ F7 M- T9 }
    se=[rxe;rye;vxe;vye];. @5 R* W6 d. Z# b. j5 h8 t
    r=zeros(1,n);; M, }, F% m/ o+ W: @0 P2 }
    b=zeros(1,n);! T0 E- V" Y4 D: F( L5 e( o6 a5 `# w' n
    rn=zeros(1,n);
    4 K- y8 `) q& k4 _& W- u* g& c( [re=zeros(1,n);
    , C9 S8 h5 s4 n! ?0 r! D0 G& Z7 X+ jbn=zeros(1,n);  y& \! R/ Y& d/ m8 c
    x=[rn;bn];
      Z7 ?* ^0 v0 m% R( m6 W! vH=zeros(2,4,n);
    4 m4 w& v0 r" e1 O$ i
      m6 y4 b+ t( ^( X" y: fux=sqrt(0.00001)*randn(1,n);
    ! o5 q$ U5 d/ Q" n% quy=sqrt(0.00001)*randn(1,n);+ r8 S$ F1 X' {/ I: B; c& X6 W  `
    wr=sqrt(0.001)*randn(1,n);2 ^3 ~6 x5 e" d; H, P* O( b4 H. u
    wb=sqrt(0.0001)*randn(1,n);, ^2 O  @8 Q& y% ]
    % t  E( G1 F7 }! Z: _" l
    Q=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    / X8 M$ r8 ?: a: x4 \9 w1 bC=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵
    / i* K" L7 E, {
    - y( k1 C7 I4 v$ _2 o3 V+ Hss=zeros(4,n);% 精确值
    : R7 T0 h* W. g/ |8 rsn=zeros(4,n); % 估计修正值
    ! C0 P  f0 z, z1 F7 w& U# H5 Osn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值
    ' E! e1 |  C0 z1 p( Ess=zeros(4,n); % 一步预测6 {( I# u& w+ G
    hs=zeros(2,n); % 观测值预测
    ' F8 e5 F7 @" x( L, U/ U5 T% Oinn=zeros(2,n); % 新息4 z3 j; z5 W5 f$ g
    M=zeros(4,4,n); % 估计均方误差
    9 N! h. W* J. JM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值7 Q" U1 F9 n- _3 |& Z4 I
    MM=zeros(4,4,n); % 一步预测均方误差
    5 E( e0 Q! Z& P/ b' i' OK=zeros(4,2,n); % 卡尔曼增益( O1 ~+ }/ j' e4 ~
    1 Z5 X/ O9 q" U" I: f, G
    % kalman filtering! g* C; H, z/ a% A

    # t: [7 `: W. g+ [% _0 pfor t=1:n-1+ l. k# l4 V/ U* m
    %            s[n]=As*[n-1]+u[n]# \) h* y4 B, m8 G( W5 E) ^2 I
    %            x[n]=h(s[n])+w[n]4 c( K  T" U7 V- K: b/ k1 i3 }* `* }8 g
      D2 B( ^$ \4 P  d  S
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程" t  T. b% ?7 K6 N$ Y5 O, I# _
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程" M" M. @  D$ y2 x( y+ I
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程
    3 q- R) P# z" _0 V    ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    # M5 I# t: G* q3 L% d+ \5 G4 y- R    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1+ d0 T; f! i& ?9 n, l6 a4 b
    ! J, x% y8 v! c) q6 K3 W+ J  d
        vxe(1,t+1)=vxe(1,t); % 理论精确值
    3 h" J; n) i. o- a    vye(1,t+1)=vye(1,t); % 理论精确值
    5 N& w' G4 y. F7 T: |5 h/ H) o  Q3 M    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值4 d3 ?( p. N: E: G" r; V5 P
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    & V# [/ z2 b7 A! q, W2 s% L    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*17 h8 K* L1 U2 ~& e. J$ `, g  q

      `9 B$ |% r& }. J' Q' y1 p8 l    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)
    . m+ Q9 J  o( i    b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)
    9 U8 h# b. |% b) \! _* }# ?    rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离
      ]' s/ h; u3 h& P2 x! M% `' n5 t; H    re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)' G4 A. b$ ^9 ?# U# z" Y
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    ! t4 o6 ~/ g% U2 R    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1
    / b7 l$ ]1 l; y5 Z' F/ J$ p6 G# k' T8 h6 u9 a) C  N
        % 对观测方程求导,得到雅可比矩阵H,维数2*4
    & z& x2 `% d0 u1 N. {    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];# M& F8 p( k8 h2 J: f

    * \% \$ P/ f! ?# O7 ?, p9 W9 ~+ }6 j. q( j) N/ C1 \1 T
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差
    ; r7 _9 B+ i$ {+ C! Y    K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    ; k5 m& e1 m! O9 t- s  t( v8 a    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差6 f4 U( K" Y* ?  k% ~. i
        ss(:,t+1)=A*sn(:,t); % 一步预测
    $ w# R# i  [0 `9 S1 c) h  ^! s  f    hs(:,t+1)=[((ss(1,t+1))^2+(ss(2,t+1))^2)^(1/2);atan(ss(2,t+1)/ss(1,t+1))]; % 观测值预测
    * Q, \% X/ D9 k( I. @& }5 T/ w    inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息
    6 J! J* a% A$ n" R0 b6 i    sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正" t/ z+ [: p' X( [
    end, j. j/ l/ F7 C/ w% B

    - P$ i6 J* E: _subplot(2,1,1);
    % U  l- [+ r0 hplot(sn(1,:),sn(2,:)); % kalman估计值  q3 {9 d4 ]% b$ f% m/ u/ f
    hold on;
    / e6 ^5 O9 M  B3 P9 pplot(se(1,:),se(2,:),'-r'); % 理论精确值* C* Z+ [% w* p, c- A) Z0 C+ u
    - j, D( p  R6 _* \8 z1 P3 [. d
    subplot(2,1,2);
    4 L$ X' D8 z5 ?& mplot(rn); % 实际测量距离
    5 ?8 H8 _; v! d2 S; nhold on;- O0 c* f# ^6 l. x3 i
    plot(re,'-g'); % 理论精确值
    6 Z' t1 J: f2 A2 J+ P* B$ X# t  G$ y
    ! l7 z, l, B9 h5 T% H4 U. h
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-5-31 07:20

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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