主要内容gydF4y2Ba

多平台雷达检测融合gydF4y2Ba

这个例子展示了如何融合来自多平台雷达网络的雷达探测。该网络包括两个机载和一个陆基远程雷达平台。看到gydF4y2Ba多平台雷达探测生成gydF4y2Ba例子的细节。中央跟踪器以固定的更新间隔处理来自所有平台的检测。这使您能够评估网络的性能针对目标类型,平台机动,以及平台配置和位置。gydF4y2Ba

加载跟踪场景的记录gydF4y2Ba

的gydF4y2BaMultiplatformRadarDetectionGenerationgydF4y2BaMat文件包含先前使用以下命令生成的跟踪方案录制gydF4y2Ba

录制=记录(场景,gydF4y2Ba“IncludeSensors”gydF4y2Ba,真的,gydF4y2Ba“InitialSeed”gydF4y2Ba,2018年,gydF4y2Ba“RecordingFormat”gydF4y2Ba,gydF4y2Ba“记录”gydF4y2Ba)gydF4y2Ba

在哪里gydF4y2Ba场景gydF4y2Ba是在多平台雷达探测生成示例中创建的跟踪场景。gydF4y2Ba

负载(gydF4y2Ba“MultiplatformScenarioRecording.mat”gydF4y2Ba);gydF4y2Ba

定义中央追踪gydF4y2Ba

使用gydF4y2BatrackerGNNgydF4y2Ba作为一个中央跟踪器,处理从场景中所有雷达平台接收到的检测。gydF4y2Ba

跟踪器使用gydF4y2BainitFiltergydF4y2Ba金宝app为每条新轨道初始化一个恒定速度扩展卡尔曼滤波器。gydF4y2BainitFiltergydF4y2Ba修改返回的过滤器gydF4y2Bainitcvekf.gydF4y2Ba以匹配高目标速度。滤波器的过程噪声设置为1gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ggydF4y2Ba =gydF4y2Ba 9gydF4y2Ba .gydF4y2Ba 8gydF4y2Ba mgydF4y2Ba /gydF4y2Ba S.gydF4y2Ba 2gydF4y2Ba ),以启用场景中机动目标的跟踪。gydF4y2Ba

跟踪器的gydF4y2Ba分配察觉gydF4y2Ba设置为50,以使具有大范围偏差的探测(由于长探测范围的大气折射效应)与跟踪器中的跟踪相关联。的gydF4y2BaDeletionThresholdgydF4y2Ba设置为3,可以快速删除冗余音轨。gydF4y2Ba

启用gydF4y2BaHasDetectableTrackIDsInputgydF4y2Ba指定自上次更新以来至少一个雷达视野范围内的航迹。轨道逻辑仅对自上次跟踪器更新以来有检测机会的轨道进行评估。gydF4y2Ba

跟踪器= trackergnn(gydF4y2Ba“FilterInitializationFcn”gydF4y2Ba@initFilter,gydF4y2Ba......gydF4y2Ba'AssignmentThreshold'gydF4y2Ba,50,gydF4y2Ba“DeletionThreshold”gydF4y2Ba,3,gydF4y2Ba......gydF4y2Ba“HasDetectableTrackIDsInput”gydF4y2Ba,真正的);gydF4y2Ba

在中央跟踪器中融合检测跟踪目标gydF4y2Ba

以下循环运行跟踪方案录制,直到方案结束。对于方案中的每个步骤,收集检测以由中央跟踪器进行处理。通过每2秒更新跟踪器每2秒更新这些检测。gydF4y2Ba

trackUpdateRate = 0.5;gydF4y2Ba%每2秒更新跟踪器gydF4y2Ba%创建一个显示来显示真实的、测量的和跟踪的位置gydF4y2Ba%发现目标和平台。gydF4y2BatheaterDisplay = helperMultiPlatFusionDisplay(录音,gydF4y2Ba“PlotAssignmentMetrics”gydF4y2Ba,真正的);gydF4y2Ba%构造一个对象来分析赋值和错误度量gydF4y2BaTam = trackassignmentmetrics(gydF4y2Ba“DistanceFunctionFormat”gydF4y2Ba,gydF4y2Ba“自定义”gydF4y2Ba,gydF4y2Ba......gydF4y2Ba“AssignmentDistanceFcn”gydF4y2Ba@truthAssignmentDistance,gydF4y2Ba......gydF4y2Ba“DivergenceDistanceFcn”gydF4y2Ba, @truthAssignmentDistance);gydF4y2Ba%初始化缓冲gydF4y2BadetBuffer = {};sensorConfigBuffer = [];allTracks = [];detectableTrackIDs = uint32 ([]);assignmentTable = [];gydF4y2Ba初始化下一个跟踪器更新时间gydF4y2BanextTrackUpdateTime = 2;gydF4y2Ba而gydF4y2Ba~结束(记录)gydF4y2Ba%读取记录的下一条记录。gydF4y2Ba[time, truePoses, covcon, dets, senscon, sensPlatIDs] =读取(记录);gydF4y2Ba缓冲所有的检测和传感器配置,直到下一次跟踪器更新gydF4y2BadetBuffer = [detBuffer;]依据);gydF4y2Ba% #好< AGROW >gydF4y2BaSensorConfigBuffer = [SensorConfigBuffer;Senscon'];gydF4y2Ba% #好< AGROW >gydF4y2Ba%跟踪trackUpdateRate以更新跟踪器gydF4y2Ba如果gydF4y2Ba时间> = nextTrackupdatetime ||Isdone(录音)gydF4y2Ba如果gydF4y2Baisempty(detBuffer) lastDetectionTime =时间;gydF4y2Ba其他的gydF4y2BalastDetectionTime = detBuffer{}结束.Time;gydF4y2Ba结尾gydF4y2Ba如果gydF4y2BaisLocked(跟踪)gydF4y2Ba%收集至少一个雷达范围内的履带列表gydF4y2Ba自上次跟踪器更新以来的视图百分比gydF4y2Bapredictedtracks = predicttrackstotime(跟踪器,gydF4y2Ba“所有”gydF4y2Ba,lastdetectiontime);detectaberetrackids =探测器(AllTracks,PredigeTracks,SensorConfigBuffer);gydF4y2Ba结尾gydF4y2Ba%更新追踪。只运行轨道逻辑在轨道之内的atgydF4y2Ba自上次跟踪器更新以来%最少的雷达视野gydF4y2Ba[confirmedTracks, ~, allTracks] = tracker(detBuffer, lastDetectionTime, detectableTrackIDs);gydF4y2Ba%分析和检索当前跟踪到真相的分配指标gydF4y2BaTAM(确认有限,TRUEPASE);gydF4y2Ba%存储表中的分配指标gydF4y2BacurrentAssignmentTable = trackMetricsTable (tam);rowTimes =秒(时间*(大小(currentAssignmentTable, 1), 1));assignmentTable =猫(1 assignmentTable table2timetable (currentAssignmentTable,gydF4y2Ba“RowTimes”gydF4y2Ba,rowtimes));gydF4y2Ba%用检测、覆盖和轨道更新显示gydF4y2BaTheaterDisplay(DetBuffer,Covcon,ChalegedTracks,分配,Truepose,Sensplatids);gydF4y2Ba%空缓冲区gydF4y2BadetBuffer = {};sensorConfigBuffer = [];gydF4y2Ba更新下一个曲目更新时间gydF4y2BanextTrackupdatetime = nextTrackupdatetime + 1 / trackupdaterate;gydF4y2Ba结尾gydF4y2Ba结尾gydF4y2Ba

图中包含2个轴对象。axis对象1包含20个类型为patch, line, text的对象。这些对象代表地面,平台1,检测1,平台2,检测2,平台3,检测3,目标,轨迹,(历史)。标题为“平台跟踪分配”的axis对象2包含19个类型为line, text的对象。gydF4y2Ba

在场景的最后,您会看到多个音轨被丢弃和替换。您还可以看到场景期间轨道与平台的关联。在该场景中,该情节有7行用于7个平台。每条轨迹都显示为一条水平线。航迹编号在行头标注。每当一个轨道被删除,它的线路就会停止。当一个新的轨道被分配给一个平台时,一个新的线路被添加到平台的行中,当一个平台同时显示多条线路时,该平台就有多个轨道被分配给它。在这些情况下,与平台相关联的较新的轨道被认为是gydF4y2Ba多余的gydF4y2Ba.gydF4y2Ba

endTime = assignmentTable.Time(结束);assignmentTable (endTime, {gydF4y2Ba'trackid'gydF4y2Ba,gydF4y2Ba'ensignedtreid'gydF4y2Ba,gydF4y2Ba“TotalLength”gydF4y2Ba,gydF4y2Ba“DivergenceCount”gydF4y2Ba,gydF4y2Ba“RedundancyCount”gydF4y2Ba,gydF4y2Ba'redundancyLength'gydF4y2Ba})gydF4y2Ba
ans =gydF4y2Ba9×6时间表gydF4y2Ba时间的TrackID AssignedTruthID TotalLength DivergenceCount RedundancyCount RedundancyLength ______ _______ _______________ ___________ _______________ _______________ ________________ 60秒1 2 27 0 0 0 60秒7 4 27 0 0 0 60秒8 10 26 0 0 0 60秒9 1 22 0 0 0 60秒11的NaN10 0 0 0 60秒12 6 20 0 0 0 60秒32aN 7 0 1 7 60秒41 3 10 0 0 0gydF4y2Ba

请注意,难以维持轨道的平台(平台4和7)也是离雷达最远的平台。这种差的跟踪性能归因于测量噪声的高斯分布假设。该假设对近距离目标有效,但在远距离,测量不确定度偏离高斯分布。下图比较了对应于实际目标分布和雷达传感器给出的目标分布的1-sigma协方差椭圆。传感器距离目标5公里,角度分辨率为5度。实际测量不确定度呈凹形,这是雷达估计目标位置时采用的球面传感器检测坐标系造成的。gydF4y2Ba

maxCondNum = 300;图;helperPlotLongRangeCorrection (maxCondNum)gydF4y2Ba

图中包含一个轴对象。标题为Long Range Covariance的轴对象包含3个类型为line的对象。这些对象代表报告协方差,实际协方差,校正协方差。gydF4y2Ba

为了解释长期实际协方差的凹形gydF4y2BalongRangeCorrectiongydF4y2Ba金宝app支持函数约束了所报告的测量噪声的条件数。上面所示的校正测量协方差被限制在300的最大条件数。换句话说,测量协方差中的特征值不能比协方差的最大特征值小300倍以上。这种处理扩大了测量噪声沿量程尺寸,以更好地匹配实际测量不确定度的凹度。gydF4y2Ba

用长程协方差校正进行模拟gydF4y2Ba

重新运行之前的模拟使用gydF4y2BalongRangeCorrectiongydF4y2Ba金宝app支持功能,以纠正报告的测量噪声在长距离。gydF4y2Ba

[confirmedTracks, correctedAssignmentTable ctheaterDisplay] =gydF4y2Ba......gydF4y2BarunMultiPlatFusionSim(录音、追踪、@longRangeCorrection);gydF4y2Ba

图中包含2个轴对象。axis对象1包含20个类型为patch, line, text的对象。这些对象代表地面,平台1,检测1,平台2,检测2,平台3,检测3,目标,轨迹,(历史)。带有标题平台的轴对象2跟踪分配包含15个类型的类型线,文本。gydF4y2Ba

endTime = correctedAssignmentTable.Time(结束);correctedAssignmentTable (endTime, {gydF4y2Ba'trackid'gydF4y2Ba,gydF4y2Ba'ensignedtreid'gydF4y2Ba,gydF4y2Ba“TotalLength”gydF4y2Ba,gydF4y2Ba“DivergenceCount”gydF4y2Ba,gydF4y2Ba“RedundancyCount”gydF4y2Ba,gydF4y2Ba'redundancyLength'gydF4y2Ba})gydF4y2Ba
ans =gydF4y2Ba7×6时间表gydF4y2Ba时间TrackID AssignedTruthID TotalLength DivergenceCount RedundancyCount RedundancyLength  ______ _______ _______________ ___________ _______________ _______________ ________________ 60秒1 2 0 0 0 60秒27日7 4 0 0 0 27日60秒8 5 26 0 0 0 60秒9 1 0 0 0 60秒22日11 7 25 60秒12 6 20 0 0 0 0 0 0 60秒38 3 10 0 0 0gydF4y2Ba

前图表明,通过应用远程校正,没有为整个场景生成轨迹丢失或多个轨道。在这种情况下,监控网络检测到的每个平台都有一条轨道。gydF4y2Ba

allDetections = vertcat (recording.RecordedData.Detections);ctheaterDisplay(allDetections,covcon,confirmedTracks,correctedAssignmentTable,true, sensPlatIDs)轴(ctheaterDisplay. theaterplot . parent) legend(gydF4y2Ba“关闭”gydF4y2Ba) xlim(5000年[-1000]);ylim(-36000年[-41000]);-5000年zlim ([0]);视图(90[-90])轴gydF4y2Ba广场gydF4y2Ba标题(gydF4y2Ba“喷气机执行水平转向”gydF4y2Ba)gydF4y2Ba

图中包含2个轴对象。标题为“平台跟踪分配”的轴对象1包含15个类型为line, text的对象。轴对象2带标题喷射执行水平转弯包含20个类型的曲线,线,文本。这些对象代表地面,平台1,检测1,平台2,检测2,平台3,检测3,目标,轨迹,(历史)。gydF4y2Ba

在喷射机执行水平转弯的视图中,即使在这个例子中使用的运动模型是恒定速度,轨迹也会相对良好地跟随机动目标。利用交互多模型(IMM)滤波器可以进一步改进机动的跟踪gydF4y2BaTrackingimm.gydF4y2Ba过滤器。gydF4y2Ba

查看([ -  60 25])gydF4y2Ba

图中包含2个轴对象。标题为“平台跟踪分配”的轴对象1包含15个类型为line, text的对象。轴对象2带标题喷射执行水平转弯包含20个类型的曲线,线,文本。这些对象代表地面,平台1,检测1,平台2,检测2,平台3,检测3,目标,轨迹,(历史)。gydF4y2Ba

从喷气式飞机正在执行水平转弯的另一个视图,尽管传感器的高度测量值不准确地测量,您可以看到完全估计高度。其中一个传感器根本没有报告高度,如大垂直椭圆体所见,而另外两个传感器低估了高度的不确定性。gydF4y2Ba

XLIM([ -  25000 -9000]);ylim([ -  31000 -19000]);ZLIM([ -  9000 -2000]);查看([ -  45 10])标题(gydF4y2Ba'穿越客机'gydF4y2Ba)gydF4y2Ba

图中包含2个轴对象。标题为“平台跟踪分配”的轴对象1包含15个类型为line, text的对象。标题为Crossing Airliners的坐标轴对象2包含20个类型为patch、line、text的对象。这些对象代表地面,平台1,检测1,平台2,检测2,平台3,检测3,目标,轨迹,(历史)。gydF4y2Ba

切换视角,将焦点放在飞越的客机上,同样的不准确的高度测量也会被描述出来。请注意红色探测是如何集中在8公里的高度,而两架客机分别在3公里和4公里的高度飞行。在高度上使用非常大的协方差允许跟踪器忽略红色探测的错误高度读数,并使用其他两个雷达跟踪高度。观察轨道T07和T08的不确定性协方差,可以看到它们分别提供了平台P04和P05的一致估计。gydF4y2Ba

XLIM([ -  10000 10000]);ylim([ -  0 10000]);zlim([ -  12000 -5000]);查看([ -  15 10])标题(gydF4y2Ba'机载雷达平台'gydF4y2Ba)gydF4y2Ba

图中包含2个轴对象。标题为“平台跟踪分配”的轴对象1包含15个类型为line, text的对象。标题为“机载雷达平台”的坐标轴对象2包含20个类型为patch, line, text的对象。这些对象代表地面,平台1,检测1,平台2,检测2,平台3,检测3,目标,轨迹,(历史)。gydF4y2Ba

最后一个情节集中在两个机载雷达平台上。每个平台都被其他平台以及地面雷达探测到。平台轨迹相互交叉,高度相差1000米,轨迹与地面真实情况一致。gydF4y2Ba

总结gydF4y2Ba

这个例子展示了如何在一个中央跟踪器中处理在多个机载和地面雷达平台上收集的检测。在本例中,您了解了如何用高斯分布精确地建模远距离测量噪声。测量噪声的1-西格玛椭圆在这些长距离上的凹性导致跟踪性能很差,在一个平台上有多个跟踪。您还学习了如何纠正远距离探测的测量噪声,以提高所报告轨道的连续性。gydF4y2Ba

金宝app支持功能gydF4y2Ba

initFiltergydF4y2Ba此功能修改功能gydF4y2Bainitcvekf.gydF4y2Ba处理方案中的速度目标等更高的速度目标。gydF4y2Ba

函数gydF4y2Bafilter = initcvekf(检测);classToUse =类(filter.StateCovariance);gydF4y2Ba客机可以以900公里/小时左右的速度移动。初始化速度gydF4y2Ba%到0,但将需要能够快速适应飞机的移动在gydF4y2Ba%的速度。使用900公里/小时作为速度的一个标准偏差gydF4y2Ba% 噪音。gydF4y2Ba社民党= 900 * 1 e3/3600;gydF4y2Ba% 多发性硬化症gydF4y2BavelCov =投(社民党^ 2,classToUse);x = filter.StateCovariance;浸(2,2)= velCov;浸(4,4)= velCov;过滤器。StateCovariance =浸;gydF4y2Ba%设置过滤器的过程噪声,以允许一些水平操作gydF4y2Bascaleaccel =演员(10,Classtouse);q = blkdiag(scaleaccel ^ 2,scaleaccel ^ 2,1);filter.processnoise = q;gydF4y2Ba结尾gydF4y2Ba

探测器探测器gydF4y2Ba这个函数返回属于至少一个传感器视野范围内的轨迹的id。传感器的视场和相对于轨道坐标系的方向存储在传感器配置结构的阵列中。配置结构由雷达传感器返回,可用于将轨道位置和速度转换为传感器的坐标系。gydF4y2Ba

函数gydF4y2BatrackIDs = detectableTracks(跟踪、predictedtracks配置)gydF4y2Ba识别哪个轨迹在传感器的视野范围内gydF4y2Banumtrks =大小(曲目,1);[numsteps,numsensors] =大小(configs);allpostrack = zeros(3,numsteps);isdetectable = false(numtrks,1);gydF4y2Ba为了gydF4y2BaiTrk = 1: numTrksgydF4y2Ba在当前位置和预测之间插入跟踪位置gydF4y2Ba%位置为每个模拟步骤gydF4y2BaposTrack =跟踪(iTrk) .State(1:2:结束);posPreditedTrack = predictedtracks (iTrk) .State(1:2:结束);gydF4y2Ba为了gydF4y2BaIpos = 1:3 Allpostrack(Ipos,:) = Linspace(Postrack(Ipos),PosPreditedTrack(Ipos),NumSteps);gydF4y2Ba结尾gydF4y2Ba为了gydF4y2Baissensor = 1:numSensors thisConfig = configs(:, issensor);gydF4y2Ba为了gydF4y2Bak = 1: numstepsgydF4y2Ba如果gydF4y2BathisConfig (k)。IsValidTime pos = trackToSensor(allposTrack(:,k),thisConfig(k));gydF4y2Ba检查预测的轨道位置是否在传感器栏中gydF4y2Ba% 看法gydF4y2Ba(阿兹,el) = cart2sph (pos pos (1), (2), pos (3));阿兹=阿兹* 180 /π;el = el * 180 /π;inFov = abs(az)如果gydF4y2BainFov isdetected (iTrk) = inFov;k = numsteps;gydF4y2Ba% #好< FXSET >gydF4y2BaiSensor = numSensors;gydF4y2Ba% #好< FXSET >gydF4y2Ba结尾gydF4y2Ba结尾gydF4y2Ba结尾gydF4y2Ba结尾gydF4y2Ba结尾gydF4y2BatrackIds = [tracks.trackid]';TrackIDS = TrackIds(Isdetectable);gydF4y2Ba结尾gydF4y2Ba

trackToSensorgydF4y2Ba这个函数返回轨道在传感器坐标系中的位置。轨道结构由gydF4y2BatrackerGNNgydF4y2Ba对象和定义传感器相对于轨道坐标系的方向的配置结构由雷达对象返回。gydF4y2Ba

函数gydF4y2Bapos = tracktosensor(pos,config)框架= config.measurementParameters;gydF4y2Ba为了gydF4y2Bam = numel(frames):-1:1 rotmat = frames(m).Orientation;gydF4y2Ba如果gydF4y2Ba〜框架(m)。samperenttochild rotmat = rotmat';gydF4y2Ba结尾gydF4y2Ba偏移量= (m) .OriginPosition框架;pos = bsxfun (@minus、pos、抵消);pos = rotmat * pos;gydF4y2Ba结尾gydF4y2Ba结尾gydF4y2Ba

longRangeCorrectiongydF4y2Ba该功能限制了雷达报告的测量噪声精度,不超过最大条件号。条件号被定义为测量噪声的特征值与最大特征值的比率。gydF4y2Ba

当雷达远距离探测目标时,测量不确定度的表面曲率不再很好地近似于椭球面,而是采用凹面椭球面。测量噪声必须沿量程尺寸增加,以适应凹面,形成包含凹面椭球的平面椭圆。在文献中有几种技术可以解决这个问题。在这里,通过增加最小特征值来满足最大条件数约束来限制测量噪声的最大条件数。这有沿范围尺寸增加不确定度的效果,产生一个更好地包含凹不确定度的椭圆。gydF4y2Ba

函数gydF4y2BaDETS = LONGRANGECRECTION(DECS,MAXCOND)gydF4y2Ba为了gydF4y2Bam = 1:numel(dets) R = dets{m}.MeasurementNoise;[Q, D] = eig (R);Q =实际(Q);d =实际(诊断接头(d));距离= max (d);condNums = dMax. / d;iFix。= condNums > maxCond;d (iFix。)=距离/ maxCond;R = Q *诊断接头(d) * Q ';依据{m}。MeasurementNoise = R;结尾gydF4y2Ba结尾gydF4y2Ba