主要内容

跟踪逻辑概论

这个例子显示了如何定义和使用确认和删除逻辑是基于历史或得分。介绍了trackHistoryLogictrackScoreLogic对象,并展示了如何使用它们作为独立的对象和如何使用它们的一部分trackerGNN

介绍

追踪的追踪维护列表,或目标状态的估计在感兴趣的领域。如果无法分配给任何检测跟踪已经维护的追踪,追踪发起一个新的轨道。在大多数情况下,目前尚不清楚新的跟踪代表一个真正的目标或一个假的。首先,创建一个跟踪试探性的的地位。如果获得足够的证据,跟踪确认。同样,如果没有分配到一个跟踪检测,跟踪摸样(预测没有校正),但经过几错过更新,跟踪器删除轨道。

有两种主要方法在文献中使用的确认和删除跟踪:

  1. 基于历史:跟踪计数检测的数量分配给最近的一些更新的跟踪。如果分配足够的检测,跟踪确认。如果跟踪不够分配给任何检测更新,删除。这种类型的逻辑通常被称为M-out-of-NLast-N,这意味着N更新,必须发现至少_M _次跟踪确认。

  2. 参考:跟踪计算可能性跟踪是一个真正的目标。相反的可能性,我们使用分数,定义为日志的可能性。积极跟踪分数高意味着追踪的很可能是一个真正的目标。非常消极的跟踪分数意味着追踪可能是错误的。因此,我们可以设置一个阈值确认跟踪如果分数足够高。如果分数很低,或从最大瀑布足够分数,被删除。

在下面几节中,您可以看到如何定义和使用两种类型的对象,实现基于历史和参考跟踪逻辑。

使用一个基于历史跟踪逻辑来确认和删除一个轨道

最简单的类型的跟踪逻辑是基于历史。这种类型的逻辑数多少次跟踪检测(或错过了)在最近的N更新。你想证实一个跟踪3检测后在5更新(3分(满分是5分),和删除后连续6失误。首先,创建一个trackHistoryLogic对象维护跟踪确认和删除历史通过定义阈值。

historyLogic = trackHistoryLogic (“ConfirmationThreshold”[3 - 5],“DeletionThreshold”6)
historyLogic = trackHistoryLogic属性:ConfirmationThreshold: [3 - 5] DeletionThreshold:[6 6]历史:[0 0 0 0 0 0]

为了说明这一点,在前5更新,跟踪检测到其他更新。下面显示了如何跟踪逻辑完全3的5支安打后得到证实。使用初始化方法来初始化对象的第一次打击。然后使用打击小姐方法表明是否跟踪逻辑被击中或错过更新,分别。

checkConfirmation方法用于检查跟踪可以证实基于它的历史。使用输出方法追踪历史,它是一个逻辑数组的长度Nmax = max (Nconf Ndel)。在这个例子中,Nmax是6。

wasInitialized = false;%的对象被初始化了吗?我= 1:5 detectedFlag =逻辑(mod(我,2));%只有真正奇怪的更新如果detectedFlag & & ~ wasInitialized init (historyLogic) wasInitialized = true;elseifdetectedFlag & & wasInitialized打击(historyLogic)其他的小姐(historyLogic)结束历史=输出(historyLogic);confFlag = checkConfirmation (historyLogic);disp ([“跟踪历史”是:num2str(历史)”。确认标记:“num2str (confFlag)])结束
追踪历史:1 0 0 0 0 0。确认标志是:跟踪历史:0 1 0 0 0 0。确认标志:0跟踪历史:1 0 1 0 0 0。确认标志是:跟踪历史:0 1 0 1 0 0。确认标志:0跟踪历史:1 0 1 0 1 0。确认标志是:1

现在假设跟踪没有检测到几个更新。第六次更新后应该被删除。使用checkDeletion方法检查是否被删除。

i = 1:6小姐(historyLogic);%每个更新跟踪未被检测到历史=输出(historyLogic);deleteFlag = checkDeletion (historyLogic);disp ([“跟踪历史”是:num2str(历史)”。删除标志:“num2str (deleteFlag)])结束
追踪历史:0 1 0 1 0 1。删除标志是:跟踪历史:0 0 1 0 1 0。删除标志是:0跟踪历史:0 0 0 1 0 1。删除标志是:跟踪历史:0 0 0 0 1 0。删除标志是:跟踪历史:0 0 0 0 0 1。删除标志是:跟踪历史:0 0 0 0 0 0。删除标志是:1

使用参考跟踪逻辑来确认和删除一个轨道

在许多情况下,这是不够的,知道分配一个跟踪检测。你可能需要考虑作业的可能性是正确的。还有一个需要知道可能的检测是一个真正的目标,基于它探测概率或者有可能是假的,基于它误警率。此外,如果跟踪是新的,你需要考虑,β,新目标可能会发现在一个单位体积。

使用trackScoreLogic对象创建一个参考跟踪确认和删除逻辑。定义ConfirmationThresholdDeletionThreshold两个标量值。

当分配一个跟踪检测,你更新跟踪逻辑与冲击,在大多数情况下跟踪分数增加。的ConfirmationThreshold定义所需的最低分数确认跟踪。

跟踪分数降低当跟踪没有分配检测。的DeletionThreshold用于定义多少我们允许最高分数的分数降低之前删除。

scoreLogic = trackScoreLogic (“ConfirmationThreshold”25岁的“DeletionThreshold”5)
scoreLogic = trackScoreLogic属性:ConfirmationThreshold: 25 DeletionThreshold: 5分:0 MaxScore: 0
pd = 0.9;%的概率检测pfa = 1 e-6;%的概率假警报体积= 1;%的体积传感器检测本β= 0.1;在单位体积%的新目标利率wasInitialized = false;%的对象被初始化了吗?

确认跟踪使用参考逻辑非常类似于使用基于历史逻辑确认跟踪。主要的区别在于,现在考虑到额外的参数,包括传感器的统计性能以及剩余的距离跟踪与检测。

您使用初始化,打击,小姐方法来初始化在第一次成功,更新trackScoreLogic后续的冲击,分别与一个小姐,或更新。

您使用checkConfirmation方法检查跟踪确认。您使用输出方法来获取当前分数和最大得分[currentScore, maxScore]数组中。

r = rng (2018);%设置随机种子可重复的结果numSteps1 = 6;成绩= 0 (numSteps1, 2);i = 1: numSteps1 l = 0.05 + 0.05 *兰德;%的测量的可能性detectedFlag =逻辑(mod(我,2));%甚至只更新在这个例子中是真实的如果detectedFlag & & ~ wasInitialized init (scoreLogic,体积,β);wasInitialized = true;elseifdetectedFlag & & wasInitialized打击(scoreLogic,体积,l);其他的小姐(scoreLogic);结束分数(我:)=输出(scoreLogic);confFlag = checkConfirmation (scoreLogic);disp ([“分数和MaxScore:”num2str(分数(我,:)),”。确认标记:“num2str (confFlag)])结束
分数和MaxScore: 11.4076 - 11.4076。确认标志是:0得分和MaxScore: 9.10498 - 11.4076。确认标志是:0得分和MaxScore: 20.4649 - 20.4649。确认标志是:0得分和MaxScore: 18.1624 - 20.4649。确认标志是:0得分和MaxScore: 29.2459 - 29.2459。确认标志是:1分数和MaxScore: 26.9433 - 29.2459。确认标志是:1
rng (r);%随机种子回到原来的设置

注意跟踪分数每增加每个成功更新和减少漏检。一旦跟踪分数高于ConfirmationThreshold, checkConfirmation函数返回true,这意味着现在跟踪确认。

在基于历史记录的逻辑,如果跟踪没有分配给任何检测,它最终会被删除。的DeletionThreshold属性用于确定当跟踪分数降低了足够的应该删除,以便跟踪。注意,分数不低于DeletionThreshold,只区别当前获得的分数和最大分数之间的轨道应该低于阈值。原因是如果一个跟踪许多成功更新后获得一个高分,如果我们使用了绝对分数,需要太多的错过了跟踪更新删除。下面显示了一个跟踪三个失误后被删除。

numSteps2 = 3;分数(+ 1:结束+ numSteps2:) = 0 (numSteps2, 2);i = 1: numSteps2小姐(scoreLogic);deleteFlag = checkDeletion (scoreLogic);分数(numSteps1 +我,:)=输出(scoreLogic);disp ([“分数和MaxScore:”num2str(分数(numSteps1 +我,:)),”。删除标志:“num2str (deleteFlag)])结束
分数和MaxScore: 24.6407 - 29.2459。删除标志是:0得分和MaxScore: 22.3381 - 29.2459。删除标志是:1分数和MaxScore: 20.0355 - 29.2459。删除标志是:1
deletionScore =分数(:,2)+ scoreLogic.DeletionThreshold;楼梯(分数)情节([1,numSteps1 + numSteps2], [scoreLogic。ConfirmationThreshold分数Logic.ConfirmationThreshold],“——”)楼梯(deletionScore“——”)标题(“跟踪分数和最大分数”)传说(“分数”,“MaxScore”,“ConfirmationThrehsold”,“DeletionThreshold”,“位置”,“最佳”)

图包含一个坐标轴对象。坐标轴对象分数和最大分数与音轨包含4楼梯类型的对象,线。这些对象代表分数,MaxScore、ConfirmationThrehsold DeletionThreshold。

如果你想延迟跟踪删除,直到更多的失误发生,只是改变了DeletionThreshold更多的负面价值。

使用跟踪器跟踪逻辑

通常,跟踪逻辑是使用在一个跟踪器。配置trackerGNN使用基于历史逻辑跟踪确认后3成功5更新和删除后5错过6更新。

追踪= trackerGNN (“作业”,“拍卖”,“ConfirmationThreshold”[3 - 5],“DeletionThreshold”(5 - 6),“TrackLogic”,“历史”)
追踪= trackerGNN属性:TrackerIndex: 0 FilterInitializationFcn:“initcvekf”MaxNumTracks: 100 MaxNumDetections:正MaxNumSensors: 20个任务:“拍卖”AssignmentThreshold:[30正]AssignmentClustering:‘off’OOSMHandling:“终止”TrackLogic:“历史”ConfirmationThreshold: [3 - 5] DeletionThreshold: [5 - 6] HasCostMatrixInput:假HasDetectableTrackIDsInput:假StateParameters: [1 x1 struct] ClassFusionMethod:‘没有’NumTracks: 0 NumConfirmedTracks: 0 EnableMemoryManagement:假的

下面的循环更新的跟踪检测每个奇数编号的更新。5更新后,追踪确认。您可以查看跟踪历史和跟踪每次更新通过检查后确认标志TrackLogicStateIsConfirmed字段的跟踪输出。

我= 1:5 detectedFlag =逻辑(mod(我,2));%只有真正奇怪的更新如果detectedFlag检测= {objectDetection(我,[1,2,3])};其他的检测= {};结束[~,~,allTracks] =追踪(检测,我)结束
allTracks = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 1年龄:1状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [1 0 0 0 0 0] IsConfirmed: 0 IsCoasted: 0 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
allTracks = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 2年龄:2状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [0 1 0 0 0 0] IsConfirmed: 0 IsCoasted: 1 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
allTracks = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 3年龄:3状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [1 0 1 0 0 0] IsConfirmed: 0 IsCoasted: 0 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
allTracks = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 4年龄:4状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [0 1 0 1 0 0] IsConfirmed: 0 IsCoasted: 1 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
allTracks = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 5年龄:5状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [1 0 1 0 1 0] IsConfirmed: 1 IsCoasted: 0 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]

下面的循环更新追踪5 5次失误。4额外的更新后的记录被删除(9更新总体)因为它错过了检测4日,6日,7日,8日和9日更新(5个的最后6更新)。

我= 1:5检测= {};confirmedTrack =追踪(检测,我+ 5)结束
confirmedTrack = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 6年龄:6状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [0 1 0 1 0 1] IsConfirmed: 1 IsCoasted: 1 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
confirmedTrack = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 7岁:7状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [0 0 1 0 1 0] IsConfirmed: 1 IsCoasted: 1 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
confirmedTrack = objectTrack属性:TrackID: 1 BranchID: 0 SourceIndex: 0 UpdateTime: 8岁:8状态:x1双[6]StateCovariance: [6 x6双]StateParameters: [1 x1 struct] ObjectClassID: 0 ObjectClassProbabilities: 1 TrackLogic:“历史”TrackLogicState: [0 0 0 1 0 1] IsConfirmed: 1 IsCoasted: 1 IsSelfReported: 1 ObjectAttributes: [1 x1 struct]
confirmedTrack = 0 x1 objectTrack数组属性:TrackID BranchID SourceIndex UpdateTime年龄状态StateCovariance StateParameters ObjectClassID ObjectClassProbabilities TrackLogic TrackLogicState IsConfirmed IsCoasted IsSelfReported ObjectAttributes confirmedTrack = 0 x1 objectTrack数组属性:TrackID BranchID SourceIndex UpdateTime年龄状态StateCovariance StateParameters ObjectClassID ObjectClassProbabilities TrackLogic TrackLogicState IsConfirmed IsCoasted IsSelfReported ObjectAttributes

总结

跟踪确认追踪器需要一个方法被认为是真正的目标和删除后跟踪不分配任何检测一段时间后。提出了两种类型的跟踪确认和删除逻辑:一个基于历史逻辑和参考跟踪逻辑。基于历史记录的逻辑只考虑是否分配一个跟踪检测最近的更新。统计测量的参考跟踪逻辑提供了一个可能的轨道是代表一个真正的目标。这两种类型的跟踪逻辑对象可以作为独立的对象,但通常使用在一个跟踪器对象。