首页 > 其他分享 >【IMM EKF MATLAB CVCA】IMM滤波器,结合匀速运动 (Constant Velocity, CV) 和匀加速运动 (Constant Acceleration, CA) 模型

【IMM EKF MATLAB CVCA】IMM滤波器,结合匀速运动 (Constant Velocity, CV) 和匀加速运动 (Constant Acceleration, CA) 模型

时间:2024-11-19 09:45:38浏览次数:3  
标签:Acceleration 状态 Constant 矩阵 xA IMM 协方差 转移

在这里插入图片描述

文章目录

程序简介

该函数实现了交互式多模型 (IMM) 滤波器,结合了匀速运动 (Constant Velocity, CV) 和匀加速运动 (Constant Acceleration, CA) 模型。通过卡尔曼滤波,系统能够在不同运动模式之间切换,从而提高状态估计的准确性。

运行截图

  • 轨迹图:
    在这里插入图片描述
  • 误差与误差的 C D F CDF CDF图像:
    在这里插入图片描述
  • 程序结构:
    在这里插入图片描述
  • 概率曲线:
    在这里插入图片描述
  • RMSE对比图:
    在这里插入图片描述

程序代码

部分代码如下:

% CV和CA模型组成的IMM

% 2024-11-07/Ver1
%% 建模
clear; %清空工作区
clc; %清空命令行
close all; %关闭所有窗口(主窗口除外)
rng(0); %固定随机种子,让每次运行得到的结果相同 
N = 600; %定义仿真时间为600
T = 1; %定义采样间隔为1
x0 = [1000,10,1,1000,10,1]'; %状态初始化,四项为别为x轴位置、速度、y轴位置、速度
xA = []; %预定义输出的状态
% CV匀速运动
% x = A1*x + G1*sqrt(Q1)*[randn,randn]';
A1 = [1,T,0,0,0,0;
      0,1,0,0,0,0;
      0,0,0,0,0,0;
      0,0,0,1,T,0;
      0,0,0,0,1,0;
      0,0,0,0,0,0]; %定义匀速运动时的状态转移矩阵
G1=[T^2/2,0;
    T,0;
    1,0;
    0,T^2/2;
    0,T;
    0,1]; %设置匀速运动时的输入向量转移矩阵
Q1=0.001*diag([1,1]); %设置状态转移协方差矩阵
% CA匀加速运动
A2 = [1,T,T^2/2,0,0,0;
      0,1,T,0,0,0;
      0,0,1,0,0,0;
      0,0,0,1,T,T^2/2;
      0,0,0,0,1,T;
      0,0,0,0,0,1]; %定义匀速运动时的状态转移矩阵
G2=[T^2/2,0;
    T,0;
    1,0;
    0,T^2/2;
    0,T;
    0,1]; %设置匀速运动时的输入向量转移矩阵
Q2=0.001*diag([1,1]); %设置状态转移协方差矩阵

%% 产生真实数据
x = x0; %在迭代产生真值前,给x赋初值
for k = 1:150%匀速直线
   x = A1*x + G1*sqrt(Q1)*randn(size(Q1,1),1); %状态一步转移,后面的是误差
    xA =[xA x]; % 将迭代得到的x加在xA后面一列
end
for k = 1:120%匀速圆周转弯
   x = A2*x + G2*sqrt(Q2)*randn(size(Q2,1),1); %状态一步转移,后面的是误差
    xA =[xA x]; % 将迭代得到的x加在xA后面一列
end
for k = 1:N-270%匀速直线
   x = A1*x + G1*sqrt(Q1)*randn(size(Q1,1),1); %状态一步转移,后面的是误差
    xA =[xA x]; % 将迭代得到的x加在xA后面一列
end 


%% IMM
H = [1 0 0 0 0 0;
    0 0 0 1 0 0]; %构建H矩阵
R = 2500*diag([1,1]); %构建观测协方差矩阵
t=1:T:N; %构建滤波的时间戳

完整代码下载链接:https://download.csdn.net/download/callmeup/89974153

程序讲解

概述

该函数实现了一种交互式多模型 ( I M M ) (IMM) (IMM)滤波器,结合了匀速运动 (Constant Velocity, C V CV CV) 和匀加速运动 (Constant Acceleration, C A CA CA) 模型。通过卡尔曼滤波,系统能够在不同运动模式之间切换,从而提高状态估计的准确性。

主要功能

  • 状态建模:定义状态转移矩阵、输入转移矩阵和协方差矩阵。
  • 真实数据生成:模拟通过匀速直线和匀加速运动生成的真实数据。
  • 卡尔曼滤波:实现针对 CV 和 CA 模型的卡尔曼滤波。
  • IMM算法:实现IMM算法,结合多个模型的输出,更新状态估计和模型概率。
  • 结果可视化:绘制真实值、测量值和滤波结果的比较图,以及误差的统计分析图。

详细讲解

1. 初始化

clear; % 清空工作区
clc; % 清空命令行
close all; % 关闭所有窗口
rng(0); % 固定随机种子
N = 600; % 仿真时间
T = 1; % 采样间隔
x0 = [1000,10,1,1000,10,1]'; % 初始化状态
  • N定义了仿真时间为600个时间点。
  • T是采样时间间隔。
  • x0是状态的初始值,包含位置和速度信息。

2. 状态转移矩阵和协方差矩阵

% CV匀速运动
A1 = [...]; % 状态转移矩阵
G1 = [...]; % 输入转移矩阵
Q1 = 0.001*diag([1,1]); % 状态转移协方差矩阵

% CA匀加速运动
A2 = [...]; % 状态转移矩阵
G2 = [...]; % 输入转移矩阵
Q2 = 0.001*diag([1,1]); % 状态转移协方差矩阵
  • A1A2定义了CV和CA模型的状态转移矩阵。
  • G1G2是输入转移矩阵,描述了模型对输入的响应。
  • Q1Q2是过程噪声协方差矩阵。

3. 生成真实数据

x = x0; % 初始状态
for k = 1:150 % 匀速直线
   x = A1*x + G1*sqrt(Q1)*randn(size(Q1,1),1); % 状态转移
   xA = [xA x]; % 储存状态
end
  • 通过循环生成包含匀速和匀加速运动的数据序列。

4. IMM算法

for mn = 1:MC % 蒙特卡罗次数
    % 模型初始化
    ...
    for k = 1:length(t) % 滤波过程
        ...
        % 残差与协方差计算
        ...
        % 状态更新
        ...
    end
end
  • 使用蒙特卡洛方法来评估滤波器的性能。
  • 在每次迭代中,计算不同模型的残差,并更新状态估计。

5. 结果后处理与可视化

% 计算均方根误差
EX1 = sqrt(sum(ex1.^2,1)/MC);
% 绘制结果
figure;
plot(xA(1,t), xA(4,t), 'k', ...);
  • 计算滤波器的误差,并绘制真实值、测量值和滤波结果的比较图。

6. 卡尔曼滤波函数

function [P_k,P_k_k_1,X_k]=kalman(F,T,H,Q,R,Z,X0,P0)
    ...
end
  • 该函数实现了卡尔曼滤波的核心算法,包括状态预测、协方差更新和增益计算。

总结

该MATLAB函数有效地实现了IMM算法,通过结合CV和CA模型,提高了对动态系统状态的估计精度。通过详细的可视化和误差分析,用户可以直观地观察到不同模型的表现和优势。

如有需要,可私信或通过下方的卡片联系我

标签:Acceleration,状态,Constant,矩阵,xA,IMM,协方差,转移
From: https://blog.csdn.net/callmeup/article/details/143589631

相关文章

  • 【MATLAB代码】基于EKF的IMM,三个模型的交互,包括:CV,CA,CT,附源代码下载链接
    基于交互多模型(IMM)算法的目标跟踪,使用了三种运动模型:匀速运动(CV)、匀加速运动(CA)和匀转弯运动(CT)。滤波方法为EKF文章目录运行结果源代码运行结果详解代码详解概述主要功能代码详细介绍初始化与仿真参数设置定义模型参数状态转移矩阵定义生成真实数据IMM......
  • 【模板进阶】std::is_union、std::is_class、std::integral_constant
    一、std::is_unionstd::is......
  • 【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
    之前咱们在这个文章中讲了timm包的加法,不少同学反馈要模块化的加法,那么这篇就讲解下模块化的加法,值得注意的是,这样改加载不了mobilebnetv4官方开源的权重了~论文地址:https://arxiv.org/pdf/2404.10518代码地址:https://github.com/tensorflow/models/blob/master/offic......
  • Introspect M5513-DDR5 MR-DIMM Module Test System
    M5513DDR5MR-DIMMModuleTestSystemComplete ChaaracterizationandFuncationalTestingofMR-DIMMModulesTheM5513isanall-inclusivememorytestsystemfornext-generationDDR5multiplexed-rankdualinline memorymodules(MR-DIMM).Operating......
  • Sigrity SPEED2000 Power Ground Noise Simulation模式如何进行电源地噪声分析操作指
    SigritySPEED2000PowerGroundNoiseSimulation模式如何进行电源地噪声分析操作指导-SODIMMSigritySpeed2000是时域仿真分析工具,PowerGroundNoiseSimulation模式可以观测器件的时域电压波形和观测电源地空间电压分布,以下图为例进行分析用Speed2000这个工具打开文件......
  • 硬件加速(Hardware Acceleration)指的是使用专门的硬件组件来加速某些计算任务的处理速
    硬件加速:GPU、FPGA与其他加速技术硬件加速(HardwareAcceleration)指的是使用专门的硬件组件来加速某些计算任务的处理速度,而不是依赖传统的中央处理器(CPU)。随着技术的不断发展,硬件加速已经成为许多高性能计算、人工智能(AI)、数据处理等领域的核心组成部分。常见的硬件加速器包括图......
  • timm 库学习总结
    timm库是聚合了各种SOTA图像分类模型的python库,里面有上千种模型,大部分模型还提供了在ImageNet数据集上预训练的权重。典型的如Resnet系列、Inception系列、ConvNeXt系列,以及基于ViT的模型。timm库支持的模型名称可通过内置的查询函数timm.list_models查看,各种模型性能评估排......
  • 【MATLAB代码】三个CT模型的IMM例程,各CT旋转速率不同,适用于定位、导航、目标跟踪
    三个CT模型,各CT模型下的运动旋转速率不同,适用于定位、导航、目标跟踪文章目录代码构成运行结果源代码代码讲解概述代码结构1.初始化2.仿真参数设置3.生成量测数据4.IMM迭代5.绘图主要功能函数部分1.卡尔曼滤波函数2.模型综合函数3.模型概率更新函数总结......
  • TI-Trends in Immunotherapy
    @目录一、征稿简介二、重要信息三、服务简述四、投稿须知一、征稿简介二、重要信息期刊官网:https://ais.cn/u/3eEJNv三、服务简述TrendsinImmunotherapy是一本开放获取的同行评审期刊,涵盖与所有基于免疫系统的领域相关的各个学科。TI的目标受众包括来自学术界、医疗......
  • PbootCMS提示:Undefined constant "core\basic\ISURL"
    要解决Undefinedconstant"core\basic\ISURL"的问题,可以在/core/basic/Url.php文件中定义ISURL常量。在文件顶部添加以下代码:define('ISURL',false);//或者根据需要设置为true完整代码如下:1<?php2/**3*@copyright(C)2016-2099HnaoyunInc.4*......