主要内容

模拟一个扫描雷达

这个例子展示了如何模拟扫描单站雷达探测和跟踪。这个示例向您展示如何配置一个统计雷达模型与机械和电子扫描功能,如何设置一个场景管理工具来处理平台动力学和时间,以及如何检查生成的检测和跟踪。

介绍

统计雷达模型

统计雷达模型等radarDataGenerator为早期雷达系统的发展提供有价值的数据。系统建模的角度来看其性能特征,和一组最小的参数以及建立理论用于确定该系统将与环境进行交互。这包括规范的基本系统参数,如工作频率、带宽、和脉冲重复频率(脉冲),连同重要指标角度和距离分辨率、误警率和探测概率。有专用的模式为单站雷达模型,双基地,和被动操作。这个模型的主要输出是原始检测数据或序列跟踪更新。虽然时域信号不生成,发射器可以指定波形的数字ID使用这样话信号增益和拒绝就可以被考虑。检测可能输出的雷达坐标系,或场景框架如果接收雷达发射机的位置和方向的知识。跟踪生成使用各种各样的跟踪和追踪管理算法。数据速率是由一个系统更新率规范,以便检测以适当的速度生成。

场景管理

模型在串联工作radarScenario生成检测或跟踪数据随着时间的推移,在动态环境中。这个场景中对象不仅管理仿真时间,但是可以处理场景中对象之间传递的数据结构的要求当一个帧的检测或跟踪更新请求。雷达对象是安装在一个平台处理动态,如位置,速度,在场景框架和方向。这些场景平台也可能包含签名信息,描述了平台出现各种类型的传感器。就我们的目的而言,rcsSignature类将被用来赋予目标平台雷达截面。

扫描

属性来控制扫描可以找到与雷达对象定义。机械或电子扫描。机械扫描,指向方向不能改变瞬间,但受制于方位和仰角的最大旋转速率。电子扫描没有这样的约束,和扫描方向重置在每个循环的开始。雷达也允许同时执行机械和电子扫描。

这个数字显示在扫描模式这两种模式之间的区别。与电子模式扫描角总是增加,和机械模式扫描位置总是改变一个相邻的位置。雷达扫描方位首先因为这是主扫描方向,这是扫描的方向与最大程度限制。

场景:空气监测

对于这个场景,考虑一个扫描雷达系统天线安装在塔,可以用于跟踪飞机。你会模拟一个入站平台不同的RCS的概要文件,并检查检测和跟踪数据。你可以看到的影响信噪比和检测能力范围。

雷达系统

使用1 GHz的中心频率和带宽为1.5 MHz,产生大约100米的距离分辨率。模型每一个单脉冲扫描位置,设置更新率所需的脉冲重复频率。设置的大小范围歧义以反映脉冲重复频率的选择,并设置范围上限的两倍大小范围的模糊性,使检测的对象在第一和第二范围歧义。

%设置重复性的种子rng (“默认”);%系统参数c = physconst (“光速”);fc = 1 e9;%赫兹带宽= 1.5 e6;%赫兹脉冲重复频率= 4 e3;%赫兹updateRate =脉冲重复频率;管理员= c /(2 *带宽);% mrangeAmb = c /(2 *脉冲重复频率);% mrangeLims = [0 2 * rangeAmb];

除了选择机械和电子扫描模式,扫描行为的规范控制的扫描范围和视野(FoV)在方位角和仰角。FoV由方位角和仰角的可见区域在每一个扫描位置,类似于一个双边半功率波束宽度规格。扫描点选择,这样总角定义的扫描范围限制了不重叠的片段大小等于视场。扫描限制雷达中指定的帧,这可能是平台的框架通过旋转MountingAngles财产。

扫描方位和+ + / -20度/ -10度的仰角。将视场目标设置为4度方位和仰角8度。最后,指定完整的扫描模拟的总数,这将决定总仿真时间。

%扫描参数azLimits = 20 [-20];elLimits = -10 [10];fov = (4; 8);%度numFullScans = 24;%的数量全部扫描来模拟

扫描点的总数可以找到如下。扫描范围表示最小和最大扫描角参考天线孔径向量,所以扫描在一个方向上的总面积大于扫描的程度限制了一半的视场。总是一个矩形网格模式对az / el。

numScanPointsAz =地板(diff (azLimits) /视场(1)+ 1;numScanPointsEl =地板(diff (elLimits) /视场(2)+ 1;numScanPoints = numScanPointsAz * numScanPointsEl;

规范的角分辨率FoV分开使用,它允许角估计算法的建模,如单脉冲。这个角分辨率决定的能力区分目标,并用于实际的角精度来自Cramer-Rao下界(CRLB)单脉冲角估计的分辨率。同样,距离分辨率决定所需的最小间距范围内区分两个目标,但实际测距精度来自估计的CRLB范围。精确测量(范围、数据、角等)可以通过关闭测量噪声HasNoise财产。通常情况下,测量误差不去零随着信噪比的增加,没有束缚。这可以被偏见属性(RangeBiasFraction等),其中有一个为每个类型的测量。出于我们的目的,我们将保留这些默认值。

使用一个角分辨率等于1/4th FoV的在每一个方向,它允许16点之间的歧视目标在视场范围相同。

动物遗传资源= fov / 4;

参考目标和雷达环路增益

而不是直接指定传输功率、噪声功率,检测算法的细节,这雷达模型使用的概念雷达环路增益目标RCS和范围转化为一个信噪比,这是直接翻译成检测概率。雷达环路增益的雷达系统是一个重要的属性,和计算参考目标,它包含一个参考范围和RCS和接受者操作特征(ROC)检测和假警报概率。

使用参考目标的检测概率为90%和0 dBsm 20公里。使用默认的误警率1 e-6假警报每个分辨单元更新。

refTgtRange = 20 e3;refTgtRCS = 0;detProb = 0.9;faRate = 1 e-6;

构建雷达

构建雷达使用上面的参数。使用扫描下限高度设置安装雷达从平台的角度。这个点孔径向量,扫描区域的下沿平行于地面(也就是说,没有一个扫描点点雷达对地面)。

距= elLimits (1);%安装天线向上旋转

使仰角测量,假警报,并与相应的范围模棱两可已经……财产。模型一个雷达,只有措施范围和角度,集HasRangeRate为假。检测场景坐标中,雷达需要意识到发射机的方向。因为这个例子使用单站雷达,这可以通过使惯性导航系统(INS)的功能之内财产。

%创建雷达对象sensorIndex = 1;%需要一个惟一的标识符雷达= radarDataGenerator (sensorIndex,“UpdateRate”updateRate,“DetectionMode”,“单站”,“ScanMode”,“电子”,“TargetReportFormat”,“检测”,“DetectionCoordinates”,“场景”,“HasElevation”,真的,“之内”,真的,“HasRangeRate”假的,“HasRangeAmbiguities”,真的,“HasFalseAlarms”,真的,“CenterFrequency”足球俱乐部,“带宽”、带宽、“RangeResolution”管理员,“AzimuthResolution”动物遗传资源(1)“ElevationResolution”动物遗传资源(2)“ReferenceRange”refTgtRange,“ReferenceRCS”refTgtRCS,“DetectionProbability”detProb,“FalseAlarmRate”faRate,“RangeLimits”rangeLims,“MaxUnambiguousRange”rangeAmb,“ElectronicAzimuthLimits”azLimits,“ElectronicElevationLimits”elLimits,“FieldOfView”fov,“MountingAngles”,[0 0]);

使用助手类可视化扫描模式,和动画仿真循环。

scanplt = helperScanPatternDisplay(雷达);scanplt.makeOverviewPlot;

图包含一个坐标轴对象。坐标轴对象与标题扫描模式包含21线类型的对象。这些对象代表扫描点,FoV, ScanLimits。

扫描点方位完全扩展到指定的方位扫描限制,虽然略的仰角扫描点拉需要避免重叠或冗余的扫描点。

计算系统的射程角分辨率细胞总数,和总数量的帧用于检测。然后计算出预期的假警报数量乘以总数误警率的解析细胞在整个模拟审讯。

numResolutionCells = diff (rangeLims) * prod (fov) /(管理员* prod(动物遗传资源));numFrames = numFullScans * numScanPoints;%的帧总数检测expNumFAs = faRate * numFrames * numResolutionCells%预计FAs的数量
expNumFAs = 9.5040

场景和目标

使用radarScenario对象来管理高层仿真流程。这个对象提供了功能添加新平台和快速生成检测传感器场景中的对象。同时在仿真时间的流动。使用帧总数前一步中找到所需的计算StopTime。基于自适应更新仿真时间更新场景中物体的速度,设置场景更新率为零。

%创建场景stopTime = numFullScans * numScanPoints /脉冲重复频率;现场= radarScenario (“StopTime”stopTime,“UpdateRate”,0);

使用平台方法来生成新平台的对象,将它们添加到现场,并返回一个句柄访问平台属性。每个平台都有一个惟一的ID,分配的场景在建设。一个静态的平台,只有位置属性需要设置。标准常速运动轨迹模拟,使用kinematicTrajectory对象和指定的位置和速度。

创建两个目标平台在不同范围,入站在不同的速度和角度。

%建立平台rdrPlat =平台(场景,“位置”[0 0 12]);% 12米起源的地方tgtPlat(1) =平台(场景,“轨迹”kinematicTrajectory (“位置”(38 e3 6 e3 10 e3),“速度”(-380 -50 0)));tgtPlat(2) =平台(场景,“轨迹”kinematicTrajectory (“位置”(25 e3 3 e3 1 e3),“速度”(-280 -10)));

启用方便检测方法和自动仿真时间,进步的场景需要注意雷达对象的构造。要做到这一点,挂载雷达平台的填充传感器属性的平台。多个传感器在一个平台上,山传感器属性可以是单元阵列传感器的对象。

%安装雷达平台rdrPlat。传感器= radar;

rcsSignature类可以被用来指定平台RCS扫描角的函数。对于一个简单的constant-RCS签名,设置模式属性为一个标量值。让一个平台20 dBsm,另4 dBsm演示检测能力的差异。

%设置目标平台RCS概要文件tgtRCS = (20, 4);% dBsmtgtPlat (1)。签名= rcsSignature (“模式”,tgtRCS (1));tgtPlat (2)。签名= rcsSignature (“模式”tgtRCS (2));

检测能力

计算出的理论信噪比,可以预期目标。因为使用一个简单的运动轨迹,计算真理的位置和范围。

时间= (0:numFrames-1)。/ updateRate;tgtPosTruth (:: 1) = tgtPlat (1)。位置+ time*tgtPlat(1).Trajectory.Velocity; tgtPosTruth(:,:,2) = tgtPlat(2).Position + time*tgtPlat(2).Trajectory.Velocity; tgtRangeTruth(:,1) = sqrt(sum((tgtPosTruth(:,:,1)-rdrPlat.Position).^2,2)); tgtRangeTruth(:,2) = sqrt(sum((tgtPosTruth(:,:,2)-rdrPlat.Position).^2,2));

然后使用已知的雷达目标RCS和环路增益计算雷达模型得到真相为每个目标信噪比。

tgtSnr = tgtRCS - 40 * log10 (tgtRangeTruth) + radar.RadarLoopGain;

震级只有检测方案,如CFAR、指定的检测概率和误警率,所需的最小信噪比检测是由

minSnr = 20 * log10 (erfcinv (2 * radar.FalseAlarmRate) - erfcinv (2 * radar.DetectionProbability));% dB

计算的最小范围检测。

Rd = 10。^ ((tgtRCS minSnr + radar.RadarLoopGain) / 40);%米

比较均值范围和最低目标的信噪比和信噪比阈值范围。的总旅行距离足够小,基于范围的目标信噪比并没有明显变化。

snrMargin = (tgtSnr 1)——minSnr意思
snrMargin =1×28.6781 - 0.5978
rangeMargin = (Rd -意味着(tgtRangeTruth 1) / 1 e3%公里
rangeMargin =1×225.7310 - 0.8812

第一个目标是8分贝比用给定的CFAR检测所需参数,而第二个目标几乎是观察不到的。

模拟检测

主要模拟循环开始通过调用推进在场景中对象。该方法步骤的场景中期待下次场景中对象需要一个更新,并返回假当该值指定的停止时间,退出循环。注意,第一次调用推进不一步仿真时间,所以第一帧数据收集可能发生在0。作为一个替代使用推进,scene.SimulationStatus可以检查来确定仿真运行完成。

在循环内部,检测和跟踪生成方法可以呼吁任何传感器单独对象(请参阅传感器一步方法),但便利方法存在生成检测和跟踪所有传感器和目标场景中有一个函数调用。因为我们只有一个传感器,检测(现场)是一个很好的解决方案的列表所有场景中目标的检测。通过启动代检测在顶层,场景本身处理所需时间的流逝,INS和其他传感器的配置数据。这里使用的可视化辅助类动画扫描模式。

allDets = [];%初始化所有检测生成的列表numFrames lookAngs = 0(2日);numFrames simTime = 0 (1);帧= 0;%当前帧推进(场景)%前进直到到达StopTime%增加帧索引和记录仿真时间帧=框架+ 1;simTime(帧)= scene.SimulationTime;%生成新的检测依据=检测(现场);%角度寻找检验记录lookAngs(:帧)= radar.LookAngle;%更新覆盖图scanplt.updatePlot (radar.LookAngle);%编译任何新的检测allDets = (allDets;依据);结束

图包含2轴对象。坐标轴对象1标题扫描模式包含22行,类型的对象。这些对象代表扫描点,FoV, ScanLimits。坐标轴对象2标题波束指向包含39对象类型的表面,颤抖,线。

扫描行为

情节记录的角度寻找前两个完整的扫描检查模式。雷达扫描方位、高程和步骤在每个方位扫描,瞬间调整角度看每个新开始扫描。

图;情节(simTime (1:2 * numScanPoints) * 1 e3, lookAngs (:, 1:2 * numScanPoints));包含(“时间(ms)”);ylabel (‘看角(度));传奇(“方位”,“高度”);标题(的角度看);

图包含一个坐标轴对象。坐标轴对象与标题看角度包含2线类型的对象。这些对象表示方位、仰角。

检测

检查的内容objectDetection通过我们的雷达作为输出。

allDets {1}
ans = objectDetection属性:时间:7.5000 e-04测量:x1双[3]MeasurementNoise: [3 x3双]SensorIndex: 1 ObjectClassID: 0 MeasurementParameters: [1 x1 struct] ObjectAttributes: {[1 x1 struct]}

时间仿真时间的雷达检测生成的。SensorIndex显示了哪些传感器检测是由(这是重要的,当有多个传感器和您正在使用scene-level检测方法)。测量是可测量的值与检测。的格式取决于检测模式的选择和输出坐标。MeasurementNoise给出了测量的方差和协方差和使用追踪模型。在场景坐标输出检测时,测量领域只是目标的估计位置向量,和测量噪声给那个位置估计的协方差。

ObjectAttributes字段包含一些有用的元数据。检查的内容元数据第一检测。

allDets {1} .ObjectAttributes {1}
ans =结构体字段:TargetIndex: 3信噪比:13.1821

TargetIndex显示了检测平台,生成的索引,这是惟一标识符指定场景的顺序构造平台。这个检测的信噪比我们预计从相应的目标平台。当检测是一个假警报,TargetIndex将是1,这是一个无效的平台ID。

收集目标指数,每个检测到向量的信噪比和时间。

detTgtIdx = cellfun (@ (t) t.ObjectAttributes {1}。TargetIndex allDets);detTgtSnr = cellfun (@ (t) t.ObjectAttributes {1}。信噪比、allDets);detTime = cellfun (@ t (t)。时间,allDets);firstTgtDet =找到(detTgtIdx = = tgtPlat (1) .PlatformID);secondTgtDet =找到(detTgtIdx = = tgtPlat (2) .PlatformID);

找到FA检测的总数。

numFAs =元素个数(找到(detTgtIdx = = 1))
numFAs = 7

这是接近FAs的预期数量计算。

收集测量数据检测和情节真实位置的两个目标平台。

tgtPosObs = cell2mat (cellfun (@ (t) t.Measurement allDets,“UniformOutput”,0)');次要情节(1、2、1);helperPlotPositionError (tgtPosTruth(:,: 1),时间,tgtPosObs (:, firstTgtDet) detTime (firstTgtDet)的场景。SimulationTime);标题(“目标1位置误差”);次要情节(1、2、2);helperPlotPositionError (tgtPosTruth(:,: 2),时间,tgtPosObs (:, secondTgtDet) detTime (secondTgtDet)的场景。SimulationTime);标题(“目标2位置误差”);集(gcf,“位置”得到(gcf“位置”)+ (600 0 0 0));

图包含2轴对象。坐标轴对象1标题目标位置误差包含一个类型的对象。坐标轴对象2标题目标位置误差包含一个类型的对象。

大部分的检测来自第一个目标。然而,第一个目标是没有检测到的每一帧,和第二个目标产生了许多检测尽管低信噪比。虽然第一个目标很容易检测,测量误差大,因为目标是在第二个范围歧义和没有进行消歧。第二个目标,当检测到,位置误差表明,符合100米距离分辨率和相对贫穷的角分辨率。

看的总方差检测信噪比。总方差之和边际差异在每一个笛卡尔方向(X, Y, Z)。这种差异包括估计的影响在射程角空间以及那些统计数据场景坐标的变换。

detTotVar = cellfun (@ (t)跟踪(t.MeasurementNoise) allDets);图;次要情节(1、2、1);helperPlotPositionTotVar (detTgtSnr (firstTgtDet) detTotVar (firstTgtDet));标题(的第一个目标);次要情节(1、2、2);helperPlotPositionTotVar (detTgtSnr (secondTgtDet) detTotVar (secondTgtDet));标题(“第二个目标”);集(gcf,“位置”得到(gcf“位置”)+ (600 0 0 0));

图包含2轴对象。坐标轴对象1标题第一个目标包含一个类型的对象。轴2标题第二目标包含一个对象类型的线。

虽然绝对位置误差的第一目标是更大范围歧义,较低的测量方差反映了更大的信噪比的首要目标及其显然短程。

模拟跟踪

radarDataGenerator还能够执行开环跟踪。输出检测,可以输出跟踪更新。

再次运行仿真,但这一次让配置雷达模型直接输出跟踪。首先,设置一些属性的雷达模型生成跟踪场景框架。

释放(雷达);%为re-simulation解锁雷达。TargetReportFormat =“跟踪”;雷达。TrackCoordinates =“场景”;

跟踪可以由许多不同的算法。有简单的α-β滤波器和线性卡尔曼滤波器,扩展,和无味,与常速恒定加速度,constant-turnrate运动模型。指定要使用的算法FilterInitializationFcn财产。这是一个函数处理或一个函数的名字在一个特征向量,为例@initcvekf“initcvekf”。如果使用一个函数处理,它必须采取一个初始检测作为输入,并返回一个初始化跟踪器对象。任何用户定义的函数可以使用相同的签名。对于这个示例,使用常速扩展卡尔曼滤波器。

雷达。FilterInitializationFcn = @initcvekf;

模拟回路的整体结构是相同的,但在这种情况下雷达的一步必须手动调用函数。所需的输入是一个目标构成结构,通过调用targetPoses在雷达平台,INS结构,通过调用构成在雷达平台,和当前的仿真时间。

重启(现场);%重启的情况allTracks = [];%初始化所有跟踪数据的列表推进(场景)%生成新的跟踪数据tgtPoses = targetPoses (rdrPlat);ins =姿势(rdrPlat);跟踪=雷达(tgtPoses、ins scene.SimulationTime);%编译任何新的跟踪数据allTracks = (allTracks;跟踪);结束

检查跟踪对象。

allTracks (1)%看第一个跟踪更新
ans = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 1 UpdateTime: 0.0093年龄:34个国家:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 TrackLogic:“历史”TrackLogicState: [1 1 0 0 0] IsConfirmed: 1 IsCoasted: 0 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]

TrackID跟踪文件的唯一标识符,SourceIndex跟踪器的ID对象报告,这是有用的,当你有多个场景中跟踪器。当使用multi-hypothesis追踪,BranchID给出了指数所使用的假设。的状态字段包含的状态信息更新。因为常速模型和scenario-frame跟踪坐标系,状态包括位置和速度矢量。UpdateTime给的时间生成这个跟踪更新。另一个重要的属性,IsCoasted,告诉你如果这个跟踪更新使用新的目标探测更新过滤器,或如果它只是向前传播时间从过去的目标检测(跟踪“滑行”)。

ObjectAttributes结构给平台其签名的ID被检测到,并在更新签名的信噪比。

allTracks (1) .ObjectAttributes
ans =结构体字段:TargetIndex: 3信噪比:19.1837

收集目标指标和更新时间。还要检查有多少检测用于更新我们的跟踪。

trackTgtIdx = arrayfun (@ (t) t.TargetIndex [allTracks.ObjectAttributes]);updateTime = [allTracks.UpdateTime];firstTgtTrack =找到(trackTgtIdx = = tgtPlat (1) .PlatformID);secondTgtTrack =找到(trackTgtIdx = = tgtPlat (2) .PlatformID);numUpdates =元素个数(找到(~ (allTracks.IsCoasted)))%的总数与新的检测数据跟踪更新
numUpdates = 33

这是大约的数量non-FA检测生成的第一部分。

看报道在XY平面位置及其协方差,以及真理的位置数据。因为第一个目标是在第二个范围歧义和没有进行消歧,找到“真相”的模棱两可的位置为第一目标。

洛杉矶= tgtPosTruth (:: 1) - rdrPlat.Position;R =√sum(洛杉矶。^ 2,2));洛杉矶= los. / R;Ramb =国防部(R, rangeAmb);tgtPosTruthAmb = rdrPlat。位置+洛。* Ramb;

使用helper函数画一个可视化的位置跟踪。

图;次要情节(1、2、1);helperPlotPositionTrack (tgtPosTruthAmb allTracks (firstTgtTrack));标题(第一个目标跟踪的);次要情节(1、2、2);helperPlotPositionTrack (tgtPosTruth (:,: 2), allTracks (secondTgtTrack));标题(第二个目标跟踪的);集(gcf,“位置”得到(gcf“位置”)+ (600 0 0 0));

图包含2轴对象。坐标轴对象1标题第一个目标跟踪包含11线类型的对象。这些对象代表真理的位置,位置估计,协方差。坐标轴对象2标题第二目标跟踪包含25线类型的对象。这些对象代表真理的位置,位置估计,协方差。

在这两种情况下,位置估计先收敛的真理(或range-ambiguous真理)轨迹。第一我们有了更多的目标跟踪更新和最终状态出现接近稳态收敛。看着协方差轮廓,注意到预期的初始大小减少跟踪过滤温度升高。

仔细看看跟踪性能,情节的大小位置估计误差为目标,并指示哪些样本更新目标检测。

图;次要情节(1、2、1);helperPlotPositionTrackError (tgtPosTruthAmb、时间allTracks (firstTgtTrack) updateTime (firstTgtTrack));标题(的第一个目标模棱两可的位置误差);次要情节(1、2、2);helperPlotPositionTrackError (tgtPosTruth(:,: 2),时间,allTracks (secondTgtTrack) updateTime (secondTgtTrack));标题(“第二个目标位置误差”);集(gcf,“位置”得到(gcf“位置”)+ (600 0 0 0));

图包含2轴对象。坐标轴对象1标题第一个目标模糊位置误差包含2线类型的对象。这些对象代表摸样,更新。坐标轴对象2标题第二目标位置误差包含2线类型的对象。这些对象代表摸样,更新。

第一目标,具有更大的信噪比,位置误差减少样品上有一个新的检测更新跟踪文件(一个红色圆圈)。自第二次目标信噪比低得多,在个别检测误差大足以增加轨道的位置误差。尽管如此,第二个目标跟踪定位误差有一个初始下降的趋势,和估计的状态可能会收敛。

有一个问题与第一个目标跟踪。在第二范围模糊,因为它是一个组件的运动垂直于视线,视速度变化,常速卡尔曼滤波器无法收敛。

结论

在本例中您配置一个统计使用的雷达系统仿真和分析的目标检测能力和跟踪能力。您看到了如何使用扫描范围和视野属性定义一个扫描模式,如何运行雷达模型与场景管理工具,以及如何检查生成的检测和跟踪。

辅助函数

函数helperPlotPositionError (tgtPosTruth、时间、tgtPosObs detTime, T) tgtPosTruthX = interp1(时间,tgtPosTruth (: 1), detTime)。”;tgtPosTruthY = interp1(时间,tgtPosTruth (:, 2), detTime)。”;tgtPosTruthZ = interp1(时间,tgtPosTruth (:, 3), detTime)。”;呃=√(tgtPosTruthX tgtPosObs (1:))。^ 2 + (tgtPosTruthY tgtPosObs (2:))。^ 2 + (tgtPosTruthZ tgtPosObs (3:)) ^ 2);情节(detTime * 1 e3,犯错/ 1 e3,“- o”);网格;xlim ([0 T * 1 e3]);ylabel (“均方根误差(公里));包含(“时间(ms)”);结束函数helperPlotPositionTotVar (detTgtSnr detTotVar)情节(detTgtSnr detTotVar,“- o”);网格;包含(“信噪比(dB)”);ylabel (“总Var (m ^ 2)”);结束函数helperPlotPositionTrack (tgtPosTruth跟踪)情节(tgtPosTruth (: 1) / 1 e3, tgtPosTruth (:, 2) / 1 e3);持有;updateIdx =找到(~ [tracks.IsCoasted]);θ= 0:0.01:2 *π;印第安纳州= 1:2:元素个数(updateIdx)%绘制更新T =歌曲(updateIdx(印第安纳州));情节(T.State (1) / 1 e3, T.State (3) / 1 e3,*黑的);σ= T。状态Covariance([1 3],[1 3]); [evec,eval] = eigs(sigma); mag = sqrt(diag(eval)).'; u = evec(:,1)*mag(1); v = evec(:,2)*mag(2); x = cos(theta)*u(1) + sin(theta)*v(1); y = cos(theta)*u(2) + sin(theta)*v(2); plot(x/1e3 + T.State(1)/1e3,y/1e3 + T.State(3)/1e3,“红色”);结束持有;网格;包含(“X(公里));ylabel (“Y”(公里));传奇(“真理的位置”,位置估计的,协方差的,“位置”,“西北”);结束函数helperPlotPositionTrackError (tgtPosTruth、时间跟踪,updateTime)状态= [tracks.State];:sx =状态(1);sy =状态(3:);:深圳=状态(5日);x = interp1(时间、tgtPosTruth (: 1), updateTime);y = interp1(时间,tgtPosTruth (:, 2), updateTime);z = interp1(时间、tgtPosTruth (:, 3), updateTime);呃=√(x-sx)。^ 2 + (y-sy)。^ 2 + (z-sz)。^ 2);isUpdate = ~ (tracks.IsCoasted);情节(updateTime * 1 e3,犯错); hold;情节(updateTime (isUpdate) * 1 e3,犯错(isUpdate),”或“);持有;网格;包含(“更新时间(ms)”);ylabel (“错误(m)”)传说(“摸”,“更新”,“位置”,“西北”);结束