主要内容

多功能相控阵雷达搜索与跟踪调度

本例演示了如何模拟一个多功能相控阵雷达系统。多功能雷达可以完成通常需要多台传统雷达才能完成的工作。传统雷达的例子是扫描雷达,负责搜索目标,和跟踪雷达,负责跟踪目标。在这个例子中,多功能相控阵雷达执行扫描(搜索)和跟踪任务。基于从当前回波获得的探测和轨迹,雷达决定下一步要做什么,以确保跟踪目标和搜索所需的空域。多功能相控阵雷达作为闭环工作,包括任务调度、波形选择、探测生成和目标跟踪等功能。

雷达的配置

假设多功能雷达工作在S波段,必须探测2公里到100公里之间的目标,最小目标雷达截面(RCS)为1平方米。

fc = 2 e9;雷达载波频率(Hz)c = 3 e8;%传播速度(m/s)λ= c / fc;雷达波长(m)maxrng = 100年e3;最大范围(m)minrng = 2 e3;最小范围(m)

波形

为了满足范围要求,定义并使用具有1 MHz带宽的线性调频波形。

bw = 1 e6;fs = 1.5 * bw;脉冲重复频率= 1 / range2time (maxrng c);dcycle = 0.1;wav =分阶段。LinearFMWaveform (“SampleRate”fs,...“DurationSpecification”的工作周期“DutyCycle”dcycle,...脉冲重复频率的脉冲重复频率,“SweepBandwidth”bw);

计算波形所能达到的距离分辨率。

rngres = bw2rangeres (bw c)
rngres = 150

雷达天线

多功能雷达配备了一个相控阵,可以对空间中的雷达波束进行电子扫描。使用一个50 × 50的矩形阵列,其中元素被一半波长隔开,以实现大约2度的半功率束宽度。

arraysz = 50;蚂蚁=分阶段。(精“大小”arraysz,“ElementSpacing”λ/ 2);ant.Element.BackBaffled = true;arraystv =分阶段。SteeringVector (“SensorArray”蚂蚁,“PropagationSpeed”c);散热器=分阶段。散热器(“OperatingFrequency”足球俱乐部,...“PropagationSpeed”c“传感器”蚂蚁,“WeightsInputPort”,真正的);收集器=分阶段。收集器(“OperatingFrequency”足球俱乐部,...“PropagationSpeed”c“传感器”,蚂蚁);beamw = rad2deg(λ/ (arraysz *λ/ 2))
beamw = 2.2918

发射器和接收器

利用检测要求来推导适当的发射功率。假设接收前置放大器上的噪声值为7 dB。

pd = 0.9;%检测概率pfa = 1 e-6;误报概率Snr_min = albersheim(pd, pfa, 1);ampgain = 20;tgtrcs = 1;ant_snrgain = pow2db (arraysz ^ 2);企业可持续= radareqpow(λ,maxrng snr_min, wav。脉冲宽度,...RCS的tgtrcs,“获得”ampgain + ant_snrgain);tx =分阶段。发射机(“PeakPower”企业可持续,“获得”ampgain,“InUseOutputPort”,真正的);rx =分阶段。ReceiverPreamp (“获得”ampgain,“NoiseFigure”7“EnableInputPort”,真正的);rxpassthrough =分阶段。ReceiverPreamp (“SampleRate”fs,“获得”0,...“ReferenceTemperature”1);雷达= radarTransceiver (“波形”, wav,“发射器”tx,...“TransmitAntenna”散热器,“ReceiveAntenna”收集器,...“接收方”rxpassthrough,“ElectronicScanMode”“自定义”);

信号处理

多功能雷达应用一系列操作,包括匹配滤波、时变增益、单脉冲和检测,对接收信号产生被检测目标的距离和角度测量。

%匹配滤波器mfcoeff = getMatchedFilter (wav);mf =分阶段。MatchedFilter (“系数”mfcoeff,“GainOutputPort”,真正的);时变增益%tgrid = unigrid (0,1 / fs, 1 /脉冲重复频率,“()”);大门= c * tgrid / 2;rngloss = 2 * fspl(大门,λ);refloss = 2 * fspl (maxrng,λ);tvg =分阶段。TimeVaryingGain (“RangeLoss”rngloss,“ReferenceLoss”, refloss);%单脉冲monfeed =分阶段。MonopulseFeed (“SensorArray”蚂蚁,“PropagationSpeed”c...“OperatingFrequency”足球俱乐部,“SquintAngle”1);我= getMonopulseEstimator (monfeed);

数据处理

这些检测被输入到一个跟踪器中,它执行几项操作。跟踪器维护一个跟踪列表,即对感兴趣区域的目标状态的估计。如果一个检测不能分配给跟踪器已经维护的任何跟踪,跟踪器启动一个新的跟踪。在大多数情况下,新轨迹代表的是真目标还是假目标是不清楚的。首先,以暂定状态创建一个轨道。如果得到足够多的探测,轨迹就被确认。类似地,如果没有检测分配到一个轨道,轨道是沿海(预测没有修正)。如果曲目有一些错过的更新,跟踪器删除曲目。

多功能雷达使用跟踪器,使用全局最近邻(GNN)算法将探测与航迹关联起来。

追踪= radarTracker (“FilterInitializationFcn”@initSATGNN,...“ConfirmationThreshold”3 [2],“DeletionThreshold”5,...“HasDetectableTrackIDsInput”,真的,“AssignmentThreshold”, 100,...“MaxNumTracks”2,“MaxNumSensors”1);

将所有雷达组件组合在一个结构中,以便在模拟循环中更容易参考。

mfradar。Tx = Tx;mfradar。Rx =处方;mfradar。TxAnt =散热器;mfradar。RxAnt =收集器;mfradar.Wav = wav;mfradar。Radar = radar; mfradar.RxFeed = monfeed; mfradar.MF = mf; mfradar.TVG = tvg; mfradar.DOA = monest; mfradar.STV = arraystv; mfradar.Tracker = tracker; mfradar.IsTrackerInitialized = false;

目标和场景定义

本例假设雷达在原点静止,视野内有两个目标。一个目标远离雷达,距离约50公里。另一个目标接近雷达,在30公里外。两个目标的RCS都是1平方米。

定义目标。Tgtpos = [29875 49637;0 4225;0 0];Tgtvel = [-100 120;0 100;0 0];ntgt =大小(tgtpos, 2);tgtmotion =分阶段。平台(“InitialPosition”tgtpos,“速度”, tgtvel);=阶段性目标。RadarTarget (“MeanRCS”ntgt tgtrcs *的(1),“OperatingFrequency”、fc);

假设传播环境是自由空间。

频道=分阶段。空闲空间(“SampleRate”fs,“TwoWayPropagation”,真的,“OperatingFrequency”、fc);

将目标和传播通道组合在一个结构中,以便在模拟循环中更容易引用。

env。目标=目标;env。TargetMotion = tgtmotion;env。频道=通道;现场= radarScenario (“UpdateRate”脉冲重复频率);radartraj = kinematicTrajectory (“SampleRate”脉冲重复频率,“位置”(0 0 0),...“速度”(0 0 0),“AccelerationSource”“属性”...“AngularVelocitySource”“属性”);radarplat =平台(场景,“位置”(0 0 0),“传感器”,{雷达});tgtplat1 =平台(场景,“轨迹”...kinematicTrajectory (“SampleRate”脉冲重复频率,“位置”tgtpos(: 1)。”...“速度”tgtvel(: 1)。”“AccelerationSource”“属性”...“AngularVelocitySource”“属性”));tgtplat2 =平台(场景,“轨迹”...kinematicTrajectory (“SampleRate”脉冲重复频率,“位置”tgtpos(: 2)。”...“速度”tgtvel(: 2)。”“AccelerationSource”“属性”...“AngularVelocitySource”“属性”));env。现场=场景;env。RadarPlatform = radarplat;

雷达资源管理

虽然使用一个多功能雷达执行多种任务有其优点,但它也有更高的成本和更复杂的逻辑。一般来说,雷达用于执行任务的资源是有限的。如果资源用于跟踪任务,那么在跟踪任务完成之前,这些资源对搜索任务是不可用的。由于这种资源分配,使用多功能雷达时的一个关键组件是资源管理。

搜索任务

搜索任务可以被认为是确定性的。在本例中,光栅扫描用于覆盖所需的空域。如果没有其他任务存在,雷达一次扫描一个角胞。角单元的大小是由天线阵的波束宽度决定的。

假设雷达扫描的空间方位为-30到30度,仰角为0到20度。利用波束宽度计算角度搜索网格。

Scanregion = [- 30,30,0, 20];azscanspan = diff (scanregion (1:2));numazscan =装天花板(azscanspan / beamw);scanregion azscanangles = linspace (scanregion (1), (2), numazscan);elscanspan = diff (scanregion (3:4));numelscan =装天花板(elscanspan / beamw);scanregion elscanangles = linspace (scanregion (3), (4), numelscan);[elscangrid, azscangrid] = meshgrid (elscanangles azscanangles);Scanangles = [azscangrid(:) elscangrid(:)].';

波束位置网格和目标场景如下所示。

sceneplot = helperSATTaskPlot (“初始化”, azscanangles scanangles maxrng、beamw tgtpos);

搜索波束按顺序一次传送一个,直到覆盖整个搜索区域。一旦整个搜索区域被覆盖,雷达就会重复搜索序列。搜索是沿着方位角方向执行的,每次一个仰角。搜索任务通常包含在作业队列中。

searchq =结构(“JobType”“搜索”“BeamDirection”num2cell (scanangles 1),...“优先”, 1000,“WaveformIndex”1);current_search_idx = 1;

队列中的每个作业指定作业类型以及光束的指向方向。它还包含作业的优先级值。此优先级值由作业类型决定。本例使用值1000作为搜索作业的优先级。

disp (searchq (current_search_idx))
JobType: 'Search'光束方向:[2×1 double]优先级:1000 WaveformIndex: 1

跟踪任务

与搜索任务不同,跟踪任务不能被计划。只有当搜索任务检测到目标或目标已经被跟踪时,才会创建跟踪任务。跟踪任务是基于不断变化的场景创建和执行的动态任务。与搜索任务类似,跟踪任务也在作业队列中进行管理。

trackq(10) =结构(“JobType”[],“BeamDirection”[],“优先”, 3000,“WaveformIndex”[],...“时间”[],“范围”[],“TrackID”[]);num_trackq_items = 0;disp (trackq (1))
JobType: [] BeamDirection: [] Priority: [] WaveformIndex: [] Time: [] Range: [] TrackID: []

将搜索和跟踪队列分组在一个结构中,以便在模拟循环中更容易引用。

jobq。SearchQueue = searchq;jobq。SearchIndex = current_search_idx;jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;

因为在检测到目标之前不能初始化跟踪作业,所以所有跟踪作业都作为空作业开始。一旦创建了一个作业,它就包含了诸如作业类型、光束的方向和执行时间等信息。跟踪任务的优先级为3000,高于搜索任务的优先级1000。这个较高的优先级值意味着,当时间发生冲突时,系统将首先执行跟踪作业。

本例中队列的大小限制设置为10。

任务调度

在这个例子中,为了简单起见,多功能雷达在一个小的时间段内只执行一种类型的作业,通常称为驻留,但可以在每个驻留开始时切换任务。对于每个驻留,雷达查看所有到期执行的任务,并选择具有最高优先级的任务。因此,被延迟的作业现在具有更高的优先级,更有可能在下一个驻留中执行。

模拟

本节的示例模拟了多功能雷达系统的短期运行。多功能雷达仿真的整个结构用这个图表示。

模拟从雷达管理器开始,它提供初始作业。在此工作的基础上,雷达发射波形,模拟回波,应用信号处理产生探测。跟踪器对检测进行处理,为目标创建轨迹。然后这些轨迹返回到雷达管理器。雷达管理员根据航迹和对现场的了解,安排新的航迹作业,并为下一次驻留选择作业。

雷达管理器操作的逻辑显示在此流程图中,并在以下步骤中进行描述。

  1. 雷达从搜索工作开始。

  2. 如果探测过程中出现目标,雷达将在同一方向安排确认作业,以确保该目标的存在不是误报。确认任务的优先级高于搜索任务,但不高于跟踪任务。如果检测得到确认,则建立跟踪,并创建跟踪作业,以便在给定的重新访问时间后执行。如果检测未被确认,则将原检测视为虚警,不创建轨迹。

  3. 如果当前作业是跟踪作业,雷达将执行探测、更新跟踪并创建未来的跟踪作业。

  4. 根据优先级和执行时间,雷达选择下一个作业。

假设驻留时间为10毫秒。在模拟开始时,雷达被配置为每次搜索一个波束。

rng (2018);当前时间= 0;Npulses = 10;numdwells = 200;dwelltime = 0.01;jobload。numdwells num_search_job = 0 (1);jobload。numdwells num_track_job = 0 (1);

您可以完整地运行该示例,以查看在执行期间动态更新的情节。在上面的两个图中,光束的颜色表示当前作业的类型:红色表示搜索,黄色表示确认,紫色表示跟踪。下面的两个图分别显示了两个目标的真实位置(三角形)、探测(圆形)和轨迹(正方形)。系统日志还显示在命令行中,以解释当前时刻的系统行为。接下来,该示例将展示模拟的几个关键时刻的更多细节。

模拟系统行为,直到它检测到第一个目标。模拟循环遵循前面的系统图。

dwell_idx =一14提供当前作业的调度程序[current_job, jobq] = currentRadarTask (jobq,当前时间);模拟接收到的I/Q信号[xsum, xdaz xdel mfradar] = generateEchos (mfradar env, current_job);信号处理器提取检测(检测、mfradar) = generateDetections (xsum、xdaz xdel, mfradar, current_job,当前时间);雷达管理器执行数据处理和更新航迹队列。[jobq, allTracks mfradar] = updateTrackAndJobQueue(检测、jobq mfradar current_job,当前时间,dwelltime);%的可视化helperSATTaskPlot (“更新”, current_job sceneplot maxrng、beamw tgtpos, allTracks, detection.Measurement);%更新时间tgtpos = env.TargetMotion (dwelltime-Npulses / mfradar.Wav.PRF);当前时间=当前时间+ dwelltime;记录资源分配如果比较字符串(current_job。JobType,“搜索”) jobload.num_search_job(drun_idx) = 1;其他的jobload.num_track_job (dwell_idx) = 1;结束结束
0.000000秒:搜索[-30.000000 0.000000]0.010000秒:搜索[-27.692308 0.000000]0.030000秒:搜索[- 25.384623 0.000000]0.040000秒:搜索[-20.76923 0.000000]0.050000秒:搜索[-18.461538 0.000000]0.060000秒:搜索[-16.153846 0.000000]0.070000秒:搜索[-13.846154 0.000000]0.080000秒:搜索[-11.538462 0.000000]0.090000秒:搜索[-9.230769 0.000000]0.100000秒:搜索[-6.923077 0.000000]0.110000秒:搜索[-4.615385 0.000000]0.120000秒:搜索[-2.307692 0.000000]0.130000秒:搜索[0.000000 0.000000]在29900.000000米探测到目标

如图所示,当雷达波束照射目标时,雷达得到探测。当这种情况发生时,雷达立即发送确认波束,以确保它不是一个错误的探测。

接下来,显示确认作业的结果。这个示例的其余部分展示了将模拟循环组合为系统模拟函数的简化代码。

[mfradar, env, jobq jobload,当前时间,tgtpos] = SATSimRun (...env, mfradar jobq jobload,当前时间,dwelltime, sceneplot, maxrng, beamw, tgtpos, 15日,15);
0.140000秒:确认[0.001804 0.006157]在29900.000000米处创建航道1

图中显示了确认梁。一旦确认检测,就为目标建立跟踪,并计划在短时间间隔后执行跟踪作业。

这一过程对每一个探测到的目标重复进行,直到重新访问时间,这时多功能雷达停止搜索序列并再次执行跟踪任务。

[mfradar, env, jobq jobload,当前时间,tgtpos] = SATSimRun (...env, mfradar jobq jobload,当前时间,dwelltime, sceneplot, maxrng, beamw, tgtpos, 16日25);
0.150000 sec:搜索[2.307692 0.000000]0.160000 sec:搜索[4.615385 0.000000]目标在49900.000000 m检测到0.170000 sec:确认[4.896994 0.014031]在49900.000000 m创建轨道2 0.180000 sec:搜索[6.923077 0.000000]0.190000 sec:搜索[9.230769 0.000000]0.200000 sec:搜索[11.538462 0.000000]0.210000 sec:搜索[13.846154 0.000000]0.230000 sec:搜索[16.153846 0.000000]0.240000 sec:轨道[0.000833 -0.000127]轨道1在29900.000000米

结果表明,仿真在轨道梁处停止。两个目标周围的放大图显示了基于探测和测量的轨迹是如何更新的。在执行跟踪作业期间,还将为下一次访问添加一个新的跟踪作业到作业队列中。

这个过程在每次驻留时重复。该模拟运行雷达系统2秒周期。过了一段时间,第二个目标在50公里外被探测到。基于此信息,雷达管理器减少系统需要跟踪第二个目标的频率。这一削减为其他更紧迫的需求腾出了资源。

[mfradar, env, jobq jobload,当前时间,tgtpos] = SATSimRun (...env, mfradar jobq jobload,当前时间,dwelltime, sceneplot, maxrng, beamw, tgtpos, 26日numdwells);
0.250000秒:搜索[20.769231 0.000000]0.260000秒:搜索[23.076923 0.000000]0.270000秒:轨道[4.882021 0.002546]轨道2在49900.000000米0.280000秒:搜索[25.384615 0.000000]0.290000秒:搜索[27.692308 0.000000]0.2940000秒:轨道[0.014417 0.015384]轨道1在29900.000000米0.70000秒:轨道[4.883901 0.012786]轨道2在49900.000000米0.40000秒:轨道[0.002694 0.009423]轨道1在29900.000000米0.70000秒:轨道[4.889519 -0.009622]轨道2在499.000000米0.540000秒:轨道[-0.003890 -0.006735]轨道1在29900.000000米0.570000秒:轨道[- 0.0095253 -0.023520]轨道2在29900.000000米0.640000秒:轨道[-0.009124 0.012105]轨道1在29900.000000米0.670000秒:轨道[4.908435 -0.012902]轨道2在49900.000000米0.740000秒:轨道[-0.014700 -0.007442]轨道1在29800.000000米0.770000秒:轨道[4.916246 -0.006127]轨道2在49900.000000米0.840000秒:轨道[0.002371 -0.007959]轨道1在29800.000000米0.870000秒:轨道[4.919202 0.000403]轨道2在29800.000000米0.940000秒:轨道[0.003877 -0.018467]轨道1在29800.000000米0.970000秒:轨道[4.931431 0.003165]轨道2在49900.000000米1.040000秒:轨道[0.002358 -0.007887]轨道1在29800.000000米1.070000秒:轨道[4.932988 -0.003006]轨道2在49900.000000米1.140000秒:轨道[0.000982 -0.003077]轨道1在29800.000000米1.170000秒:轨道[4.944549 -0.004130]轨道2在50000.000000米1.240000秒:轨道[-0.000250 -0.003156]轨道1在29800.000000米1.340000秒:轨道[0.000101 -0.005774]轨道1在29800.000000米1.440000秒:轨道[- 0.000461 -0.003104]轨道1在29800.000000米1.40000秒:轨道[-0.000965 -0.003565]轨道1在29800.000000米1.640000秒:轨道[-0.001041 -0.003305]轨道1在29800.000000米1.670000秒:轨道[4.979614 -0.000920]轨道2在50000.000000米1.740000秒:1.840000秒:轨道[-0.002676 -0.003713]轨道1在29800.000000米1.940000秒:轨道[-0.005176 -0.003055]轨道1在29800.000000米

资源分布分析

本节演示如何在不同任务之间分配雷达资源。这张图显示了这个例子中的多功能雷达系统是如何在搜索和跟踪之间分配资源的。

L = 10;searchpercent =总和(缓冲区(jobload.num_search_job, L, L - 1,“nodelay”)) / L;trackpercent =总和(缓冲区(jobload.num_track_job, L, L - 1,“nodelay”)) / L;图;阴谋(1:元素个数(searchpercent)) * L * dwelltime, [searchpercent (:) trackpercent (:)));包含(“时间(s)”);ylabel (的工作比例);标题(“搜索和跟踪之间的资源分配”);传奇(“搜索”“跟踪”“位置”“最佳”);网格

图中显示,在模拟开始时,所有的资源都花在搜索上。一旦探测到目标,雷达资源将分别被分成80%和20%用于搜索和跟踪。然而,一旦第二个目标离得更远,就会释放出更多的资源进行搜索。当再次跟踪第二个目标的时间到来时,跟踪负载会短暂增加。

总结

本实例介绍了多功能相控阵雷达系统中的资源管理和任务调度的概念。它表明,有了资源管理组件,雷达就像一个闭环系统。虽然本例中的多功能雷达只处理搜索和跟踪任务,但这个概念可以扩展到更实际的情况,其中还涉及其他功能,如自检和通信。

参考文献

Walter Weinstock,“多功能雷达的计算机控制”,实用相控阵天线系统莱克斯图书,1997年

附录

这些辅助函数为雷达资源管理工作流建模。

currentRadarTask

这个函数currentRadarTask比较搜索队列和跟踪队列中的作业,选择优先级最高的作业执行。

函数[currentjob,jobq] = currentRadarTask(jobq,current_time) searchq = jobq. searchqueue;trackq = jobq.TrackQueue;searchidx = jobq.SearchIndex;num_trackq_items = jobq.NumTrackJobs;更新搜索队列索引searchqidx =国防部(searchidx-1元素个数(searchq)) + 1;找到到期且具有最高优先级的跟踪作业。readyidx =找到([trackq (1: num_trackq_items) .Time] < =当前时间);[~, maxpidx] = max ([trackq (readyidx) .Priority]);taskqidx = readyidx (maxpidx);如果找到的轨道作业具有更高的优先级,则将其作为当前作业。%,并增加下一个搜索作业优先级,因为它被推迟了。否则,下一个到期的搜索作业就是当前作业。。如果~ isempty (taskqidx) & & trackq (taskqidx)。优先级> = searchq (searchqidx)。优先级currentjob = trackq(taskqidx);M = taskqidx+1:num_trackq_items trackq(M -1) = trackq(M);结束num_trackq_items = num_trackq_items-1;searchq (searchqidx)。优先级= searchq (searchqidx) .Priority + 100;其他的currentjob = searchq (searchqidx);searchidx = searchqidx + 1;结束jobq。SearchQueue = searchq;jobq。SearchIndex = searchidx;jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;

generateEchos

这个函数generateEchos模拟雷达接收到的目标回波的复(I/Q)基带表示。

函数[xrsint, xrdazint xrdelint mfradar] = generateEchos (mfradar env, current_job)%脉冲数和工作频率Npulses = 10;fc = mfradar.TxAnt.OperatingFrequency;m = 1: Npulses%传递权重w = mfradar.STV (fc, current_job.BeamDirection);%模拟回波推进(env.Scene);xr1 = mfradar.Radar (targetPoses (env.RadarPlatform) (m - 1) / mfradar.Wav.PRF,连词(w));%单脉冲[xrs, xrdaz xrdel] = mfradar.RxFeed (xr1 current_job.BeamDirection);%脉冲集成inuseflag = 0(大小(xr1, 1), 1);inuseflag(1:圆形(mfradar.Wav.DutyCycle / mfradar.Wav.PRF * mfradar.Wav.SampleRate)) = 1;如果m == 1 xrsint = mfradar.Rx(xrs,~(inuseflag>0));xrdazint = mfradar.Rx (xrdaz ~ (inuseflag > 0));xrdelint = mfradar.Rx (xrdel ~ (inuseflag > 0));其他的xrsint = xrsint + mfradar.Rx (xrs ~ (inuseflag > 0));xrdazint = xrdazint + mfradar.Rx (xrdaz ~ (inuseflag > 0));xrdelint = xrdelint + mfradar.Rx (xrdel ~ (inuseflag > 0));结束结束

generateDetections

这个函数generateDetections在回波上应用信号处理技术产生目标检测。

函数(检测、mfradar) = generateDetections (xrsint、xrdazint xrdelint, mfradar, current_job,当前时间)%计算检测门限nbw = mfradar.Rx.SampleRate / (mfradar.Wav.SampleRate / mfradar.Wav.SweepBandwidth);npower = noisepow (nbw mfradar.Rx.NoiseFigure mfradar.Rx.ReferenceTemperature);pfa = 1 e-6;阈值= npower * db2pow(npwgnthresh(pfa,1,“非相干”));arraysz = mfradar.TxAnt.Sensor.Size (1);ant_snrgain = pow2db (arraysz ^ 2);mfcoeff = getMatchedFilter (mfradar.Wav);mfgain = pow2db(规范(mfcoeff) ^ 2);阈值=阈值* db2pow(mfgain+2*ant_snrgain);阈值= sqrt(阈值);tgrid = unigrid (0,1 / mfradar.Wav.SampleRate, 1 / mfradar.Wav.PRF,“()”);大门= mfradar.TxAnt.PropagationSpeed * tgrid / 2;匹配滤波和时变增益xrsmf = mfradar.TVG (mfradar.MF (xrsint));%通过单脉冲进行距离和角度估计检测如果Any (abs(xrsmf)>阈值)[~,tgtidx] = findpeaks(abs(xrsmf),“MinPeakHeight”阈值,...“Sortstr”“下”“NPeaks”1);rng_est =大门(tgtidx(元素个数(mfcoeff) 1));ang_est = mfradar.DOA (xrsint (tgtidx-1) xrdazint (tgtidx-1) xrdelint (tgtidx-1) current_job.BeamDirection);%形成检测对象。measNoise = diag([0.1, 0.1, 150].^2);%测量噪声矩阵检测= objectDetection(当前时间,...[ang_est (1); ang_est (2); rng_est),“MeasurementNoise”measNoise,...“MeasurementParameters”结构(“帧”“球”“HasVelocity”、假));其他的检测= objectDetection.empty;结束如果|| strcmp(current_job. Current_time < 0.3)JobType,“跟踪”)流(' \ n % f秒:\ t % s \ [% % f]”、当前时间、current_job.JobType current_job.BeamDirection (1),...current_job.BeamDirection (2));结束

updateTrackAndJobQueue

这个函数updateTrackAndJobQueue跟踪探测,然后将跟踪传递给雷达管理器以更新跟踪任务队列。

函数[jobq,allTracks,mfradar] = updateTrackAndJobQueue(detection,jobq,mfradar,current_job,current_time, neighborinterval) trackq = jobq. trackqueue;num_trackq_items = jobq.NumTrackJobs;%执行当前作业开关current_job。JobType情况下“搜索”对于搜索工作,如果有发现,建立暂定。跟踪并安排确认作业。如果~isempty(detection) ang_est = detect . measurement (1:2);rng_est = detection.Measurement (3);如果~ mfradar。IsTrackerInitialized [~,~,allTracks] = mfradar.Tracker(detection,current_time,uint32([]));mfradar。IsTrackerInitialized = true;其他的[~, ~, allTracks] = mfradar.Tracker(检测、当前时间、uint32 ([]));结束num_trackq_items = num_trackq_items + 1;trackq (num_trackq_items) =结构(“JobType”“确认”“优先”, 2000,...“BeamDirection”ang_est,“WaveformIndex”, 1“时间”,当前时间+ dwellinterval,...“范围”rng_est,“TrackID”allTracks (~ [allTracks.IsConfirmed]) .TrackID);如果|| strcmp(current_job. Current_time < 0.3)JobType,“跟踪”)流('\目标在%f m检测到', rng_est);结束其他的allTracks = [];结束情况下“确认”对于确认作业,如果检测确认,则建立跟踪。%,并创建一个对应于重访时间的跟踪作业如果~isempty(detection) trackid = current_job.TrackID;[~, ~, allTracks] = mfradar.Tracker(检测、当前时间、trackid);rng_est = detection.Measurement (3);如果Rng_est >= 50e3 updateinterval = 0.5;其他的updateinterval = 0.1;结束revisit_time =当前时间+ updateinterval;predictedTrack = predictTracksToTime (mfradar.Tracker trackid revisit_time);xpred = predictedTrack。状态([1 3 5]);[phipred, thetapred, rpr) = cart2sph (xpred (1) xpred (2), xpred (3));num_trackq_items = num_trackq_items + 1;trackq (num_trackq_items) =结构(“JobType”“跟踪”“优先”, 3000,...“BeamDirection”rad2deg ([phipred; thetapred]),“WaveformIndex”, 1“时间”revisit_time,...“范围”弹性分组环,“TrackID”, trackid);如果|| strcmp(current_job. Current_time < 0.3)JobType,“跟踪”)流('\tCreated track %d at %f m'、trackid rng_est);结束其他的allTracks = [];结束情况下“跟踪”对于轨迹作业,如果检测到,更新轨迹和计划一个与重访时间相对应的跟踪作业。。如果有%是没有检测,提前预测和安排跟踪工作%目标不会丢失。如果~isempty(detection) trackid = current_job.TrackID;[~, ~, allTracks] = mfradar.Tracker(检测、当前时间、trackid);rng_est = detection.Measurement (3);如果Rng_est >= 50e3 updateinterval = 0.5;其他的updateinterval = 0.1;结束revisit_time =当前时间+ updateinterval;predictedTrack = predictTracksToTime (mfradar.Tracker trackid revisit_time);xpred = predictedTrack。状态([1 3 5]);[phipred, thetapred, rpr) = cart2sph (xpred (1) xpred (2), xpred (3));num_trackq_items = num_trackq_items + 1;trackq (num_trackq_items) =结构(“JobType”“跟踪”“优先”, 3000,...“BeamDirection”rad2deg ([phipred; thetapred]),“WaveformIndex”, 1“时间”revisit_time,...“范围”弹性分组环,“TrackID”, trackid);如果|| strcmp(current_job. Current_time < 0.3)JobType,“跟踪”)流('\tTrack %d at %f m'、trackid rng_est);结束其他的trackid = current_job.TrackID;[~, ~, allTracks] = mfradar.Tracker(检测、当前时间、trackid);updateinterval = 0.1;%回顾更早revisit_time =当前时间+ updateinterval;predictedTrack = predictTracksToTime (mfradar.Tracker trackid revisit_time);xpred = predictedTrack。状态([1 3 5]);[phipred, thetapred, rpr) = cart2sph (xpred (1) xpred (2), xpred (3));num_trackq_items = num_trackq_items + 1;trackq (num_trackq_items) =结构(“JobType”“跟踪”“优先”, 3000,...“BeamDirection”rad2deg ([phipred; thetapred]),“WaveformIndex”, 1“时间”revisit_time,...“范围”弹性分组环,“TrackID”, trackid);如果|| strcmp(current_job. Current_time < 0.3)JobType,“跟踪”)流('没有发现,轨迹%d预测', current_job.TrackID);结束结束结束jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;
Baidu
map