【目标跟踪】基于拓展卡尔曼滤波实现海上多目标跟踪滤波附matlab代码

简介: 【目标跟踪】基于拓展卡尔曼滤波实现海上多目标跟踪滤波附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测雷达通信 无线传感器

信号处理图像处理路径规划元胞自动机无人机 电力系统

⛄ 内容介绍

随着科技的发展,雷达对目标跟踪的精确度要求越来越高.但在实际应用中,系统所处的环境会受到各种各样的干扰,此时,卡尔曼滤波器凭借其优良的噪声处理能力而被应用到各种领域,是现阶段雷达跟踪中最常用的算法.文章在卡尔曼滤波算法的基础上,就如何将其应用于雷达目标跟踪系统的问题进行了研究与仿真;分析了卡尔曼滤波与常增益滤波的适用范围及优缺点;给出了极坐标系下卡尔曼滤波的计算及过程噪声方差的获取方法;最后以目标仿真结果证明了估计的有效性.

⛄ 部分代码

function [tem,tam] = helperPassiveRangingErrorMetrics(ownship,isMSC)

% This is a helper function for passive ranging example using a single sensor

% and may be removed in a future release without notice.


% Copyright 2018 The MathWorks, Inc.


tem = trackErrorMetrics;

tem.ErrorFunctionFormat = 'custom';


% The ownship is a handle object and refers to the same object as does

% scenario. This helps the function to calculate metrics, which are a

% function of ownship.

if ~isMSC

   tem.EstimationErrorFcn = @(track,truth)rangeAndRateErrorCart(track,truth,ownship);

else

   tem.EstimationErrorFcn = @(track,truth)rangeAndRateErrorMSC(track,truth,ownship);

end

tem.EstimationErrorLabels = {'deltaR','deltaRSigmaP','deltaRSigmaM','deltaRR','deltaRRSigmaP','deltaRRSigmaM'};


tam = trackAssignmentMetrics;

tam.DistanceFunctionFormat = 'custom';

tam.AssignmentDistanceFcn = @assignmentByAttribute;


end


function [rError, rSigmaPlusError, rSigmaMinusError, ...

         rrError,rrSigmaPlusError,rrSigmaMinusError] = rangeAndRateErrorCart(track,truth,ownship)


% sigma values

sigmaValues = [0 -1 1];

n = numel(track.State); % State-size.

trackStateSigmas = track.State + chol(track.StateCovariance)*repmat(sigmaValues,[n 1]);

trackPos = trackStateSigmas(1:2:end,:);

trackVel = trackStateSigmas(2:2:end,:);


% truth

truthPos = truth.Position(:);

truthVel = truth.Velocity(:);


ownPose = pose(ownship);


% Error in range

rAct = norm(truthPos - ownPose.Position(:));

rEst = sqrt(dot(trackPos - ownPose.Position(:),trackPos - ownPose.Position(:),1));


rError = rEst(1) - rAct;

rSigmaMinusError = rEst(2) - rAct;

rSigmaPlusError = rEst(3) - rAct;


% Error in range-rate

rTruth = truthPos - ownPose.Position(:);

rrTruth = dot(truthVel - ownPose.Velocity(:),rTruth)/rAct;


rTracks = trackPos - ownPose.Position(:);

vTracks = trackVel - ownPose.Velocity(:);

rrTracks = dot(vTracks,rTracks,1);

rrError = rrTracks(1)/rEst(1) - rrTruth;

rrSigmaMinusError = rrTracks(2)/rEst(2) - rrTruth;

rrSigmaPlusError = rrTracks(3)/rEst(3) - rrTruth;


end


function [rError, rSigmaPlusError, rSigmaMinusError, ...

         rrError,rrSigmaPlusError,rrSigmaMinusError] = rangeAndRateErrorMSC(track,truth,ownship)

% range is available as 5th state and range-rate is a function of 6th

% state.

[rAct,rrAct] = trueRangeAndRate(truth,ownship);


% 1 std-dev of states.

deltainvR = sqrt(track.StateCovariance(5,5));

deltadRByR = sqrt(track.StateCovariance(6,6));


% Range and range-rate estimate

range = 1/track.State(5);

rangeRate = track.State(6)/track.State(5);


% Convert 1 std-dev of state to 1 std-dev of range and range-rate using

% linearization

deltaStateValues = [0 -deltainvR deltainvR;0 -deltadRByR deltadRByR];

H = [-range^2 0;-rangeRate*range range];

deltaRandRR = H*deltaStateValues;

deltaR = deltaRandRR(1,:);

deltaRR = deltaRandRR(2,:);


% Formulate outputs

rError = range - rAct;

rSigmaPlusError = range + deltaR(3) - rAct;

rSigmaMinusError = range + deltaR(2) - rAct;


rrError = rangeRate - rrAct;

rrSigmaPlusError = rangeRate + deltaRR(3) - rrAct;

rrSigmaMinusError = rangeRate + deltaRR(2) - rrAct;


end



function [range,rangeRate] = trueRangeAndRate(truth,ownship)

   ownPose = pose(ownship);

   r = truth.Position(:) - ownPose.Position(:);

   range = norm(r);

   v = truth.Velocity(:) - ownPose.Velocity(:);

   rangeRate = dot(v,r)/range;

end


function distance = assignmentByAttribute(track,truth)

   trackOriginationID = track.ObjectAttributes.TargetIndex;

   if trackOriginationID == truth.PlatformID

       distance = 0;

   else

       distance = inf;

   end

end

⛄ 运行结果

⛄ 参考文献

[1]陶洪久, 高俊, 吴巍. 基于卡尔曼滤波的多目标检测与跟踪[C]// 全球化制造高级论坛暨21世纪仿真技术研讨会. 2004.

⛄ 完整代码

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料


相关文章
|
16天前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
1月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
106 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
1月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
82 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
1月前
|
算法
基于卡尔曼滤波的系统参数辨识matlab仿真
此程序采用卡尔曼滤波技术实现系统参数在线辨识,通过MATLAB 2022a仿真展现参数收敛过程、辨识误差,并比较不同信噪比下系统性能。卡尔曼滤波递归地结合历史估计与当前观测,优化状态估计。参数辨识中,系统参数被视为状态变量,通过迭代预测和更新步骤实现在线估计,有效处理了线性系统中的噪声影响。
|
1月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
62 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
2月前
|
算法
基于kalman滤波的UAV三维轨迹跟踪算法matlab仿真
本文介绍了一种使用卡尔曼滤波(Kalman Filter)对无人飞行器(UAV)在三维空间中的运动轨迹进行预测和估计的方法。该方法通过状态预测和观测更新两个关键步骤,实时估计UAV的位置和速度,进而生成三维轨迹。在MATLAB 2022a环境下验证了算法的有效性(参见附图)。核心程序实现了状态估计和误差协方差矩阵的更新,并通过调整参数优化滤波效果。该算法有助于提高轨迹跟踪精度和稳定性,适用于多种应用场景,例如航拍和物流运输等领域。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于粒子滤波和帧差法的目标跟踪matlab仿真
本项目展示一种结合粒子滤波与帧差法的目标跟踪技术,在Matlab 2013b上实现。通过帧间差异检测运动目标,并利用粒子滤波优化跟踪精度。改进后的重采样方法提升了算法表现。核心代码详尽并附中文注释及操作指南。理论方面,帧差法通过对比连续帧识别移动对象;粒子滤波则基于一组随机粒子估计目标状态,两者结合有效应对复杂场景,如背景杂乱或光照变化,确保跟踪稳定可靠。
基于高通滤波器的ECG信号滤波及心率统计matlab仿真
**摘要:** 使用MATLAB2022a,实施高通滤波对ECG信号预处理,消除基线漂移,随后分析心率。系统仿真展示效果,核心代码涉及IIR HPF设计,如二阶滤波器的差分方程。通过滤波后的信号,检测R波计算RR间期,从而得到心率。滤波与R波检测是心电生理研究的关键步骤,平衡滤波性能与计算资源是设计挑战。
|
3月前
|
资源调度 SoC
基于UKF无迹卡尔曼滤波的电池Soc估计matlab仿真
**摘要:** 使用MATLAB2022a,基于UKF的电池SOC估计仿真比较真实值,展示非线性滤波在电动车电池管理中的效用。电池电气模型描述电压、电流与SoC的非线性关系,UKF利用无迹变换处理非线性,通过预测和更新步骤实时估计SoC,优化状态估计。尽管UKF有效,但依赖准确模型参数。
|
4月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度

热门文章

最新文章