【目标跟踪】基于拓展卡尔曼滤波实现海上多目标跟踪滤波附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电子书和数学建模资料


相关文章
|
7天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
7天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
87 14
|
7天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
|
9天前
|
算法 计算机视觉
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
【MPDR & SMI】失配广义夹角随输入信噪比变化趋势、输出信干噪比随输入信噪比变化趋势研究(Matlab代码实现)
|
9天前
|
编解码 人工智能 算法
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
【采用BPSK或GMSK的Turbo码】MSK、GMSK调制二比特差分解调、turbo+BPSK、turbo+GMSK研究(Matlab代码实现)
|
9天前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
|
9天前
|
机器学习/深度学习 传感器 边缘计算
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
【故障诊断】基于时滞反馈随机共振的增强型旋转电机故障诊断(Matlab代码实现)
|
9天前
|
传感器 机器学习/深度学习 算法
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
【UASNs、AUV】无人机自主水下传感网络中遗传算法的路径规划问题研究(Matlab代码实现)
|
9天前
|
运维 算法
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
【故障诊断】基于最小熵反卷积、最大相关峰度反卷积和最大二阶环平稳盲反卷积等盲反卷积方法在机械故障诊断中的应用研究(Matlab代码实现)
|
7天前
|
机器学习/深度学习 传感器 算法
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)
【裂纹检测】检测和标记图片中的裂缝(Matlab代码实现)

热门文章

最新文章