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

 找回密码
 立即加入
搜索
查看: 585|回复: 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
    + L0 X" c# `- l- n, |% vx[n]=vx[n-1]+ux[n]
    0 W& S% z8 H4 }4 ~/ r6 g+ f% vy[n]=vy[n-1]+uy[n]( _& r( Y% G( ~( S' C) N
    % rx[n]=rx[n-1]+vx[n-1]*t7 l3 O' P* H: k$ b# V1 @0 p
    % ry[n]=ry[n-1]+vy[n-1]*t
    - B' o1 ?9 c! d3 d1 A' N% s[n]=[rx[n];ry[n];vx[n];vy[n]]
    5 C* e1 a& z  u4 _% A=[1 0 t 0;0 1 0 t;0 0 1 0;0 0 0 1]* `4 I- n  e% s1 b" b0 n- a6 z
    % s[n-1]=[rx[n-1];ry[n-1];vx[n-1];vy[n-1]]4 V# C7 Z+ e1 [- p6 I
    % u[n]=[0;0;ux[n];uy[n]]. o) i6 W+ Q( V* Z$ j
    %       s[n]=As*[n-1]+u[n]
    ; E$ e' E5 G9 ^, u%       x[n]=h(s[n])+w[n]
    ! p! P  {$ u6 m7 P, |9 ?( E( N. V9 Z
    % initialization; m: F8 o8 t- g1 d! M, Y
    clear;
    . S7 P; |1 Z5 `7 U( an=100;; w. c7 [4 I; S" b: Q
    A=[1 0 1 0;0 1 0 1;0 0 1 0;0 0 0 1];
    4 @; o& [, J4 G5 e, q8 prx=zeros(1,n); % 实际位置8 J# |5 a8 d8 H( m1 R9 n5 ]1 u5 B
    ry=zeros(1,n); % 实际位置
    ) H% n5 Z2 x' D- N% J3 }4 B/ @vx=zeros(1,n); % 实际速度' l0 p- L6 f3 T6 ]1 U$ y' {
    vy=zeros(1,n); % 实际速度9 m+ w$ D3 c# }: a9 t6 L" m1 Z: E
    rxe=zeros(1,n); % 精确位置
    , }' J9 @7 c1 D$ Qrye=zeros(1,n); % 精确位置
    # k. g7 L, N1 c0 G1 D& Fvxe=zeros(1,n); % 精确速度
    . A7 n: `+ k& G2 s6 Kvye=zeros(1,n); % 精确速度. x4 [1 F' @$ ~# @" U$ x" G" @
    rx(1,1)=10; % 位置初始  c0 E( o$ g: V/ N/ k4 V! Y0 ~
    ry(1,1)=-5; % 位置初始1 S; j0 z7 S* n& x  D& H( c
    vx(1,1)=-0.2; % 速度初始: N1 o7 v  Q  a  v6 d) F
    vy(1,1)=0.2; % 速度初始
    - P! R2 D6 |- l( q) F) [7 Z1 zrxe(1,1)=10;
    * X! {; p( m7 Brye(1,1)=-5;
    ( w" T* v1 Z0 @7 ~vxe(1,1)=-0.2;
    3 O" l. F6 K6 o0 {vye(1,1)=0.2;& l- S0 j( Y6 P, @% t
    s=[rx;ry;vx;vy];, l9 L, k/ J, t
    se=[rxe;rye;vxe;vye];. B1 E/ \  E# q( U
    r=zeros(1,n);; L" p: ]) \4 }8 u. d
    b=zeros(1,n);9 n% R1 v" T  G8 R9 C& p
    rn=zeros(1,n);! ^/ ?% ?+ s5 }& \1 y5 Q+ j
    re=zeros(1,n);
    ' I* o* ~6 ?3 `& ebn=zeros(1,n);
    % b0 ^" A' x- Dx=[rn;bn];; N3 T; F: e2 u: j6 p! l
    H=zeros(2,4,n);
    6 F9 B. h8 `2 l2 g" R3 \
    4 T, \/ P9 W3 \4 L) Wux=sqrt(0.00001)*randn(1,n);/ J: j8 x+ ?! H/ f% S( x1 c
    uy=sqrt(0.00001)*randn(1,n);% u: M- t& G5 S1 k& }% ?1 {
    wr=sqrt(0.001)*randn(1,n);
    / _- h& i1 k4 t8 D) _# ]$ ewb=sqrt(0.0001)*randn(1,n);
    ! ?( E/ {" B6 Z' y$ g& m8 z: z% T
    + w6 p7 Q8 p5 \8 xQ=[0 0 0 0;0 0 0 0;0 0 cov(ux) 0;0 0 0 cov(uy)]; % 过程噪声矩阵
    7 j0 K$ g% S( h1 u8 X. X. |C=[cov(wr) 0; 0 cov(wb)]; % 观测噪声矩阵& ^' c( P" I* {  E
    : |# z: a& ?9 o
    ss=zeros(4,n);% 精确值
    - e8 }; A# F5 X- |( C& o3 csn=zeros(4,n); % 估计修正值
    $ `8 y6 S1 _) g& P0 q  j0 Osn(:,1)=sn(:,1)+[15;5;0;0]; % 估计修正初始值! r: e  _# `$ E* }" V3 G
    ss=zeros(4,n); % 一步预测
    4 J# d, B: h/ C  O! v& U: lhs=zeros(2,n); % 观测值预测% e: y7 N" Y, g4 `6 [
    inn=zeros(2,n); % 新息. M* _& |% v: U' i, {( X8 [7 j
    M=zeros(4,4,n); % 估计均方误差
    ' y/ |( ~$ b& u# K9 ~: t9 u3 kM(:,:,1)=M(:,:,1)+[1 0 0 0;0 1 0 0;0 0 1 0;0 0 0 1]; % 估计均方误差初始值0 `# E" v- Z$ f
    MM=zeros(4,4,n); % 一步预测均方误差
    % [- {: m: F1 g& I2 H2 j! Q# L% pK=zeros(4,2,n); % 卡尔曼增益
    : j( I# V, @! @; S7 S6 {6 o: [6 K3 H
    % kalman filtering
    ; Q, J4 j8 i& ]$ @, P6 X& Q
    : Y+ m1 |4 ]8 \4 Z* tfor t=1:n-1( G( K# a- {: p& O7 V+ c
    %            s[n]=As*[n-1]+u[n]* Z4 ?+ u8 s2 s4 C5 v
    %            x[n]=h(s[n])+w[n]
    6 }) p% r  a: F9 J3 v& |# s0 c" ]& s6 C1 E) k2 x1 E
        vx(1,t+1)=vx(1,t)+ux(1,t+1); % 速度过程方程. N( B( F) O4 T# I9 J0 _5 @
        vy(1,t+1)=vy(1,t)+uy(1,t+1); % 速度过程方程$ O; L4 ?0 u, j  M0 C" Z/ U
        rx(1,t+1)=rx(1,t)+vx(1,t); % 位置过程方程4 Z/ D0 b1 ?. Y, B, c) @9 o) P$ H7 Z. a
        ry(1,t+1)=ry(1,t)+vy(1,t); % 位置过程方程
    8 E5 w4 g, c( G8 A: j% M    s(:,t+1)=[rx(1,t+1);ry(1,t+1);vx(1,t+1);vy(1,t+1)]; % 过程矩阵,维数4*1
    ' d* C9 C3 V5 y: B7 E
    : I  s* V* l1 b    vxe(1,t+1)=vxe(1,t); % 理论精确值2 C. X7 l! i9 |  a3 c
        vye(1,t+1)=vye(1,t); % 理论精确值
    ; o. [2 @4 z3 V% s# s    rxe(1,t+1)=rxe(1,t)+vxe(1,t); % 理论精确值  n8 W+ H- }4 O5 m8 |1 H
        rye(1,t+1)=rye(1,t)+vye(1,t); % 理论精确值
    + o4 ^1 R* M4 H# t# ^    se(:,t+1)=[rxe(1,t+1);rye(1,t+1);vxe(1,t+1);vye(1,t+1)]; % 过程矩阵,维数4*1$ _6 z6 ~+ ^; X

    % {7 ^) x1 ^" |' x8 Z. A) E% [: Q    r(1,t+1)=(rx(1,t+1)^2+ry(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)2 t  ]8 C6 _! y( V4 j; x7 [
        b(1,t+1)=atan(ry(1,t+1)/rx(1,t+1)); % 理论测量方位(含测量误差)
    1 v* o( E6 d; n; a. c* Q    rn(1,t+1)=r(1,t+1)+wr(1,t+1); % 实际测量距离- u* E" G& m! u2 s/ b! y/ v
        re(1,t+1)=(rxe(1,t+1)^2+rye(1,t+1)^2)^(1/2); % 理论测量距离(含测量误差)' \4 V# U$ ?+ m
        bn(1,t+1)=b(1,t+1)+wb(1,t+1); % 实际测量方位
    - B" J1 |" D6 I( O& T9 }8 E( A/ F    x(:,t+1)=[rn(1,t+1);bn(1,t+1)]; % 观测矩阵,维数2*1  A3 m  f6 r6 D* R$ e) Z
    4 [; F$ D; B4 `6 b) D( h* F
        % 对观测方程求导,得到雅可比矩阵H,维数2*47 u' H! D/ z  g% Z# F
        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];
    0 \& O. d3 o$ T( v  u- }5 M4 a9 g- [4 P+ B. O
    ; s, s# h. @$ k5 C
        MM(:,:,t+1)=A*M(:,:,t)*A'+Q; % 一步预测均方误差4 u4 G, C# j6 h8 ?( I2 m0 i! a
        K(:,:,t+1)=MM(:,:,t+1)*H(:,:,t+1)'/(C+H(:,:,t+1)*MM(:,:,t+1)*H(:,:,t+1)'); % 卡尔曼增益
    " S4 `5 L3 Z1 U6 M  Q9 t0 \; u    M(:,:,t+1)=(eye(4)-K(:,:,t+1)*H(:,:,t+1))*MM(:,:,t+1);% 估计均方误差, E) R  A/ h+ Z- L6 }: n2 A4 {
        ss(:,t+1)=A*sn(:,t); % 一步预测1 E( A  n' v9 g. V$ H" J( d/ Q
        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 g8 C1 E5 \5 b3 _7 }: }% E
        inn(:,t+1)=x(:,t+1)-hs(:,t+1); % 新息- {$ x8 D3 v( ~  U3 X
        sn(:,t+1)=ss(:,t+1)+K(:,:,t+1)*inn(:,t+1); % 预测修正
    5 S* i5 i2 Q$ e8 h2 r, ?% q- eend
    : u$ ~/ L+ N* U# Y$ D, G/ M' `2 C5 i% r: C9 |- K! [
    subplot(2,1,1);
    . W0 o; X4 O  j" {, g) ^, h8 J. \plot(sn(1,:),sn(2,:)); % kalman估计值
    $ I+ d  q/ b9 U* t% ~hold on;
    ! K: c5 j: N8 D+ k. G- s! _9 ]plot(se(1,:),se(2,:),'-r'); % 理论精确值
    * U2 h/ H% \; X) O6 w
    4 s3 C+ f8 p9 M9 h6 S- esubplot(2,1,2);   r/ o# B4 Q4 n
    plot(rn); % 实际测量距离, [4 |7 I# j7 u. V: n7 ?
    hold on;0 J6 A7 d0 g+ W+ w! J9 ]9 Q3 S
    plot(re,'-g'); % 理论精确值8 w! |, Z- \# m: u) H6 @9 E$ J' i

      R# w+ a; D" h# U
    "真诚赞赏,手留余香"
    还没有人打赏,支持一下
    楼主热帖
    帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
  • 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-2-23 13:43

    Powered by Discuz! X3.5 Licensed

    © 2001-2025 Discuz! Team.

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