主要内容

使用双基地距离检测的跟踪

这个示例向您展示如何使用四个传感器-发射器对模拟双基地距离探测。此外,本例还演示了如何使用双基地距离测量来定位和跟踪多个目标。

简介

双基地雷达是由双基地发射机或发射机(T_X美元),以及双基地接收器或传感器(R_X美元).双基地系统的几何结构如下图所示。传感器接收沿形成三角形上边的路径的信号$(r_t + r_r)$双基地探测参考发射极范围。相对双基地范围为:

$$R_{双静态}= R_T + R_R - L,$$

在哪里R_T美元是从发射器到目标的距离,R_R美元目标到传感器的距离,和L美元,也称为直接路径或基线,是从发射器到传感器的范围。

双基地雷达得到的发射器-目标-传感器距离等于:

$$R_T + R_R = 2a.$$

这个和定义了一个范围恒定的椭球。上图描述了目标、发射器和传感器处于同一平面时的椭球。这就产生了一个二维椭圆。目标位于等距椭球表面的某处,焦点为发射器和传感器位置,两者之间以基线距离L隔开,长轴为2a。

接下来,您将定义一个场景来生成双基地检测,然后使用该检测来跟踪目标。

定义场景

定义一个跟踪场景,模拟包含多个平台的3-D区域。您将在这个场景中定义双基地系统。

为可重复的结果设置随机种子。rng (2050);创建一个跟踪场景来管理平台的移动。。scene = trackingScenario;%设置场景持续时间为30秒,并设置更新速率%场景切换到1hz。现场。StopTime = 30;%交会现场。UpdateRate = 1;%赫兹

设置各类平台的数量。在本例中,将创建以下类型的平台来感知目标:

  • 1个雷达发射器

  • 4个双基地雷达传感器

设置球形所需的传感器-发射器对的最小数量%相交算法对目标进行了较好的定位%三维空间。numSensors = 4;emitterIdx = 1;发射器被添加为场景中的第一个平台

创建并挂载发射器

在双基地系统中,有三种类型的发射器:

  • 专用:这种类型的发射机是有意设计和操作,以支持双基地处理。金宝app

  • 合作型:这种类型的发射机被设计为支持其他功能,但适合双基地使用。金宝app关于发射机的信息,如其发射波形和位置是已知的。

  • 非合作型:这种类型的人是“机会的传递者”。非合作发射机不能控制,但被认为适合双基地使用。

在本例中,建模的发射器被认为是专用发射器。模拟射频发射使用radarEmitter.这是一个理想的,各向同性发射器与360度视野。波形类型是用户定义的值,用于枚举场景中出现的各种波形类型。对于这个场景,使用值1表示LFM类型的波形。将发射器安装在原点的固定平台上。

定义一个发射器。发射器= radarEmitter(emitterIdx,“没有扫描”...“FieldOfView”(360 180),...% [az el]度“CenterFrequency”300 e6,...%赫兹“带宽”, 30 e6,...%赫兹“WaveformType”1);使用1表示类似lfm的波形%将发射器安装在平台上。thisPlat =平台(场景,“轨迹”kinematicTrajectory (“位置”,[0 0 0],...“速度”,[0 0 0]));thisPlat。发射器={发射器};

创建和安装双基地雷达传感器

为双基地雷达传感器建模radarSensor.雷达传感器是一个理想的,各向同性接收机与360度视野。设置DetectionMode双基地。确保传感器的配置使其中心频率、带宽和预期波形类型与发射器配置匹配。在场景坐标中启用INS跟踪,并将双基地雷达传感器安装到平台上。

为四个双基地雷达传感器定义一些随机轨迹。。%圆分布,有一定方差。R = 2000;%范围,mtheta = linspace(0,pi,numSensors);% Theta, radxSen = r*cos(theta) + 100*randn(1,numSensors);% mySen = r*sin(theta) + 100*randn(1,numSensors);% m为了观察目标的z,传感器必须有一定的仰角%相对于彼此和发射器。zSen = -1000*rand(1,numSensors);% m定义一个双基地雷达传感器。传感器= fusionRadarSensor(1,“没有扫描”...“FieldOfView”(360 180),...% [az el]度“DetectionMode”“双基地”...双基地检测模式“CenterFrequency”300 e6,...%赫兹“带宽”, 30 e6,...%赫兹“WaveformTypes”, 1...使用1表示类似lfm的波形“之内”,真的,...有INS在场景中启用跟踪“AzimuthResolution”, 360,...不测量方位角,只有一个分辨率单元格“HasElevation”,真的,...%启用仰角设置仰角分辨率“ElevationResolution”, 180);%单仰角分辨率单元格在平台上安装双基地雷达传感器。iD = 1:numSensors用轨迹创建一个平台。传感平台是%被认为是静止的,但可以提供一个速度。thisPlat =平台(场景,...“轨迹”kinematicTrajectory (“位置”,[xSen(iD) ySen(iD) zSen(iD)],...“速度”,[0 0 0]));克隆双基地雷达传感器并安装到平台上。thisPlat。传感器={克隆(传感器)};提供正确的传感器指标。thisPlat.Sensors{1}。SensorIndex = iD;结束

模拟双基地场景包括以下内容:

  • 产生射频辐射

  • 传播排放并从平台反映这些排放

  • 接收发射,计算干扰损失,并产生检测。

这个过程被封装在一个支持函数中,金宝appdetectBistaticTargetRange,在本例的末尾定义。

目标定位

介绍部分中的图说明了双基地测量时,目标位于由发射器和传感器位置以及测量的双基地范围定义的椭球上的某处。由于目标可以位于椭球面上的任何位置,单一的双基地测量不能提供目标状态的完全可观测性。为了定位目标(三角测量目标位置)并实现目标状态的可观测性,需要来自不同传感器的多次测量。本例中实现的目标定位算法基于参考文献[1]中描述的球面相交方法。定位问题的非线性性质导致两个可能的目标位置从交叉的3个或更多的传感器双基地范围。通过使用3个以上的传感器,可以方便地从两个可能的位置确定目标位置。在本例中,使用四个传感器使用一个发射器生成双基地检测。

接下来,您将向场景添加一个目标以生成双基地检测。

向场景中添加一个目标

没有任何附加发射器或传感器的平台被称为目标.创建跟踪使用的目标平台

使用场景的平台方法在这里添加一个目标。指定%轨迹使用运动学轨迹随机位置和常数%的速度。平台(场景,“轨迹”kinematicTrajectory (...“位置”, [2000*randn 100*randn -1000],...“速度”,[10*randn 10*randn 5*randn]));初始化显示以实现可视化。theaterDisplay = helperbistaticrangfusiondisplay(场景,...“XLim”3 [3],“YLim”, [-3 3],“ZLim”-2.5 [0],...“GIF”'');%记录新的GIF,如果指定名称视图(3);

在目标单一且无虚警的情况下,可以对多个测量值进行三角测量,以获得定位目标的位置。这个定位位置可以用来估计目标位置,也可以传递给跟踪器来估计目标状态。现在,您将从单个目标生成双基地雷达探测,并可视化双基地椭球的几何形状。您将使用支持函数计算三角定位金宝apphelperBistaticRangeFusion,包含在本示例中。的helperBistaticRangeFusion函数计算目标的三角位置,鉴于由目标产生的双基地距离检测。

创建一个融合检测来表示三角定位和将位置可视化为3-D融合位置检测。。measParam = struct(“帧”“矩形”...“HasAzimuth”,真的,“HasElevation”,真的,...“HasRange”,真的,“HasVelocity”假的,...“OriginPosition”(0, 0, 0),...%融合位置在场景框内“OriginVelocity”(0, 0, 0),...%场景帧速度为零“定位”眼睛(3),...%场景帧没有旋转。“IsParentToChild”、假);指定是否在父帧中指定旋转使用objectDetection表示融合检测。它是3d的%位置和协方差。fusedDetection = {objectDetection(0, 0 (3,1)),“MeasurementNoise”眼睛(3),...“MeasurementParameters”, measParam)};%更改视图视图(-125,9);运行场景。推进(场景)获取当前模拟时间。time = scene.SimulationTime;从一个目标获得双站距离检测。detectBistaticTargetRange(场景,时间,emitterIdx,true);三角测量检测,以估计目标位置。[position, co方差]= helperBistaticRangeFusion(检测);更新融合检测。fusedDetection{1}。测量=位置;fusedDetection{1}。测量噪声=协方差;更新显示。theaterDisplay([检测;fusedDetection]);结束如果需要,编写新的GIFwriteGIF (theaterDisplay);

在前面的动画中,双基地雷达传感器被描绘为向下指向的三角形。静止发射器在原点处用紫色圆圈标记。目标用白色菱形表示,灰线表示目标的轨迹。在每个时间戳中,二维动画在目标的Z位置被切片。

使用黄色圆圈标记显示的融合检测位于四个椭球生成的相交区域附近,并且接近场景中目标的真实位置。

多目标场景

单目标场景假设已知检测是由相同的目标生成的。因此,你可以通过三角定位来定位目标。但是,在多目标情况下,如果存在误报和漏检,则通常无法获得此信息。这导致了检测和目标之间的未知数据关联。要解决这个问题,可以使用staticDetectionFuser.的staticDetectionFuser估计检测和目标之间的未知数据关联,并使用多维分配公式找到最佳解决方案。的staticDetectionFuser输出熔融检测。融合探测的个数代表可能的目标数,每个探测代表目标的笛卡尔位置。

接下来,您将向场景添加新目标,并使用staticDetectionFuser在存在假警报的情况下创建多个目标的融合探测。这些检测被GNN追踪器进一步处理,trackerGNN,以追踪目标。

重新启动场景并添加剩余的目标。重启(现场);%可重复几何rng (2021);此处添加的目标数。numTargets = 4;%随机分布的目标。r = abs(2000*randn(1,numTargets));%随机范围(m)theta = linspace(0,numTargets*pi/4,numTargets);角位置(弧度)xTgt = r.*cos(theta) + 100*randn(1,numTargets);% x位置(m)yTgt = -r.*sin(theta) + 100*randn(1,numTargets);% y位置(m)地面目标。zTgt = -1000*ones(1,numTargets);% z位置(m)iD = 1:numTargets thisPlat =平台(场景,...“轨迹”kinematicTrajectory (“位置”,[xTgt(iD) yTgt(iD) zTgt(iD)],...“速度”,[10*randn 10*randn 5*randn]));结束%更新平台变量。平台= scene.Platforms;重置显示。释放(theaterDisplay);%关闭所有目标的双基地椭圆绘图。theaterDisplay。PlotBistaticEllipse = false;%未记录theaterDisplay.GIF =''呼叫一次,绘制新的轨迹。theaterDisplay ();%带有轨迹的场景显示。showScenario (theaterDisplay);snapnow;showGrabs (theaterDisplay []);

安装Fuser和Tracker

本节创建一个静态检测熔断器,它使用前面讨论过的球形交叉口定位算法。此外,定义了一个全局最近邻跟踪器(GNN)来处理融合检测。

定义一个静态检测熔断器。fuser =静态检测fuser (...“MeasurementFusionFcn”“helperBistaticRangeFusion”...“UseParallel”,真的,...%进行并行处理“MaxNumSensors”numSensors,...%双基地雷达传感器数量“体积”、传感器。RangeResolution,...%传感器检测bin的卷“MeasurementFormat”“自定义”...%定义自定义融合测量双静态不能报告cvmeas“MeasurementFcn”“helperBistaticMeas”...设置测量功能报告双站测量“DetectionProbability”, 0.99...%发现目标的概率);定义一个GNN跟踪器。跟踪器= trackerGNN(“AssignmentThreshold”, 100);

使用静态融合跟踪目标

将模拟双基地检测与模拟双基地检测相融合staticDetectionFuser采用球面交点算法。然后将融合检测传递给GNN跟踪器。

推进(场景)获取当前模拟时间。time = scene.SimulationTime;获得双基地距离检测detectBistaticTargetRange(场景,时间,emitterIdx);%融合双静电检测到一个结构。[superDets, info] = fuser(检测);使用GNN跟踪器跟踪融合双基地检测。confTracks =跟踪器(superDets,scene.SimulationTime);%更新显示当前平台位置和轨道。theaterDisplay ([superDets(:);检测(:)),confTracks);结束

结果

在存在多个目标和可能的假警报的情况下,幽灵交叉口有时可能比实际解决方案更有利。由于这些幽灵路口在场景中随机出现,它们被集中跟踪器有效地视为“假警报”。在下面的图中,您可以注意到静态融合在不正确的位置输出检测。由于幽灵十字路口与真实十字路口竞争,此时两个真正的目标都被错过了。

在“当前估计轨道”图中,注意跟踪器能够在所有5个目标上保持轨道,而不会产生任何幽灵或错误的轨道。

showGrabs (theaterDisplay, 1);

下图显示了轨道1和轨道2在模拟结束时的俯视图。连接轨道的橙色线表示历史。注意,轨迹历史接近于目标的真实轨迹。

showGrabs (theaterDisplay 2假);

总结

在本例中,您学习了如何使用双基地传感器模拟场景。您了解了使用双基地测量跟踪目标的相关挑战。你使用了staticDetectionFuser用于融合来自多个目标的双基地距离探测trackerGNN用融合位置测量跟踪目标。

金宝app支持功能

helperBistaticRangeFusion引信范围探测,三角定位目标位置

函数[pos,cov] = helperBistaticRangeFusion(检测)此函数仅供举例,将来可能会被删除。%释放。这个函数返回目标的估计位置和协方差%,给出了由它产生的双基地检测。The MathWorks, Inc.版权所有做粗浇注,因为至少需要3次测量寻找解决办法。如果Numel(检测)< 3 pos = 1e10*ones(3,1);冠状病毒= 2*眼(3);其他的从测量中检索信息范围= 0(数字(检测),1);receiverLocations =零(3,数字(检测));emitterLocation =检测{1}.MeasurementParameters.EmitterPosition;i = 1: number (detections) rLoc = detections{i}.MeasurementParameters(2).OriginPosition;receiverLocations(:,i) = rLoc;球面交点法假设测量值为%汇出+收回。双静电测量定义为Remit + Rrecv - Rb。将Rb加到实际测量值中L = norm(emitterLocation(:) - rLoc(:));范围(i) =检测{i}。测量+ L;结束pos = helperSphericalIntersection(ranges,receiverLocations,emitterLocation);%协方差仅在需要时计算。这有助于储蓄%计算时的成本计算静态融合,其中仅%位置是必需的。如果nargout > 1 cov = linearFusionFcn(pos,detection);结束结束结束用于测量噪声的线性融合函数函数measCov = linearFusionFcn(pos,thisDetections)线性噪声融合函数。它需要测量雅可比矩阵来使用线性%转换。使用恒定速度状态来计算雅可比矩阵。estState = 0 (6,1);estState(1:2:end) = pos;n = numel(thisDetections);totalJacobian = 0 (n,3);totalCovariance = 0 (n,n);i = 1: nummel (thisDetections) H = cvmeasjac(estState,thisDetections{i}.MeasurementParameters);total雅可比矩阵(i,:) = H(1,1:2:end);totalCovariance(i,i) = thisDetections{i}.MeasurementNoise;结束toinvert雅可比矩阵= total雅可比矩阵'/(totalCovariance)* total雅可比矩阵;I =眼睛(3);% 2-D到3-D转换与0雅可比矩阵wrt z。如果toInvertJacobian(3,3) == 0;结束measCov = I/toInvertJacobian;返回真正定。measCov = (measCov + measCov')/2;(~isfinite(measCov)) = 1000;inf和nan的一个大数字结束

detectionBistaticTargetRange生成场景中目标的双基地距离检测。

函数detectBistaticTargetRange(场景,时间,emitterIdx,removeFalseAlarms)%从场景中获取平台。平台= scene.Platforms;%表示是否应从检测中删除虚假警报的标志。如果nargin == 3 removeFalseAlarms = false;结束区分接收器和目标,以消除检测。%接收者。假设这些检测可以从%使用先验信息的批处理。isReceiver = cellfun(@(x)~isempty(x. sensors),scene.Platforms);allIDs = cellfun(@(x)x. platformid,scene.Platforms);receiverIDs = allIDs(isReceiver);产生射频辐射emitPlatform =平台{emitterIdx};txEmiss = emit(emitPlatform, time);传播排放并反映这些排放来自平台。。reflSigs = radarChannel(txEmiss,平台,“HasOcclusion”、假);从双基地雷达传感器生成探测。检测= {};numPlat =数字(平台);iPlat = 1:numPlat thisPlatform =平台{iPlat};%接收发射,计算干扰损失,和%生成双基地检测。thisDet = detect(thisPlatform, reflSigs, time);移除双基地接收器的检测。。只有%来自目标平台的探测将被融合和跟踪。detectedTargetIDs = cellfun(@(x)x. objectattributes {1}.TargetIndex,thisDet);toRemove = ismember(detectedTargetIDs, receiverIDs) | removeFalseAlarms*(detectedTargetIDs<=0);thisDet = thisDet(~toRemove);将该平台的检测添加到检测数组中。。检测=[检测;thisDet];% #好< AGROW >结束确定本次模拟时间的发射极位置和速度。发射器位置=发射器平台。轨迹。位置(:);%更新检测结构,以表明仅保留双基地距离测量值。iD = 1:numel(detections)检测{iD}。测量=检测{iD}.测量(结束);%#ok范围测量检测{iD}。MeasurementNoise = detections{iD}.MeasurementNoise(end,end);%#ok测量范围噪声检测{iD} .MeasurementParameters(1)。HasAzimuth = false;%#ok %更新测量参数以指示方位角不再存在检测{iD} .MeasurementParameters(1)。HasElevation = false;%#ok %更新测量参数,表明高程不再存在检测{iD} .MeasurementParameters(1)。发射器位置=发射器位置;%#ok %添加发射器位置结束结束

参考文献

  1. 马拉诺夫斯基,M.和K.库尔帕。多基地无源雷达目标定位的两种方法。IEEE宇航与电子系统汇刊,第48卷,第1期,2012年1月,第572-578页。

  2. 威利斯,n.j.双基地雷达。罗利:科技出版公司,2005年。