主要内容

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

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

这个例子需要相控阵系统工具箱™。

雷达的配置

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

Fc = 2e9;%雷达载频(Hz)C = 3e8;%传播速度(m/s)Lambda = c/fc;%雷达波长(m)Maxrng = 100e3;%最大范围(m)Minrng = 2e3;%最小量程(m)

波形

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

Bw = 1e6;Fs = 1.5*bw;PRF = 1/range2time(maxrng,c);Dcycle = 0.1;Wav =相位。LinearFMWaveform (“SampleRate”fs,“DurationSpecification”的工作周期“DutyCycle”dcycle,脉冲重复频率的脉冲重复频率,“SweepBandwidth”bw);

计算波形可实现的距离分辨率。

Rngres = bw2range(bw,c)
Rngres = 150

雷达天线

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

Arraysz = 50;蚂蚁=分阶段的。(精“大小”arraysz,“ElementSpacing”λ/ 2);ant. element . backperplexed = true;Arraystv = phase。SteeringVector (“SensorArray”蚂蚁,“PropagationSpeed”c);散热器=阶段性的。散热器(“OperatingFrequency”足球俱乐部,“PropagationSpeed”c“传感器”蚂蚁,“WeightsInputPort”,真正的);收集器=分阶段。收集器(“OperatingFrequency”足球俱乐部,“PropagationSpeed”c“传感器”,蚂蚁);(lambda/(arraysz*lambda/2))
波束= 2.2918

发射器和接收器

利用检测要求推导出合适的发射功率。假设接收前置放大器上的噪声系数为7db。

Pd = 0.9;%检测概率Pfa = 1e-6;%虚警概率Snr_min = albersheim(p, p, 1);Ampgain = 20;TGTRCS = 1;Ant_snrgain = pow2db(arraysz^2);power = radareqpow(lambda,maxrng,snr_min,wav.)脉冲宽度,RCS的tgtrcs,“获得”ampgain + ant_snrgain);Tx =相位。发射机(“PeakPower”企业可持续,“获得”ampgain,“InUseOutputPort”,真正的);Rx =相位。ReceiverPreamp (“获得”ampgain,“NoiseFigure”7“EnableInputPort”,真正的);

信号处理

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

%匹配过滤器mfcoeff = getMatchedFilter(wav);Mf =相位。MatchedFilter (“系数”mfcoeff,“GainOutputPort”,真正的);%时变增益Tgrid = unigrid(0,1/fs,1/prf,“()”);Rgates = c*tgrid/2;Rngloss = 2*fspl(rgates,lambda);reffloss = 2*fspl(maxrng,lambda);分阶段的。TimeVaryingGain (“RangeLoss”rngloss,“ReferenceLoss”, refloss);%单脉冲Monfeed =阶段性。MonopulseFeed (“SensorArray”蚂蚁,“PropagationSpeed”c“OperatingFrequency”足球俱乐部,“SquintAngle”1);monest = getMonopulseEstimator(monfeed);

数据处理

检测到的数据被输入跟踪器,跟踪器执行几个操作。跟踪器维护一个轨迹列表,即感兴趣区域中目标状态的估计。如果不能将检测分配给跟踪器已维护的任何跟踪,则跟踪器发起一个新跟踪。在大多数情况下,新轨道代表的是真目标还是假目标是不清楚的。首先,以暂定状态创建轨道。如果探测到足够多的信号,就可以确认航迹。类似地,如果没有检测被分配到一个轨道,则该轨道是滑行的(预测而不校正)。如果曲目有几个错过的更新,跟踪器删除曲目。

多功能雷达使用跟踪器,该跟踪器使用全局最近邻(GNN)算法将探测到的目标与轨迹联系起来。

跟踪器= trackernn“FilterInitializationFcn”@initMPARGNN,“ConfirmationThreshold”3 [2],“DeletionThreshold”5,“HasDetectableTrackIDsInput”,真的,“AssignmentThreshold”, 100,“MaxNumTracks”2,“MaxNumSensors”1);

将所有雷达组件组合在一个结构中,以便在仿真回路中更容易参考。

mfradar。Tx = Tx;mfradar。Rx = Rx;mfradar。TxAnt =散热器;mfradar。RxAnt = collector;mfradar.Wav = wav;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 = size(tgtpos,2);Tgtmotion = phase。平台(“InitialPosition”tgtpos,“速度”, tgtvel);目标=阶段性的。RadarTarget (“MeanRCS”ntgt tgtrcs *的(1),“OperatingFrequency”、fc);

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

通道=相位。空闲空间(“SampleRate”fs,“TwoWayPropagation”,真的,“OperatingFrequency”、fc);

将目标和传播信道组合在一个结构中,以便在仿真环路中更容易参考。

env。Target =目标;env。TargetMotion = tgtmotion;env。Channel =通道;

雷达资源管理

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

搜索任务

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

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

Scanregion = [- 30,30,0,20];Azscanspan = diff(scanregion(1:2));Numazscan = ceil(azscanspan/beam);Azscanangles = linspace(scanregion(1),scanregion(2),numazscan);Elscanspan = diff(scanregion(3:4));Numelscan = ceil(elscanspan/beam);Elscanangles = linspace(scanregion(3),scanregion(4),numelscan);[elscangrid,azscangrid] = meshgrid(elscanangles,azscanangles);Scanangles = [azscangrid(:) elscangrid(:)].';

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

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

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

Searchq = struct(“JobType”“搜索”“BeamDirection”num2cell (scanangles 1),“优先”, 1000,“WaveformIndex”1);Current_search_idx = 1;

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

disp (searchq (current_search_idx))
JobType: 'Search' BeamDirection: [2x1 double] Priority: 1000 waveformmindex: 1

跟踪任务

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

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

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

jobq。SearchQueue = searchq;jobq。搜索索引= current_search_idx;jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;

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

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

任务调度

在本例中,为简单起见,多功能雷达在短时间内(通常称为驻留)只执行一种类型的工作,但可以在每次驻留开始时切换任务。对于每个驻留,雷达查看所有即将执行的任务,并选择具有最高优先级的任务。因此,被推迟的作业现在将具有更高的优先级,并且更有可能在下一个驻留中执行。

模拟

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

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

雷达管理器操作的逻辑显示在这个流程图中,并在这些步骤中进行了描述。

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

  2. 如果目标在探测中存在,雷达在同一方向调度确认作业,以确保该目标的存在不是假警报。确认任务的优先级高于搜索任务,但低于跟踪任务。如果检测得到确认,则建立跟踪,并创建跟踪作业,以便在给定的重访时间后执行。如果检测未被确认,则认为原检测为虚警,不创建跟踪。

  3. 如果当前作业是航迹作业,雷达将执行检测,更新航迹,并创建未来的航迹作业。

  4. 雷达根据任务的优先级和执行时间选择下一个任务。

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

rng (2018);Current_time = 0;n脉冲= 10;Numdwells = 200;停留时间= 0.01;jobload。Num_search_job = 0 (1,numdwells);jobload。Num_track_job = 0 (1,numdwells);

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

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

Dwell_idx = 1:14%调度器提供当前作业[current_job,jobq] = getCurrentJob(jobq,current_time);模拟接收到的I/Q信号[xsum,xdaz,xdel,mfradar] = generateEcho(mfradar,env,current_job);%信号处理器提取检测[detection,mfradar] = generateDetection(xsum,xdaz,xdel,mfradar,current_job,current_time);雷达管理器执行数据处理和更新跟踪队列[jobq,allTracks,mfradar] = updateTrackAndJob(detection,jobq,mfradar,current_job,current_time,dwelltime);%的可视化helperMPARTaskPlot (“更新”, current_job sceneplot maxrng、beamw tgtpos, allTracks, detection.Measurement);%更新时间tgtpos = env.TargetMotion(dwelling - n脉冲/mfradar. wave . prf);Current_time = Current_time +dwelltime;%记录资源分配如果比较字符串(current_job。JobType,“搜索”) jobload.num_search_job(dwell_idx) = 1;其他的Jobload.num_track_job (dwell_idx) = 1;结束结束
0.000000秒:搜索[-30.000000 0.000000]0.010000秒:搜索[-27.692308 0.000000]0.020000秒:搜索[-23.076923 0.000000]0.040000秒:搜索[-18.461538 0.000000]0.060000秒:搜索[-16.153846 0.000000]0.070000秒:搜索[-13.846154 0.000000]0.080000秒:搜索[-9.230769 0.000000]0.0100000秒:搜索[-6.923077 0.000000]0.110000秒:搜索[- 9.2307000000]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,current_time,tgtpos] = MPARSimRun(env, mfradar jobq jobload,当前时间,dwelltime, sceneplot, maxrng, beamw, tgtpos, 15日,15);
0.140000秒:确认[-0.000586 -0.000034]创建轨道1在29900.000000米

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

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

[mfradar,env,jobq,jobload,current_time,tgtpos] = MPARSimRun(env, mfradar jobq jobload,当前时间,dwelltime, sceneplot, maxrng, beamw, tgtpos, 16日25);
0.15万秒:搜索[2.307692 0.000000]0.16万秒:搜索[4.615385 0.000000]目标检测到在49900.000000米0.17万秒:确认[4.881676 0.000739]创建轨道2在49900.000000米0.18万秒:搜索[6.923077 0.000000]0.190000秒:搜索[9.230769 0.000000]0.200000秒:搜索[11.538462 0.000000]0.210000秒:搜索[13.846154 0.000000]0.220000秒:搜索[16.153846 0.000000]0.230000秒:搜索[18.461538 0.000000]0.240000秒:轨道[-0.000399 0.000162]轨道1在29900.000000米

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

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

[mfradar,env,jobq,jobload,current_time,tgtpos] = MPARSimRun(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.882892 -0.000030]轨道2:搜索[25.384615 0.000000]0.290000秒:轨道[27.692308 0.000000]0.340000秒:轨道[0.001390 0.000795]轨道1在29900.000000 m 0.40000秒:轨道[4.895153 0.000529]轨道2在49900.000000 m 0.440000秒:轨道[0.000284 0.000446]轨道1在29900.000000 m 0.470000秒:轨道[4.909764 -0.000394]轨道2以29800.000000米0.540000秒:轨道[0.000455 -0.000130]轨道1以29800.000000米0.570000秒:轨道[4.921876 -0.000210]轨道2以29800.000000米0.640000秒:轨道[0.000181 -0.000020]轨道1以29800.000000米0.640000秒:轨道[4.932942 -0.000988]轨道2以49800.000000米0.740000秒:轨道[0.000348 0.000212]轨道1以29800.000000米0.770000秒:轨道[4.944255 -0.001073]轨道2以49900.000000米0.840000秒:轨道[4.944255 -0.001073]轨道2以49900.000000米0.840000秒:轨道[0.000171 -0.000125]轨道1以29800.000000米0.870000秒:轨道[4.954431 -0.000943]轨道2以500.000000米0.940000秒:轨道[0.000296 -0.000288]轨道1以29800.000000米1.040000秒:轨道[0.000108 -0.000147]轨道1以29800.000000米1.140000秒:轨道[-0.000096 -0.000179]轨道1以29800.000000米1.340000秒:轨道[-0.000110 -0.000315]轨道1以29800.000000米1.340000秒:轨道[-0.000291 -0.000515]轨道1以29800.000000米1.370000秒:轨道[-0.000291 -0.000515]轨道1以29800.000000米1.370000秒:轨道[5.005679 -0.000877]轨道2在500.000000米1.440000秒:轨道[-0.000191 -0.000592]轨道1在29800.000000米1.640000秒:轨道[-0.000140 -0.000787]轨道1在29700.000000米1.740000秒:轨道[-0.000001 -0.000714]轨道1在29700.000000米1.840000秒:轨道[-0.000001 -0.000714]轨道1在29700.000000米1.870000秒:轨道[5.057762 0.000107]轨道2在50100.000000米1.940000秒:轨道[5.005679 -0.000877]轨道2在50100.000000米1.940000秒:轨道[0.000067 -0.000511]轨道1在29700.000000米

资源分布分析

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

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

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

总结

本实例介绍了多功能相控阵雷达系统中资源管理和任务调度的概念。结果表明,在资源管理组件的作用下,雷达系统是一个闭环系统。虽然本例中的多功能雷达仅处理搜索和跟踪任务,但该概念可以扩展到更现实的情况,其中还涉及其他功能,如自检和通信。

参考文献

[1] Walter Weinstock,“多功能雷达的计算机控制”,实用相控阵天线系统, Lex Book, 1997

附录

这些辅助函数对雷达资源管理工作流程进行建模。

getCurrentJob

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

函数[currentjob,jobq] = getCurrentJob(job,current_time) searchq = jobq. searchqueue;trackq = jobq.TrackQueue;searchidx = jobq.SearchIndex;num_trackq_items = jobq.NumTrackJobs;%更新搜索队列索引Searchqidx = mod(searchidx-1, nummel (searchq))+1;%查找已到期且具有最高优先级的跟踪作业readyidx = find([trackq(1:num_trackq_items).Time]<=current_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;searchq (searchqidx)。优先级= searchq(searchqidx).Priority+100;其他的Currentjob = searchq(searchqidx);Searchidx = searchqidx+1;结束jobq。SearchQueue = searchq;jobq。搜索索引= searchidx;jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;

generateEcho

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

函数[xrsint,xrdazint,xrdelint,mfradar] = generateEcho(mfradar,env,current_job)雷达位置%Radarpos = [0;0;0];Radarvel = [0;0;0];%脉冲数和工作频率n脉冲= 10;fc = mfradar.TxAnt.OperatingFrequency;m = 1: n脉冲%波形x = mfradar.Wav();%更新目标运动[tgtpos,tgtvel] = env.TargetMotion(1/mfradar. wave . prf);[~,tgtang] = rangeangle(tgtpos);%传输[xt,inuseflag] = mfradar.Tx(x);w = mfradar.STV(fc,current_job.BeamDirection);xt = mfradar.TxAnt(xt,tgtang,conj(w));%传播xp = env.Channel(xt,radarpos,tgtpos,radarvel,tgtvel);xp = env.Target(xp);%接收和单脉冲xr = mfradar.RxAnt(x, x);[xrs,xrdaz,xrdel] = mfradar.RxFeed(xr,current_job.BeamDirection);%脉冲积分如果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));结束结束

generateDetection

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

函数[detection,mfradar] = generateDetection(xrsint,xrdazint,xrdelint,mfradar,current_job,current_time)%计算检测阈值nbw = mfradar.Rx.SampleRate/(mfradar. wave . samplerate /mfradar. wave . sweepbandwidth);npower = noisepow(nbw,mfradar.Rx.NoiseFigure,mfradar.Rx.ReferenceTemperature);Pfa = 1e-6;阈值= npower * db2pow(npwgnthresh(pfa,1))“非相干”));arraysz = mfradar.TxAnt.Sensor.Size(1);Ant_snrgain = pow2db(arraysz^2);mfcoeff = getMatchedFilter(mfradar.Wav);Mfgain = pow2db(norm(mfcoeff)^2);Threshold = Threshold * db2pow(mfgain+2*ant_snrgain);阈值= sqrt(阈值);tgrid = unigrid(0,1/mfradar. wave . samplerate,1/mfradar. wave . prf;“()”);rgates = mfradar.TxAnt.PropagationSpeed*tgrid/2;%匹配滤波和时变增益xrsmf = mfradar.TVG(mfradar.MF(xrsint));%检测距离和角度估计通过单脉冲如果任何(abs(xrsmf)>阈值)[~,tgtidx] = findpeaks(abs(xrsmf),“MinPeakHeight”阈值,“Sortstr”“下”“NPeaks”1);Rng_est = rgates(tgtidx-(numel(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);%测量噪声矩阵detection = objectDetection(current_time,[ang_est (1); ang_est (2); rng_est),“MeasurementNoise”measNoise,“MeasurementParameters”结构(“帧”“球”“HasVelocity”、假));其他的detection = objectDetection.empty;结束如果Current_time < 0.3 || strcmp(current_job. 0)JobType,“跟踪”)流(“\n%f秒:\t%s\t[%f %f]”、当前时间、current_job.JobType current_job.BeamDirection (1),current_job.BeamDirection (2));结束

updateTrackAndJob

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

函数[jobq,allTracks,mfradar] = updateTrackAndJob(detection,jobq,mfradar,current_job,current_time,dwellinterval) trackq = jobq. trackqueue;num_trackq_items = jobq.NumTrackJobs;%执行当前作业开关current_job。JobType情况下“搜索”对于搜索工作,如果有检测,建立临时跟踪和安排确认作业如果~isempty(detection) ang_est = detection. measurement (1:2);rng_est = detection.Measurement(3);如果~ mfradar。IsTrackerInitialized [~,~,allTracks] = mfradar.Tracker(detection,current_time,uint32([]));mfradar。IsTrackerInitialized = true;其他的[~,~,allTracks] = mfradar.Tracker(detection,current_time,uint32([]));结束Num_trackq_items = Num_trackq_items +1;Trackq (num_trackq_items) = struct(“JobType”“确认”“优先”, 2000,“BeamDirection”ang_est,“WaveformIndex”, 1“时间”,当前时间+ dwellinterval,“范围”rng_est,“TrackID”allTracks (~ [allTracks.IsConfirmed]) .TrackID);如果Current_time < 0.3 || strcmp(current_job. 0)JobType,“跟踪”)流('在%f m处检测到目标', rng_est);结束其他的allTracks = [];结束情况下“确认”%对于确认作业,如果检测得到确认,则建立跟踪%并创建与重访时间相对应的跟踪作业如果~isempty(detection) trackid = current_job.TrackID;[~,~,allTracks] = mfradar.Tracker(detection,current_time,trackid);rng_est = detection.Measurement(3);如果Rng_est >= 50e3 updateinterval = 0.5;其他的Updateinterval = 0.1;结束更新时间= current_time+updateinterval;predictedTrack = predictTracksToTime(mfradar.Tracker,trackid,revisit_time);xpred = predictedTrack。State([1 3 5]);[phpred,thetapred,rpred] = car2sph (xpred(1),xpred(2),xpred(3));Num_trackq_items = Num_trackq_items +1;Trackq (num_trackq_items) = struct(“JobType”“跟踪”“优先”, 3000,“BeamDirection”rad2deg ([phipred; thetapred]),“WaveformIndex”, 1“时间”revisit_time,“范围”弹性分组环,“TrackID”, trackid);如果Current_time < 0.3 || strcmp(current_job. 0)JobType,“跟踪”)流(' '创建轨道%d在%f m' '、trackid rng_est);结束其他的allTracks = [];结束情况下“跟踪”%对于跟踪作业,如果有检测,则更新跟踪和%安排与重访时间相对应的跟踪作业。如果有%是没有检测,预测和调度的轨道作业更快,所以%目标未丢失。如果~isempty(detection) trackid = current_job.TrackID;[~,~,allTracks] = mfradar.Tracker(detection,current_time,trackid);rng_est = detection.Measurement(3);如果Rng_est >= 50e3 updateinterval = 0.5;其他的Updateinterval = 0.1;结束更新时间= current_time+updateinterval;predictedTrack = predictTracksToTime(mfradar.Tracker,trackid,revisit_time);xpred = predictedTrack。State([1 3 5]);[phpred,thetapred,rpred] = car2sph (xpred(1),xpred(2),xpred(3));Num_trackq_items = Num_trackq_items +1;Trackq (num_trackq_items) = struct(“JobType”“跟踪”“优先”, 3000,“BeamDirection”rad2deg ([phipred; thetapred]),“WaveformIndex”, 1“时间”revisit_time,“范围”弹性分组环,“TrackID”, trackid);如果Current_time < 0.3 || strcmp(current_job. 0)JobType,“跟踪”)流(' ' ' ' ' ' ' ' ' ' '、trackid rng_est);结束其他的trackid = current_job.TrackID;[~,~,allTracks] = mfradar.Tracker(detection,current_time,trackid);Updateinterval = 0.1;%更早重访更新时间= current_time+updateinterval;predictedTrack = predictTracksToTime(mfradar.Tracker,trackid,revisit_time);xpred = predictedTrack。State([1 3 5]);[phpred,thetapred,rpred] = car2sph (xpred(1),xpred(2),xpred(3));Num_trackq_items = Num_trackq_items +1;Trackq (num_trackq_items) = struct(“JobType”“跟踪”“优先”, 3000,“BeamDirection”rad2deg ([phipred; thetapred]),“WaveformIndex”, 1“时间”revisit_time,“范围”弹性分组环,“TrackID”, trackid);如果Current_time < 0.3 || strcmp(current_job. 0)JobType,“跟踪”)流(“未检测到,预测轨道%d”, current_job.TrackID);结束结束结束jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;