主要内容

模拟多路径返回引起的雷达回波

这个例子演示了如何模拟由于多路径反射而产生的鬼目标探测和跟踪,在多路径反射中,信号能量在返回到雷达之前被另一个目标反射。在本例中,您将使用统计雷达模型和生成IQ信号的收发器模型来模拟幽灵。

动机

许多高速公路上的场景不仅涉及其他车辆,还涉及路障和护栏。考虑使用驾驶场景设计师(自动驾驶工具箱)要了解更多关于如何建模屏障的信息,请参见基于合成雷达和视觉数据的传感器融合(自动驾驶工具箱)例如,使用helperSimpleHighwayScenarioDSD从驾驶场景设计器导出的函数,用于获取高速公路场景和ego车辆的把手。

%设置随机种子以获得可重复的结果rndState = rng (“默认”);%使用helper创建场景[scenario, egoVehicle] = helperSimpleHighwayScenarioDSD();

为模拟由前瞻性汽车雷达产生的检测,使用radarDataGenerator系统对象™.使用77 GHz的中心频率,这是汽车雷达的典型频率。产生的探测范围可达100米,径向速度可达100米/秒。

%汽车雷达系统参数频率= 77 e9;%赫兹rgMax = 150;% mspMax = 100;% m / srcs = 10;% dBsmazRes = 4;%度rgRes=2.5;% m存款准备金率= 0.5;% m / s%创造一个前瞻性的汽车雷达rdg=雷达数据发生器(1,“没有扫描”,...“UpdateRate”10...“MountingLocation”, [3.4 0 0.2],...“CenterFrequency”,freq,...“HasRangeRate”,真的,...“视野”70年[5],...“范围限制”[0 rgMax],...“RangeRateLimits”, (-spMax spMax),...“模糊性”,真的,...“MaxUnambiguousRange”rgMax,...“HasRangeRateAmbiguities”,真的,...“最大无歧义径向速度”spMax,...“ReferenceRange”rgMax,...“ReferenceRCS”,rcs,...“AzimuthResolution”azRes,...“RangeResolution”rgRes,...“RangeRateResolution”存款准备金率,...“TargetReportFormat”,“检测”,...“配置文件”actorProfiles(场景));%创建鸟瞰图和检测绘图仪功能[~,detPlotterFcn]=helperSetupBEP(egoVehicle,rdg);标题(“空闲空间(没有多路径)”);%生成原始检测时间= scenario.SimulationTime;tposes = targetPoses (egoVehicle);[侦破,~,配置]=读数(tposes、时间);%绘制检测detPlotterFcn(引爆器,配置);

这张图显示了沿目标车辆以及沿屏障一侧的探测位置。然而,检测结果并不总是表现良好。对雷达工程师来说,多路径是一个相当大的挑战。多路径是指信号不仅直接传播到目标并返回到雷达,而且还包括环境中物体的额外反射。

多径反射

当雷达信号传播到感兴趣的目标时,它可以通过各种路径到达。除了从雷达到目标再回到雷达的直接路径之外,还有其他可能的传播路径。路径的数量是不受限制的,但随着每次反射,信号能量会减少。通常采用考虑三跳路径的传播模型来模拟这一现象。

为了理解三反弹模型,首先考虑更简单的一个反弹和两个反弹路径,如图中所示。

One-Bounce路径

单弹路径从雷达(1)传播到目标(2),然后从目标(2)反射回雷达。这通常被称为直接路径或视线路径。

Two-Bounce路径

在这种情况下,有两个独特的传播路径,由两个反射组成。

第一个two-bounce路径传播从雷达(1)反射表面(3),然后到目标(2)返回雷达(1),因为之前在雷达接收到的信号到达从去年反弹真正的目标,它生成鬼检测沿同一方向为真正的目标。由于这种传播的路径长度较长,它出现在比真实目标探测更远的范围。

第二个两个反弹路径从雷达(1)传播到目标(2),然后在返回到雷达(1)之前传播到反射面(3)。在这种情况下,当雷达接收到该方向的反射信号时,重影检测出现在反射面的另一侧。

注意,两个两次反弹路径的路径长度是相同的。因此,这些路径的测量距离和距离速率也是相同的。

Three-Bounce路径

三次反弹的路径在屏障上反射两次。这条路径不会直接传播到目标,也不会直接传回雷达。当雷达接收到该方向的反射信号时,三反射鬼探测出现在反射面的另一侧。此外,它具有三跳路径中最长的传播路径,因此具有三跳路径中最长的测量范围。这条路径对应于屏障另一侧真实目标的镜面反射。

模型鬼目标检测

设置鬼魂财产的雷达数据发生器对这三条反弹路径生成的检测进行建模。

%启用鬼目标模型release(rdg);rdg.hasgoots=true;%生成原始检测时间= scenario.SimulationTime;tposes = targetPoses (egoVehicle);[侦破,~,配置]=读数(tposes、时间);%绘制检测detPlotterFcn(引爆器,配置);标题(“简单多路径环境”);

此图再现了对三个传播路径的分析。第一个两次反弹的鬼位于目标的方向上,比直接路径探测的距离稍微长一些。第二个两跳和三跳鬼位于障碍物反射产生的目标镜像方向。

鬼跟踪

由于重影目标检测的范围和速度与真实目标的范围和速度类似,因此它们的运动学对于配置为跟踪真实目标检测的跟踪器来说是一致的。真实目标和重影目标运动学之间的一致性导致为重影目标生成轨迹在屏障的另一边。

设置TargetReportFormat财产雷达数据发生器跟踪对雷达在多路径存在时产生的航迹进行建模。

%输出跟踪而不是检测释放(读数);读数。TargetReportFormat =“轨道”; rdg.ConfirmationThreshold=[23];rdg.DeletionThreshold=[5];过滤器初始化FCN=“initcvekf”%常速卡尔曼滤波器%创建新的鸟瞰图以绘制轨迹(cep trkPlotterFcn] = helperSetupBEP (egoVehicle读数);标题(“简单多路径环境”);%运行仿真重启(场景);场景。StopTime = 7.5;advance(scenario) time = scenario. simulationtime;tposes = targetPoses (egoVehicle);%生成跟踪[载重汽车,~,配置]=读数(tposes、时间);%过滤掉对应于静态对象的轨道(例如屏障)dyntrks = helperKeepDynamicObjects(trks, egoVehicle);%可视化动态轨迹egoVehicle helperPlotScenario (cep);trkPlotterFcn (dyntrks配置);终止

此图显示了使用方形标记器确定的轨道位置。与静态物体(例如障碍物)对应的轨迹没有绘制。注意,有多个轨道与前车相关联。覆盖在引车上的轨道对应着真正的探测和第一个两次反弹的幽灵。护栏另一侧的铁轨对应着第二个两次反弹和三次反弹的幽灵。

轨道速度由指向远离轨道位置的矢量的长度和方向指示(这些很小,因为它们相对于自我车辆)。幽灵探测可能会欺骗跟踪器,因为它们的运动学和真实目标的运动学相似。这些幽灵轨迹可能会带来问题,因为它们会给跟踪器增加额外的处理负载,并会混淆使用目标轨迹的控制决策。

模型智商信号

在本例中先前的自由空间和多路径模拟中,您使用了测量级雷达模型来生成检测和跟踪radarTransceiver生成时域IQ信号的系统对象。创建一个等价的radarTransceiver直接从雷达数据发生器.

统计雷达具有以下距离和距离速率(多普勒)参数,这些参数确定了雷达所用波形的约束条件radarTransceiver.

rgMax = rdg.RangeLimits (2)% m
rgMax = 150
spMax=额定量程率限值(2)% m / s
spMax = 100

计算满足雷达距离率的脉冲重复频率(PRF)。

λ= freq2wavelen (rdg.CenterFrequency);脉冲重复频率= 2 * speed2dop (2 * spMax,λ);

计算满足距离速率分辨率要求所需的脉冲数。

rrRes=rdg.RangeRateResolution
rrRes=0.5000
dopRes = 2 * speed2dop(存款准备金率,λ);numPulses = 2 ^ nextpow2(脉冲重复频率/ dopRes)
numPulses = 512
脉冲重复频率= dopRes * numPulses
脉冲重复频率= 1.3150 e + 05

确认与该PRF相对应的明确范围超出了最大范围限制。

rgUmb = time2range(1 /脉冲重复频率)
rgUmb=1.1399e+03

构造等价物radarTransceiver直接从雷达数据发生器.

释放(读数);根据所需的PRF和,设置范围和范围速率歧义%脉冲数读数。MaxUnambiguousRange = rgUmb;读数。MaxUnambiguousRadialSpeed = spMax;%将统计雷达设置为报告要比较的群集检测雷达收发机的IQ视频。读数。TargetReportFormat =“集群检测”;读数。DetectionCoordinates =“身体”
azRes = rdg.AzimuthResolution;读数。AzimuthResolution = rdg.FieldOfView (1);用雷达数据发生器建造雷达收发机rtxrx = radarTransceiver(读数)
rtxrx = radarTransceiver with properties:变送器:[1×1相控。发射天线:[1×1相控。接收器天线:[1×1相控。接收器:[1×1相控。ReceiverPreamp] MechanicalScanMode: 'None' ElectronicScanMode: 'None' MountingLocation: [3.4000 0 0.2000] MountingAngles: [0 00] NumRepetitionsSource: 'Property' NumRepetitions: 512
rdg.AzimuthResolution=azRes;

这个radarTransceiver只有一个发射和接收单元,但统计雷达使用统一线性阵列(ULA)形成多个波束。所述的接收天线附加一个ULA阵列radarTransceiver。ULA中的元素数量由雷达的方位分辨率和波长决定。

numRxElmt =装天花板(beamwidth2ap (rdg.AzimuthResolutionλ,0.8859)/(λ/ 2))
numRxElmt = 26
elmt = rtxrx.ReceiveAntenna.Sensor;rxarray =分阶段。齿龈(numRxElmtλ/ 2,“元素”, elmt);rtxrx.ReceiveAntenna.Sensor = rxarray;

生成智商样品

使用helper3BounceGhostPaths函数从多路径场景中计算目标的三跳路径和传感器位置。

重新启动(场景);TPOS=目标姿态(车辆);%为场景中的目标生成3反弹传播路径路径=helper3BounceGhostPaths(tpos,rdg);

使用radarTransceiver生成雷达接收到的基带采样IQ数据。

时间= scenario.SimulationTime;%当前模拟时间Xcube = rtxrx(路径、时间);%从3反弹路径模型生成收发器的IQ数据

距离和多普勒处理

接收到的数据立方体有三个维度:快速采样、接收天线单元和慢速采样。

大小(Xcube)
ans =1×3456年26 512年

使用分阶段。RangeDopplerResponse系统对象沿数据立方体的第一个和第三个维度执行距离和多普勒处理。

rngdopproc =分阶段。RangeDopplerResponse (...“RangeMethod”,匹配滤波器的,...“DopplerOutput”,“速度”,...“PropagationSpeed”rtxrx.ReceiveAntenna.PropagationSpeed,...“OperatingFrequency”,rtxrx.接收天线.工作频率,...“SampleRate”, rtxrx.Receiver.SampleRate);mfcoeff = getMatchedFilter (rtxrx.Waveform);[Xrngdop, rggrid rrgrid] = rngdopproc (Xcube mfcoeff);

波束形成

使用分阶段。PhaseShiftBeamformer系统对象从接收天线阵列单元沿数据立方体的第2维形成波束。

azFov=rdg.视野(1);anggrid=-azFov/2:azFov/2;bmfwin=@(N)normax(taylorwin(N,5,-60));波束形成器=相移波束形成器(...“方向”(anggrid; 0 * anggrid),...“传感器阵列”rtxrx.ReceiveAntenna.Sensor,...“OperatingFrequency”,rtxrx。接收天线。工作频率);Xbfmrngdop=Xrngdop;[Nr,Ne,Nd]=尺寸(Xbfmrngdop);Xbfmrngdop=permute(Xbfmrngdop[1 3 2]);%天然橡胶x钕x氖Xbfmrngdop =重塑(Xbfmrngdop [], Ne);Xbfmrngdop = beamformer (Xbfmrngdop。* bmfwin (Ne) ');Xbfmrngdop =重塑(Nr, Xbfmrngdop Nd, []);%天然橡胶x钕x铌Xbfmrngdop = permute(Xbfmrngdop,[1 3 2]);% Nr x Nb x Nd

使用helperPlotBeamformedRangeDoppler函数从波束形成的、距离和多普勒处理的数据立方体绘制距离角图。

helperPlotBeamformedRangeDoppler (Xbfmrngdop rggrid、anggrid rtxrx);

接收到的信号的局部极大值对应于目标车辆的位置、护栏的位置以及护栏另一侧目标车辆的鬼像。显示测量级检测产生的雷达数据发生器与等效生成的范围角贴图中的峰值一致radarTransceiver.

使用helperPlayStatAndIQMovie功能来比较在此场景持续期间的测量级检测和IQ处理视频。

helperPlayStatAndIQMovie(场景、egoVehicle rtxrx读数,rngdopproc, beamformer, bmfwin);

多路地面反弹

多路径重影检测有时可用于查看道路中因遮挡而无法被雷达检测到的物体。一个示例是检测因路面外的多路径而被遮挡的车辆。使用helperGroundBounceScenarioDSD函数创建一个场景,其中在同一车道上移动较慢的车辆与自我车辆被直接在雷达前面的另一辆车辆遮挡。

[场景,egoVehicle]=helperGroundBounceScenarioDSD;ax3d=helperRadarChasePlot(egoVehicle);

黄色的车被红色的车挡住了。蓝色“自我”车的前视雷达和黄色车之间没有一条视线。

viewLoc = [scenario.Actors(2).Position(1)-10 -10];chasePlot (egoVehicle“查看位置”viewLoc,“视图高度”0,“视图偏航”现年40岁的“父”,ax3d);

多路径可以通过汽车底部和路面之间的空间。

重复使用雷达数据发生器由于车辆与路面之间的多路径,产生鬼目标检测。使用helperRoadProfileshelperRoadPoses用于在场景中建模的目标列表中包括路面的函数,以启用路面和车辆之间的多路径。

释放(读数);读数。RangeRateResolution = 0.5;rdg.FieldOfView (2) = 10;读数。TargetReportFormat =“检测”;tprofiles=actorProfiles(场景);rdprofiles=helperRoadProfiles(场景);rdg.Profiles=[tprofiles;rdprofiles];%创建鸟瞰图和检测绘图仪功能(cep detPlotterFcn] = helperSetupBEP (egoVehicle读数);[ax3d, detChasePlotterFcn] = helperRadarChasePlot (egoVehicle读数);camup (ax3d [0 0 1);pos = egoVehicle。位置+ (5 5 0);坎波斯(ax3d pos);camtarget (ax3d [15 0 0]);%生成集群检测时间=scenario.SimulationTime;tposes=目标姿势(egoVehicle);rdposes=帮助错误姿势(egoVehicle);姿势=[tposes rdposes];[dets,~,config]=rdg(姿势,时间);%绘制检测dyndets = helperKeepDynamicObjects(侦破,egoVehicle);detPlotterFcn (dyndets配置);

由于路面和红色汽车的底面之间存在三跳路径,从闭塞的汽车检测是可能的。

从闭塞的汽车中找到3-bounce检测i3 =找到(cellfun (@ (d) d.ObjectAttributes {1} .BouncePathIndex, dyndets) = = 3);det3 = dyndets {i3};%绘制雷达和被遮挡车辆之间的3反弹路径iBncTgt=find([poses.ActorID]==det3.ObjectAttributes{1}.bounceTagetIndex);iTgt=find([poses.ActorID]==det3.ObjectAttributes{1}.TargetIndex);位置=[rdg.安装位置;姿势(iBncTgt).位置;姿势(iTgt).Position]+egoVehicle.Position;保持(ax3d,“开”); 绘图3(ax3d,位置(:,1),位置(:,2),位置(:,3),的r - *,“线宽”2);坎波斯([6 -15 2]);camtarget([0 0] 17日);

该图以红线表示三跳路径。观察雷达和被遮挡的黄色车辆之间存在一条反弹路径,通过红色车辆的下方。

显示到达被遮挡的黄色车辆的反弹路径坎波斯([55 -10 3]);camtarget (35 0 [0]);

此图显示了从路面反弹后到达被遮挡黄色车辆的三条反弹路径。

总结

在这个例子中,您了解了如何通过雷达和目标之间的多次反射来探测鬼目标。一个汽车雷达场景被用来突出一个常见的情况,鬼目标是由雷达视野中的护栏产生的。因此,有四个独特的反弹路径可以产生这些鬼探测。探测鬼目标的运动学就像探测真实目标一样,因此,这些鬼目标会产生鬼轨迹,这会给跟踪器增加额外的处理负载,并可能会混淆使用这些轨迹的控制算法。这个radarTransceiver可用于生成高保真的IQ数据,作为检测和跟踪算法的输入。

恢复随机状态rng (rndState);

金宝app支持功能

helperKeepDynamicObjects

函数egoVehicle dynrpts = helperKeepDynamicObjects (rpt)%过滤出与静态对象(例如护栏)对应的目标报告%这是一个辅助函数,将来可能会被删除或修改%释放。dynrpts = rpt;如果~ isempty (rpt)如果iscell(rpts)vel=cell2mat(cellfun)(d)d.测量(4:end),rpts(:)',“UniformOutput”、假));其他的vel=cell2mat(arrayfun(@(t)t.State(2:2:end)),rpts(:)',“UniformOutput”、假));终止水平=符号(水平(1,:).*sqrt(总和(绝对值)(水平(1:2,:)。^2,1));egoVel=符号(egoVehicle.Velocity(1))*标准(egoVehicle.Velocity(1:2));gndvel=vel+egoVel;探测速度相对于地面的百分比isStatic = gndvel > -4 &...大于4米/秒,gndvel < 8;%小于8米/秒的关闭速度dynrpts=RPT(~isStatic);终止终止

normmax

函数y = normmax (x)如果All (abs(x(:))==0) y = ones(size(x),“喜欢”,x);其他的y = x (:) / max (abs (x (:)));终止终止