主要内容gydF4y2Ba

多平台雷达探测融合gydF4y2Ba

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

加载跟踪场景的记录gydF4y2Ba

的gydF4y2BaMultiplatformRadarDetectionGenerationgydF4y2BaMAT-file包含先前使用以下命令生成的跟踪场景记录gydF4y2Ba

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

在哪里gydF4y2Ba场景gydF4y2Ba跟踪场景是在gydF4y2Ba多平台雷达探测一代gydF4y2Ba的例子。gydF4y2Ba

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

定义中央跟踪器gydF4y2Ba

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

跟踪器使用gydF4y2BainitFiltergydF4y2Ba金宝app为每个新轨道初始化一个恒速度扩展卡尔曼滤波器的支持函数。gydF4y2BainitFiltergydF4y2Ba返回的筛选器gydF4y2BainitcvekfgydF4y2Ba以匹配高目标速度。过滤器的过程噪声设置为1gydF4y2Ba ggydF4y2Ba (gydF4y2Ba ggydF4y2Ba =gydF4y2Ba 9gydF4y2Ba .gydF4y2Ba 8gydF4y2Ba 米gydF4y2Ba /gydF4y2Ba 年代gydF4y2Ba 2gydF4y2Ba ),以便在该情况下追踪机动目标。gydF4y2Ba

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

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

跟踪器= trackerGNN(gydF4y2Ba“FilterInitializationFcn”gydF4y2Ba@initFilter,gydF4y2Ba...gydF4y2Ba“AssignmentThreshold”gydF4y2Ba, 50岁,gydF4y2Ba“DeletionThreshold”gydF4y2Ba3,gydF4y2Ba...gydF4y2Ba“HasDetectableTrackIDsInput”gydF4y2Ba,真正的);gydF4y2Ba

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

下面的循环运行跟踪场景记录,直到场景结束。对于场景中的每一步,中央跟踪器都会收集检测以供处理。跟踪器每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, truepose, covcon, dets, senscon, sensPlatIDs] = read(正在录音);gydF4y2Ba缓冲所有检测和传感器配置,直到下一次跟踪器更新。gydF4y2BadetBuffer = [detBuffer;依据);gydF4y2Ba% #好< AGROW >gydF4y2BasensorConfigBuffer = [sensorConfigBuffer];senscon ');gydF4y2Ba% #好< AGROW >gydF4y2Ba跟踪trackUpdateRate来更新跟踪器gydF4y2Ba如果gydF4y2Ba|| isDone(正在录制)gydF4y2Ba如果gydF4y2Baisempty(detBuffer) lastDetectionTime =时间;gydF4y2Ba其他的gydF4y2BalastDetectionTime = detBuffer{end}.Time;gydF4y2Ba结束gydF4y2Ba如果gydF4y2BaisLocked(跟踪)gydF4y2Ba收集至少在一个雷达范围内的航迹列表。gydF4y2Ba自上次跟踪器更新以来视图的%gydF4y2Bapredictedtracks = predictTracksToTime(跟踪器,gydF4y2Ba“所有”gydF4y2Ba, lastDetectionTime);detectableTrackIDs = detectableTracks(allTracks, predictedtracks, sensorConfigBuffer);gydF4y2Ba结束gydF4y2Ba%更新跟踪器。只运行轨道逻辑的轨道落在gydF4y2Ba自上次跟踪器更新以来,至少有一个雷达的视野gydF4y2Ba[confirmedTracks, ~, allTracks] = tracker(detBuffer, lastDetectionTime, detectableTrackIDs);gydF4y2Ba分析和检索当前的跟踪到真相分配指标。gydF4y2Batam (confirmedTracks truePoses);gydF4y2Ba在表中存储分配指标gydF4y2BacurrentAssignmentTable = trackMetricsTable(tam);rowTimes = seconds(time*ones(size(currentAssignmentTable,1),1));assignmentTable = cat(1,assignmentTable,table2时间表(currentAssignmentTable,gydF4y2Ba“RowTimes”gydF4y2BarowTimes));gydF4y2Ba更新显示检测,覆盖范围和轨道gydF4y2BatheaterDisplay(detBuffer, covcon, confirmedTracks, assignmentTable, truepositions, sensPlatIDs);gydF4y2Ba%空缓冲区gydF4y2BadetBuffer = {};sensorConfigBuffer = [];gydF4y2Ba%更新下一个音轨更新时间gydF4y2BanextTrackUpdateTime = nextTrackUpdateTime + 1/trackUpdateRate;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

{

在该场景的最后,您将看到多个轨道被删除并替换。您还可以看到在场景期间轨道与平台的关联。该场景中的7个平台有7行。每个轨道显示为一条水平线。曲目号在行首标注。当一个轨道被删除时,它的行就会停止。每当一个新的轨道被分配给一个平台时,一个新的行被添加到平台的行中,当多个行同时显示给一个平台时,平台有多个轨道被分配给它。在这些情况下,与平台相关联的较新的轨道被认为是gydF4y2Ba冗余gydF4y2Ba.gydF4y2Ba

endTime = assignmentTable.Time(end);assignmentTable (endTime, {gydF4y2Ba“TrackID”gydF4y2Ba,gydF4y2Ba“AssignedTruthID”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秒27 1 2 0 0 0 60秒7 4 0 0 0 60秒27日8 5 26 60秒9 1 22 0 0 0 0 0 0 60秒11南10 0 0 0 60秒12 6 20 0 0 0 60秒24 7 19 0 1 4 60秒32南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的axes对象包含3个类型为line的对象。这些对象表示报告的协方差,实际的协方差,校正的协方差。gydF4y2Ba

为了说明在较长范围内实际协方差的凹形gydF4y2BalongRangeCorrectiongydF4y2Ba金宝app支撑函数约束了报告测量噪声的条件数。上面所示的校正测量协方差被限制为最大条件数300。换句话说,测量协方差中的任何特征值都不能小于协方差最大特征值的300倍。这种处理方法在量程维上扩展了测量噪声,以更好地匹配实际测量不确定度的凹面。gydF4y2Ba

模拟与远程协方差校正gydF4y2Ba

方法重新运行前面的模拟gydF4y2BalongRangeCorrectiongydF4y2Ba金宝app支持远距离校正报告测量噪声的功能。gydF4y2Ba

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

{

endTime = correctedAssignmentTable.Time(end);correctedAssignmentTable (endTime, {gydF4y2Ba“TrackID”gydF4y2Ba,gydF4y2Ba“AssignedTruthID”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(alldetects,covcon,confirmedTracks,correctedAssignmentTable, truepositions, sensPlatIDs)gydF4y2Ba“关闭”gydF4y2Baxlim([-1000 5000]);ylim(-36000年[-41000]);-5000年zlim ([0]);视图([-90 90])轴gydF4y2Ba广场gydF4y2Ba标题(gydF4y2Ba“喷射执行水平转弯”gydF4y2Ba)gydF4y2Ba

{

放大喷气机正在执行水平转弯的视图,即使在本例中使用的运动模型是匀速运动,轨道也会相对较好地跟随机动目标。跟踪机动可以通过使用交互多模型(IMM)滤波器进一步改进gydF4y2BatrackingIMMgydF4y2Ba过滤器。gydF4y2Ba

视图(25 [-60])gydF4y2Ba

{

从另一个喷气机正在执行水平转弯的视图中,可以看到尽管传感器的高度测量不准确,但高度的估计是正确的。其中一个传感器根本没有报告高度,从大的垂直椭球可以看出,而其他两个传感器低估了它们在高度上的不确定性。gydF4y2Ba

xlim(-9000年[-25000]);ylim(-19000年[-31000]);zlim(-2000年[-9000]);查看([-45 10])gydF4y2Ba“穿越飞机”gydF4y2Ba)gydF4y2Ba

{

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

xlim(10000年[-10000]);ylim (10000 [0]);zlim(-5000年[-12000]);查看([-15 10])gydF4y2Ba“机载雷达平台”gydF4y2Ba)gydF4y2Ba

{

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

总结gydF4y2Ba

这个例子展示了如何处理中央跟踪器中多个机载和地面雷达平台收集的检测。在这个例子中,您了解了长范围的测量噪声是如何不能精确地用高斯分布建模的。在这些长范围内,测量噪声的1-sigma椭圆的凹陷导致跟踪性能较差,有掉落的轨道和分配给单个平台的多个轨道。您还学习了如何校正远距离探测的测量噪声,以提高所报告航迹的连续性。gydF4y2Ba

金宝app支持功能gydF4y2Ba

initFiltergydF4y2Ba这个函数修改函数gydF4y2BainitcvekfgydF4y2Ba处理速度较高的目标,比如场景中的客机。gydF4y2Ba

函数gydF4y2Bafilter = initFilter(检测)filter = initcvekf(检测);classToUse = class(filter.StateCovariance);gydF4y2Ba客机可以以每小时900公里左右的速度飞行。。速度被初始化了gydF4y2Ba%到0,但将需要能够迅速适应飞机移动gydF4y2Ba%这些速度。以900 km/h作为速度的1个标准差gydF4y2Ba%的噪音。gydF4y2BaSPD = 900*1e3/3600;gydF4y2Ba% m / sgydF4y2BavelCov = cast(spd^2,classToUse);cov = filter.StateCovariance;cov(2,2) = velCov;cov(4,4) = velCov;过滤器。StateCovariance = cov;gydF4y2Ba设置过滤器的过程噪声,以允许一些水平机动gydF4y2BascaleAccel = cast(10,classToUse);Q = blkdiag(scaleAccel^2, scaleAccel^ 2,1);过滤器。ProcessNoise = Q;gydF4y2Ba结束gydF4y2Ba

detectableTracksgydF4y2Ba这个函数返回至少在一个传感器视场内的轨迹的id。传感器的视场和相对于轨道坐标框架的方向存储在传感器配置结构数组中。配置结构由雷达传感器返回,可用于将轨道位置和速度转换为传感器的坐标框架。gydF4y2Ba

函数gydF4y2BatrackIDs = detectableTracks(tracks,predictedtracks,configs)gydF4y2Ba识别哪些轨道落在传感器的视野内。gydF4y2BanumTrks = size(轨道,1);[numsteps, numSensors] = size(configs);allposTrack = 0 (3,numsteps);isdetected = false(numTrks,1);gydF4y2Ba为gydF4y2BaiTrk = 1:numTrksgydF4y2Ba在当前位置和预测位置之间插入轨道位置gydF4y2Ba%的位置为每个模拟步骤gydF4y2BaposTrack = tracks(iTrk).State(1:2:end);posPreditedTrack = predictedtracks(iTrk).State(1:2:end);gydF4y2Ba为gydF4y2Baipo = 1:3 allposTrack(ipo,:) = linspace(posTrack(ipo),posPreditedTrack(ipo),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[az,el] = cart2sph(pos(1),pos(2),pos(3));Az = Az *180/pi;El = El *180/pi;inFov = abs(az)如果gydF4y2BainFov isDetectable(iTrk) = inFov;K = numsteps;gydF4y2Ba% #好< FXSET >gydF4y2Ba传感器= numSensors;gydF4y2Ba% #好< FXSET >gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba结束gydF4y2Batrackid = [tracks.TrackID]';trackIDs = trackIDs(isdetected);gydF4y2Ba结束gydF4y2Ba

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

函数gydF4y2Bapos = trackToSensor(pos,config) frames = config. measurementparameters;gydF4y2Ba为gydF4y2Bam =数字(帧):-1:1 rotmat =帧(m).定向;gydF4y2Ba如果gydF4y2Ba~帧(m)。IsParentToChild rotmat = rotmat';gydF4y2Ba结束gydF4y2Baoffset =帧(m).OriginPosition;Pos = bsxfun(@minus, Pos,offset);Pos = rotmat* Pos;gydF4y2Ba结束gydF4y2Ba结束gydF4y2Ba

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

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

函数gydF4y2Badets = longRangeCorrection(dets,maxCond)gydF4y2Ba为gydF4y2Bam = 1:数字(dets) R = dets{m}.测量噪声;[Q,D] = eig(R);Q = real(Q);d = real(diag(d));dMax = max(d);condNums = dMax./d;iFix = condNums>maxCond;d(iFix) = dMax/maxCond;R = Q*diag(d)*Q';依据{m}。MeasurementNoise = R;结束gydF4y2Ba结束gydF4y2Ba