主要内容

基于到达时间差的目标跟踪

这个例子展示了如何使用到达时间差(TDOA)跟踪对象。本例介绍了使用TDOA测量进行定位的挑战,以及可以使用TDOA技术跟踪单个和多个对象的算法和技术。

简介

TDOA定位是一种通过利用多个空间分离的接收机信号到达时间的差异来定位和跟踪发射物体的被动技术。给定信号发射时间( t e )和传播速度( c ),即信号在两个位于不同范围的接收器上的到达时间 r 1 而且 r 2 分别从对象记为:

t 1 t e + r 1 c t 2 t e + r 2 c

由于真实信号发射的时间通常是未知的,两者之间存在差异 t 1 而且 t 2 可用于获取有关对象位置的一些信息。具体来说,给定每个接收器的位置,时间差测量对应于从两个接收器到未知物体的距离差。

x t - x 1 2 + y t - y 1 2 + z t - z 1 2 - x t - x 2 2 + y t - y 2 2 + z t - z 2 2 c t 1 - t 2

在哪里 x t y t z t 是未知物体的位置, t 1 - t 2 是TDOA测量值,和 x 1 y 1 z 1 , x 2 y 2 z 2 是两个接收器的位置。TDOA与目标位置之间的非线性关系表示二维双曲线或三维双曲线,在焦点处有两个接收器。下图显示了一个物体在不同TDOA测量下的双曲线( c =光速)。这些曲线通常被称为恒定TDOA曲线。请注意,使用TDOA测量的符号,您可以将对象位置约束为双曲线的单个分支。

HelperTDOATrackingExampleDisplay.plotConstantTDOACurves;

图中包含一个轴对象。axis对象包含15个line, text类型的对象。

辐射源脉冲计算

有两种主要方法用于从一个物体的信号计算TDOA测量。在第一种方法中,每个接收机测量定义的信号到达的绝对时间瞬间(到达时间或TOA) t 以上。然后计算两个接收器之间到达时间的差值,以获得TDOA测量值。该方法适用于信号属性先验已知且接收端能够检测到信号前沿的情况。

目标辐射源 12 TOA 2 - TOA 1

在第二种方法中,每个接收器记录并将接收到的信号传输到共享处理中心。在处理集线器上计算从两个接收器接收的信号之间的相互关联。TDOA被估计为使两个信号之间的相互相关性最大化的延迟。

目标辐射源 12 argmax t - T 马克斯 T 马克斯 年代 1 年代 2 t

在哪里 年代 1 年代 2 t 表示接收机信号之间的相互关系作为时间延迟的函数, t T 马克斯 最大可能的绝对延迟和可以计算为 D c ,在那里 D 是接收器之间的距离。

两种计算TDOA的方法都需要在接收端同步时钟。在实际应用中,通常使用全球定位系统(GPS)时钟来实现这一点。

目标辐射源定位

由于两个接收器之间的TDOA将物体定位为双曲线或双曲面,因此仅使用两个静止接收器是不可能观察到物体的完整状态的。对于2-D定位,需要至少3个空间分离的接收机来估计目标状态。类似地,对于三维跟踪,至少需要4个空间分离的接收器。

N N 2 接收器,共 N N - 1 2 从一个物体上测量的TDOA可以通过使用每种组合接收器计算到达的时间差来获得。然而,在这些测量中,只有 N - 1 测量是独立的,其余的TDOA测量可以表述为这些独立测量的线性组合。考虑到这些 N - 1 从物体测量时,通常使用估计算法来定位物体的位置。在本例中,使用球面相交算法[1]来查找位置估计中的位置和不确定性。球面交点算法假设所有 N - 1 tdoa是针对同一接收器计算的,有时称为参考接收机。

从定位得到的估计位置的准确性或不确定性取决于网络的几何形状。在TDOA测量的小误差导致估计位置误差大的区域,估计位置的精度较低。这种效应叫做几何精度稀释(GDOP)。下图显示了3个接收器的2-D场景下网络几何结构的GDOP热图。请注意,在由网络生成的包络范围内,精度较高,而沿着接收器到接收器的视线线,接收器后面的精度最低。

HelperTDOATrackingExampleDisplay.plotGDOPAccuracyMap;

图中包含一个轴对象。标题为“几何精度稀释”的轴对象包含图像、直线类型的2个对象。该对象表示接收器。

跟踪单个发射器

在本节中,您将模拟来自单个对象的TDOA测量,并在没有任何虚假警报和漏检的情况下使用它们来定位和跟踪对象。

您可以使用helper函数定义一个2-D场景,helperCreateSingleTargetTDOAScenario.此函数返回一个trackingScenarioRecording表示以恒定速度运动的单个物体的物体。这个物体由三个静止的、空间分离的接收器观测。helper函数还返回一个由两列组成的矩阵,表示由接收器组成的对。每一行表示PlatformID构成TDOA测量的平台。

%可重复结果rng (2021);%设置3个接收器的场景numReceivers = 3;[scenario, rxPairs] = helperCreateSingleTargetTDOAScenario(numReceivers);

然后使用helper函数,helperSimulateTDOA,来模拟物体的TDOA测量。辅助功能可以在TDOA中指定测量精度。您使用100纳秒的测量精度来表示时钟中的计时误差以及TDOA估计。报告时间的发射速度和单位分别为真空中的光速和纳秒,使用helperGetGlobalParameters函数。的helperSimulateTDOA函数将TDOA检测输出为的单元格数组objectDetection对象。

tdoaDets = helperSimulateTDOA(scenario, rxPairs, measNoise);指定测量噪声方差(纳秒^2)

的值表示每个TDOA检测objectDetection按照以下格式:

接下来,运行该场景并从对象生成TDOA检测。你使用辅助函数,helperTDOA2Pos,利用球面相交算法[1]估计目标每一步的位置和位置协方差。属性配置的全局最近邻(GNN)跟踪器进一步筛选对象的位置估计trackerGNN系统对象™与匀速线性卡尔曼滤波器。为了考虑到物体的高速,这个匀速卡尔曼滤波器是使用辅助函数配置的,helperInitHighSpeedKF

定义测量精度measNoise = (100)^2;%纳秒^ 2%显示对象display = HelperTDOATrackingExampleDisplay(XLimits=[-1e4 1e4],...YLimits = [1 e4 e4],...LogAccuracy = true,...Title =“单目标跟踪”);创建GNN跟踪器跟踪器= trackerGNN(FilterInitializationFcn=@helperInitHighSpeedKF,...AssignmentThreshold = 100);推进(场景)%运行时间时间= scenario.SimulationTime;模拟TDOA检测,没有误报和漏检tdoaDets = helperSimulateTDOA(scenario, rxPairs, measNoise);得到估计的位置和位置协方差作为对象检测%的对象posDet = helperTDOA2Pos(tdoaDets,true);用位置检测更新跟踪器。tracks =跟踪器(posDet,时间);%显示结果display(scenario, rxPairs, tdoaDets, {posDet}, tracks);结束

注意,跟踪器能够在对象上保持跟踪。物体的估计位置靠近由每个接收器对创建的双曲曲线的交点。还请注意,在下面的放大图中,与每一步的融合估计相比,对象的过滤估计具有更小的不确定性。随着物体向正X轴移动,由于几何精度的稀释,估计位置的误差增大。请注意,跟踪器能够提供一个改进的估计对象的位置估计使用卡尔曼滤波器与匀速运动模型。

zoomOnTrack(显示、跟踪(1).TrackID);

图中包含一个轴对象。标题为Single object Tracking的axes对象包含13个对象,类型为line、image、patch、text。这些对象代表发射器,接收器,静态融合位置,轨道,(历史)。

图中包含一个轴对象。标题为Single object Tracking的axes对象包含13个对象,类型为line、image、patch、text。这些对象代表发射器,接收器,静态融合位置,轨道,(历史)。

plotDetectionVsTrackAccuracy(显示);

图中包含一个轴对象。标题为“目标位置精度”的axis对象包含2个类型为line的对象。这些对象代表融合位置,轨道。

跟踪多个已知id的发射器

在前一节中,您学习了如何使用来自单个对象的TDOA测量来生成对象的位置测量。在实际情况中,场景可能包含多个对象。

多目标TDOA跟踪的主要挑战是每个目标的TDOA估计。在多个物体存在的情况下,每个接收器接收来自多个物体的信号。在TDOA计算的第一种方法中,每个接收机记录多个到达时间测量值。每个接收器报告的到达时间测量之间的未知数据关联导致许多可能的TDOA组合。在第二种TDOA计算方法中,接收机信号之间的信号互相关函数会产生多个真实目标对应的峰值,也会产生假报警。在某些应用中,接收器之间的这种未知数据关联可以很容易地在信号级上解决。例如,如果信号编码是先验已知的,例如在LTE等无线通信信号中,5G信号或ADSB信号等航空通信信号中,接收机通常能够计算出物体的到达时间和唯一身份。类似地,如果对象在其载波频率上被分离,则可以为每个对象在其各自的频段上添加单独的TDOA计算。

在本节中,您假设在接收端执行信号级数据关联。这有助于处理中心对每个已识别对象形成无歧义的TDOA测量。要模拟具有已知发射器标识的TDOA测量,可以向辅助函数提供第四个输入参数,helperSimulateTDOA.函数将发射器的唯一标识输出为objectClassID的属性objectDetection对象。您使用这个在多个接收器对的tdoa之间共享的对象标识,分别融合来自每个对象的检测,并获得它们各自的位置和不确定性。然后,您使用这些融合测量来跟踪这些对象使用GNN跟踪器。

创建多对象场景numReceivers = 3;numObjects = 4;[scenario, rxPairs] = helperCreateMultiTargetTDOAScenario(numReceivers, numObjects);%复位显示释放(显示);显示。LogAccuracy = false;显示。Title =“追踪多个已知id的发射器”%释放跟踪器释放(跟踪);推进(场景)%运行时间时间= scenario.SimulationTime;模拟分类TDOA检测classifiedTDOADets = helperSimulateTDOA(scenario, rxPairs, measNoise, true);查找唯一的对象标识tgtIDs = cellfun(@(x)x. objectclassid,classifiedTDOADets);uniqueIDs =唯一的(tgtIDs);估计每个发射器的位置和协方差为objectdetectposDets = cell(编号(uniqueIDs),1);i = 1:numel(uniqueIDs) thisEmitterTDOADets = classifiedTDOADets(tgtIDs == uniqueIDs(i));posDets{i} = helperTDOA2Pos(thisEmitterTDOADets, true);结束%更新跟踪器tracks =跟踪器(posDets,时间);%更新显示display(场景,rxPairs, classifiedTDOADets, posDets, tracks);结束

图中包含一个轴对象。名为“跟踪具有已知id的多个发射器”的axes对象包含19个类型为行、图像、补丁和文本的对象。这些对象代表发射器,接收器,静态融合位置,轨道,(历史)。

注意,当假定TDOA-to-TDOA关联已知时,跟踪器能够在所有4个对象上保持跟踪。当数据关联由接收器提供时,多目标TDOA估计被简化为生成多个已知单目标关联的TDOA检测。多目标跟踪问题同样简化,因为没有错误的TDOA检测。

跟踪多个未知id的发射器

在本节中,您假设接收器数据之间的数据关联是未知的,即接收器不能识别对象。在没有此数据关联的情况下,每个蓝色和栗色双曲曲线之间的交点显示在图中跟踪多个已知id的发射器Section可以是一个可能的对象位置。因此,当接收端无法提供数据关联时,来自多个接收端的关联到达时间(TOA)或TDOA检测很容易从对象。为了将幽灵检测与真实物体检测分开,必须添加更多的接收器来减少模糊性。在本节中,您将使用静态融合算法[2]来确定未知数据关联并估计来自每个对象的位置测量值。将此静态融合算法用于向处理集线器传输多个到达时间测量的系统,以及将记录信号传输到集线器并在处理它们以进行对象跟踪之前计算TDOA的系统。

使用到达时间(TOA)测量进行跟踪

在本节中,您将配置一个系统,其中每个接收器将多个到达时间(TOA)测量数据传输到中央处理集线器。为了减少数据关联中的模糊性并减少潜在鬼影对象的数量,您使用4个固定接收器来定位和跟踪对象。

为了模拟来自对象的到达时间测量,您可以使用helper函数,helperSimulateTOA,以模拟多个物体的到达时间测量。这些到达时间测量记录了接收机在全球参考时钟上接收信号的准确时间瞬间。为了模拟精确的时间瞬间,helper函数使用场景时间作为全局时钟时间,并假设对象在场景时刻发射信号。请注意,用于跟踪这些测量的算法与这一假设无关,因为接收器不知道物体的确切发射时间。

您可以指定nFalse输入为1以模拟来自每个接收器的一个虚假到达时间测量。还可以指定Pd输入定义了每个接收器检测到真实到达时间测量的概率为0.95。

toaDets = helperSimulateTOA(scenario, receiverIDs, measNoise, nFalse, Pd);% receiverIDs -所有接收器的平台id% measNoise - TOA测量的精度(ns^2)% nFalse -每个接收器的假警报数% Pd -接收机的检测概率

这是到达时间(TOA)检测的格式。

若要融合来自每个接收器的多个到达时间测量,您可以通过配置一个静态融合算法staticDetectionFuser对象。的staticDetectionFuser对象确定到达时间测量之间的最佳数据关联,并提供来自可能对象的融合检测。静态融合算法需要两个子例程或函数。第一个函数(MeasurementFusionFcn)允许算法估计来自物体的融合测量,给定一组假定来自同一物体的到达时间测量。第二个函数(MeasurementFcn)允许算法从融合测量中获得预期到达时间测量。请注意,为了定义测量函数以获得到达时间测量,融合测量必须包含来自物体的信号发射时间的估计值。因此,您将融合测量定义为 x t y t z t t e ,在那里 t e 是物体发出信号的时刻。

你使用辅助函数,helperTOA2Pos,以估计物体的融合测量位置和发射时间。你也可以使用helper函数,helperMeasureTOA,定义从融合测量计算到达时间测量的测量模型。融合算法输出融合检测作为单元数组objectDetection对象。单元格数组的每个元素都定义了一个objectDetection包含从潜在物体测量的位置和发射时间的物体。属性可以加速此静态融合算法UseParallel财产真正的.指定UseParallel作为真正的需要并行计算工具箱™。

%创建场景[scenario, ~, receiverIDs] = helperCreateMultiTargetTDOAScenario(4,4);指定TOA模拟的统计信息measNoise = 1e4;每个接收器% 100 nsnFalse = 1;每个接收器每步% 1误报Pd = 0.95;%真信号检测概率%释放显示释放(显示);显示。Title =“使用未知id的TOA测量进行跟踪”%释放跟踪器释放(跟踪);跟踪器。ConfirmationThreshold = [4 6];如果可用,请使用并行计算工具箱useParallel = false;定义fuser。toaFuser = staticDetectionFuser(MaxNumSensors=4,...MeasurementFormat =“自定义”,...MeasurementFcn = @helperMeasureTOA,...MeasurementFusionFcn = @helperTOA2Pos,...FalseAlarmRate e-8 = 1,...DetectionProbability = Pd,...UseParallel = UseParallel);推进(场景)%当前时间时间= scenario.SimulationTime;模拟带有假警报和漏检的TOA检测toaDets = helperSimulateTOA(scenario, receiverIDs, measNoise, Pd, nFalse);引信TOA检测,估计位置和发射时间%未知和未知数量的发射器。[posDets, info] = toaFuser(toaDets);在将检测馈送到跟踪器之前去除发射时间%在本例中没有跟踪。i = 1:数字(posDets) posDets{i}。测量= posDets{i}.测量(1:3);posDets{}。measuentnoise = posDets{i}. measuentnoise (1:3,1:3);结束%更新跟踪器。目标发射是在时间戳、时间上假设的。因此,检测的时间戳是时间加信号%传播时间。跟踪器时间戳必须大于%检测时间。这里使用时间+ 0.05。在现实世界中,这是%更新跟踪器的绝对时间戳。tracks =跟踪器(posDets,时间+ 0.05);%更新显示从指定的toa中形成TDOA测量以实现可视化tdoaDets = helperFormulateTDOAs(toaDets,info.Assignments);display(scenario, receiverIDs, tdoaDets, posDets, tracks);结束

图中包含一个轴对象。标题为“跟踪使用未知id的TOA测量”的axis对象包含19个类型的对象,包括线、图像、补丁和文本。这些对象代表发射器,接收器,静态融合位置,轨道,(历史)。

请注意,fuser算法在大多数情况下能够准确地估计物体的位置。但是,由于存在假警报和遗漏的测量,融合算法可能会在某些步骤中选择错误的数据关联。这可能会导致幽灵交叉路口的探测。跟踪器通过丢弃这些错误关联作为假警报来辅助静态融合算法。

时差到达(TDOA)测量跟踪

在本节中,您将为一个系统配置跟踪算法,其中tdoa由来自多个对象的接收器对组成,没有任何发射器标识。在多目标场景下,由接收机对计算TDOA时,由于互相关函数中存在假峰值,可能会产生一些假报警。为了模拟来自该系统的TDOA测量,您将每对接收机的假警报数量增加到2。

静态融合算法的配置类似于前一节staticDetectionFuser对象。与到达时间融合相比,这里使用的是测量融合函数,helperFuseTDOA,将多个tdoa融合成一个融合的测量。你也可以使用helper函数,helperMeasureTDOA,定义从融合测量到TDOA测量的转换。由于TDOA测量不包含或不需要关于真实信号发射时间的信息,因此将融合测量定义为 x t y t z t .你设置MaxNumSensors到3,四个接收器组成三个TDOA对。

%创建场景[scenario, rxPairs] = helperCreateMultiTargetTDOAScenario(4,4);%测量统计measNoise = 1e4;每个接收器% 100 nsnFalse = 2;每对接收器% 2误报Pd = 0.95;%每对接收器的探测概率%释放显示释放(显示);显示。Title =“使用未知id的TDOA测量进行跟踪”%释放跟踪器释放(跟踪);定义fuser。tdoaFuser = staticDetectionFuser(MaxNumSensors=3,...MeasurementFormat =“自定义”,...MeasurementFcn = @helperMeasureTDOA,...MeasurementFusionFcn = @helperTDOA2Pos,...DetectionProbability = Pd,...FalseAlarmRate e-8 = 1,...UseParallel = UseParallel);推进(场景)当前运行时间%时间= scenario.SimulationTime;%模拟TDOA检测与假警报和漏检tdoaDets = helperSimulateTDOA(scenario, rxPairs, measNoise, false, Pd, nFalse);融合TDOA检测,以估计未知的位置检测%和未知数量的发射器posDets = tdoaFuser(tdoaDets);使用位置检测更新跟踪器如果~isempty(posDets) tracks =跟踪器(posDets,时间);结束%更新显示display(scenario, receiverIDs, tdoaDets, posDets, tracks);结束

图中包含一个轴对象。标题为“跟踪使用未知id的TDOA测量”的axis对象包含21个类型的对象,包括线、图像、补丁和文本。这些对象代表发射器,接收器,静态融合位置,轨道,(历史)。

使用本例中定义的测量统计信息,跟踪器根据该网络几何形状维护所有对象的轨迹。对于数据关联未知的TOA和TDOA系统,问题的几何形状、测量精度以及虚警的数量都对静态融合算法的数据关联精度有重要影响。对于本例中使用的场景,静态融合算法能够在足够的时间内报告真实的检测,以保持对真实对象的跟踪。

总结

在本例中,您学习了如何使用TDOA测量跟踪单个对象以及多个对象。您了解了在没有接收器识别发射器的情况下进行多目标跟踪的挑战,并使用静态融合算法在测量级别上计算数据关联。

参考文献

[1]史密斯,朱利叶斯和乔纳森·亚伯。“距离差测量的封闭形式最小二乘源位置估计。”IEEE声学、语音与信号处理汇刊35.12(1987): 1661-1669。

[2] Sathyan, T., A. Sinha, T. Kirubarajan。"被动定位和追踪未知数量的发射器"IEEE航空航天与电子系统汇刊42.2(2006): 740-750。

支持功能

本节定义本示例中使用的几个支持函数。helper函数的完整列表可以在当前工作目录中找到。

helperTDOA2Pos

函数varargout = helptdoa2pos (tdoaDets, reportDetection)此函数使用球面相交算法来查找%的目标位置从TDOA检测假设是相同的%的对象。这个函数假设所有的tdoa都是相对于相同的参考传感器。% [pos, posCov] = helperTDOA2Pos(tdoaDets)返回估计的位置%和位置不确定性协方差。% posDetection = helperTDOA2Pos(tdoaDets, true)返回估值%位置和不确定性协方差作为检测对象。如果nargin < 2 reportDetection = false;结束收集缩放信息params = helperGetGlobalParameters;emissionSpeed = params.EmissionSpeed;timeScale = params.TimeScale;参考接收器的位置referenceLoc = tdoaDets{1}.MeasurementParameters(2).OriginPosition(:);理清问题。详情见[1]d = 0(数字(tdoaDets),1);delta = 0(数字(tdoaDets),1);S = 0(数字(tdoaDets),3);i = 1: number (tdoaDets) receiverLoc = tdoaDets{i}.MeasurementParameters(1).OriginPosition(:);d(i) = tdoaDets{i}.测量*发射速度/时间尺度;delta(i) = norm(receiverLoc - referenceLoc)^2 - d(i)^2;S(i,:) = receiverLoc - referenceLoc;结束S的伪逆Swstar = pinv(S);组装二次范围方程STS = (Swstar'*Swstar);a = 4 - 4*d'*STS*d;b = 4*d'*STS*delta;c = -delta'*STS*delta;Rs = 0 (2,1);%假想解,返回覆盖范围外的位置如果B ^2 < 4*a*c varargout{1} = 1e10*ones(3,1);Varargout {2} = 1e10*eye(3);返回结束%两个范围值Rs(1) = (-b +√(b^2 - 4*a*c))/(2*a);Rs(2) = (-b -√(b^2 - 4*a*c))/(2*a);如果有一个是阴性的,使用阳性的溶液。如果prod(Rs) < 0 Rs = Rs(Rs > 0);pos = 1/2*Swstar*(delta - 2*Rs(1)*d) + referenceLoc;其他的使用误差最小的范围xs1 = 1/2*Swstar*(delta - 2*Rs(1)*d);xs2 = 1/2*Swstar*(delta - 2*Rs(2)*d);e1 =范数(delta - 2*Rs(1)*d - 2*S*xs1);e2 =范数(delta - 2*Rs(2)*d - 2*S*xs2);如果e2 pos = xs2 + referenceLoc;其他的pos = xs1 + referenceLoc;结束结束如果需要,计算位置的不确定度如果nargout > 1 || reportDetection posCov = helperCalcPositionCovariance(pos,tdoaDets,timeScale,emissionSpeed);结束如果reportDetection varargout{1} = objectDetection(tdoaDets{1}. objectDetection)。时间、pos、“MeasurementNoise”, posCov);其他的Varargout {1} = pos;如果1 varargout{2} = posCov;结束结束结束函数measCov = helpercalcpositionco方差(pos,thisDetections,timeScale,emissionSpeed) n = numel(thisDetections);%完成从位置到N个tdoa的雅可比矩阵H = 0 (n,3);所有tdoa的协方差%S = 0 (n,n);i = 1:n e1 = pos - thisDetections{i}.MeasurementParameters(1).OriginPosition(:);e2 = pos - thisDetections{i}.MeasurementParameters(2).OriginPosition(:);Htdoar1 = (e1'/norm(e1))*timeScale/emissionSpeed;Htdoar2 = (e2'/norm(e2))*timeScale/emissionSpeed;H(i,:) = Htdoar1 - Htdoar2;S(i,i) = thisDetections{i}.MeasurementNoise;结束Pinv = H'/S*H;% Z未被测量,用1作为协方差如果Pinv(3,3) < eps Pinv(3,3) = 1;结束TDOA中信息不足如果rank(Pinv) >= 3 measCov = eye(3)/Pinv;其他的measCov = inf(3);结束将inf替换为大数字(~isfinite(measCov)) = 100;为协方差返回一个真正对称的正定矩阵。measCov = (measCov + measCov')/2;结束

helperInitHighSpeedKF

函数filter = helperInitHighSpeedKF(检测)这个函数初始化一个恒速度卡尔曼滤波器,并设置一个%更高的初始状态协方差对速度分量的解释%目标车辆的高速。Filter = initcvkf(检测);filter.StateCovariance(2:2:end,2:2:end) = 500*eye(3);结束

helperTOA2Pos

函数[posTime, posTimeCov] = helperTOA2Pos(toadetection)这个函数计算给定目标的位置和发射时间%来自多个接收器的到达时间检测。将toa转换为tdoa以使用球面相交[tdoaDetections, isValid] = helperTOA2TDOADetections(toaDetections);至少需要3个toa(2个tdoa)。一些TOA配对可能导致%无效TDOA(>最大TDOA)。在这些情况下,丢弃元组by%,使用具有较大协方差的任意位置。如果number (tdoaDetections) < 2 || any(~isValid) posTime = 1e10*ones(4,1);posTimeCov = 1e10*eye(4);其他的使用TDOA融合得到位置估计。使用计算位置得到时间估计。如果Nargout > 1仅在被要求时计算协方差以节省时间[pos, posCov] = helperTDOA2Pos(tdoaDetections);[time, timeCov] = helperCalcEmissionTime(toaDetections, pos, posCov);posTime = [pos;time];posTimeCov = blkdiag(posCov,timeCov);其他的pos = helperTDOA2Pos(tdoaDetections);time = helperCalcEmissionTime(toaDetections, pos);posTime = [pos;time];结束结束结束

helperCalcEmissionTime

函数[time, timeCov] = helperCalcEmissionTime(toaDetections, pos, posCov)这个函数计算给定物体的发射时间%位置,获得TOA检测。它还计算了不确定度%估计时间。globalParams = helperGetGlobalParameters;emissionSpeed = globalParams.EmissionSpeed;timeScale = globalParams.TimeScale;n = numel(toaDetections);排放量= 0 (n,1);排放物时间=零(n,1);i = 1:数字(toaDetections)计算从此接收器开始的范围p0 = toaDetections{i}.MeasurementParameters.OriginPosition(:);R =范数(pos - p0);emissionTime(i) = toaDetections{i}。测量- r/排放速度*timeScale;如果nargout > 1 rac = (pos - p0)'/r;rCov = rmac *posCov* rmac ';emissionTimeCov(i) = rCov./emissionSpeed^2*timeScale^2;结束结束每次高斯归并并协方差估计time = mean(emissionTime);如果nargout > 1 e = emissionTime -时间;timeCov = mean(emissionTimeCov) + mean(e.^2);结束结束

helperMeasureTOA

函数toa = helpmeasuretoa (posTime, params)这个函数计算给定对象的接收者的期望TOA%位置和发射时间以及接收机的测量参数% (OriginPosition)globalParams = helperGetGlobalParameters;emissionSpeed = globalParams.EmissionSpeed;timeScale = globalParams.TimeScale;r = norm(posTime(1:3) - params.OriginPosition);toa = posTime(4) + r/emissionSpeed*timeScale;结束

helperMeasureTDOA

函数toa = helpmeasuretdoa (pos, params)这个函数计算给定对象的预期TDOA测量值TDOA探测器的位置和测量参数globalParams = helperGetGlobalParameters;emissionSpeed = globalParams.EmissionSpeed;timeScale = globalParams.TimeScale;r1 = norm(pos(1:3) - params(1).OriginPosition);r2 = norm(pos(1:3) - params(2).OriginPosition);toa = (r1 - r2)/emissionSpeed*timeScale;结束

The MathWorks, Inc.版权所有

Baidu
map