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

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

此示例要求相控阵系统工具箱™。

雷达的配置

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

fc = 2 e9;%雷达的载波频率(Hz)的C = 3E8;传播速度(m/s)拉姆达= C / FC;%雷达波长(μm)maxrng = 100e3;最大射程(m)minrng = 2E3;%最小范围(M)

波形

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

BW = 1E6;FS = 1.5 * BW;PRF = 1 / range2time(maxrng,C);dcycle = 0.1;WAV = phased.LinearFMWaveform(“SampleRate”fs,...'DurationSpecification''占空比''占空比',dcycle,...'PRF',PRF,'SweepBandwidth',BW);

计算波形可以达到的距离分辨率。

rngres = bw2range (bw c)
rngres = 150

雷达天线

多功能雷达装备有相控阵,可以以电子方式扫描雷达在空间波束。使用与由半波长分离,以达到约2度的半功率波束宽度的元件50通过-50矩形阵列。

arraysz = 50;蚂蚁= phased.URA(“大小”,arraysz,“ElementSpacing”,λ-/ 2);ant.Element.BackBaffled = TRUE;arraystv = phased.SteeringVector('SensorArray',蚂蚁,'PropagationSpeed'c);散热器= phased.Radiator (“OperatingFrequency”,FC,...'PropagationSpeed', C,'传感器',蚂蚁,“WeightsInputPort”,真正的);集电极= phased.Collector(“OperatingFrequency”,FC,...'PropagationSpeed', C,'传感器',蚂蚁);beamw = rad2deg(λ/ (arraysz *λ/ 2))
beamw = 2.2918

发射器和接收

使用检测的要求,取得适当的发射功率。假定在接收前置放大器的噪声系数为7dB。

PD = 0.9;检测的概率%pfa = 1 e-6;%误报概率snr_min = albersheim(PD,PFA,1);ampgain = 20;tgtrcs = 1;ant_snrgain = pow2db (arraysz ^ 2);ppower = radareqpow(拉姆达,maxrng,snr_min,wav.PulseWidth,...'RCS',tgtrcs,“获得”ampgain + ant_snrgain);tx = phased.Transmitter ('峰值功率',ppower,“获得”,ampgain,'InUseOutputPort',真正的);rx = phased.ReceiverPreamp (“获得”,ampgain,“NoiseFigure”,7,'EnableInputPort',真正的);

信号处理

多功能雷达应用的操作序列,包括匹配滤波,随时间变化的增益,单脉冲,并检测,所接收到的信号,以产生检测到的目标的距离和角度测量。

%匹配滤波器mfcoeff = getMatchedFilter (wav);mf = phased.MatchedFilter (“系数”,mfcoeff,'GainOutputPort',真正的);%时变增益tgrid = unigrid(0,1 / FS,1 / PRF,'[)');大门= c * tgrid / 2;rngloss = 2 * fspl(大门,λ);refloss = 2 * fspl (maxrng,λ);tvg = phased.TimeVaryingGain (“RangeLoss”,rngloss,'ReferenceLoss',refloss);单脉冲%monfeed = phased.MonopulseFeed ('SensorArray',蚂蚁,'PropagationSpeed',C,...“OperatingFrequency”,FC,“SquintAngle”1);我= getMonopulseEstimator (monfeed);

数据处理

该检测被送入一个跟踪器,其执行多个操作。跟踪器维护的曲目列表,即,在感兴趣的区域目标状态的估计。如果检测不能分配给已经被跟踪维护的任何跟踪,跟踪器启动一个新的轨道。在大多数情况下,无论是新的轨迹表示真正的目标还是假目标尚不清楚。起初,轨道用试探性的状态产生。如果获得足够的检测,赛道变得证实。类似地,如果没有检测被分配给一个轨道,所述轨道被设置为惯性(没有校正预测的)。如果轨道有一些错过更新,跟踪器删除曲目。

多功能雷达采用的是检测到轨道同伙使用全局最近邻(GNN)算法的跟踪器。

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

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

mfradar.Tx = TX;mfradar.Rx = RX;mfradar.TxAnt =散热器;mfradar.RxAnt =收集器;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公里。这两个目标为1万平方米RCS。

%定义目标。tgtpos = [29875 49637;0 4225;0 0];tgtvel = [-100 120;0 100;0 0];ntgt =尺寸(tgtpos,2);tgtmotion = phased.Platform('初始位置',tgtpos,'速度',tgtvel);目标= phased.RadarTarget('MeanRCS'ntgt tgtrcs *的(1),“OperatingFrequency”,FC);

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

信道= phased.FreeSpace(“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 =小区(azscanspan / beamw);azscanangles = linspace(scanregion(1),scanregion(2),numazscan);elscanspan = DIFF(scanregion(3:4));numelscan =小区(elscanspan / beamw);elscanangles = linspace(scanregion(3),scanregion(4),numelscan);[elscangrid,azscangrid] = meshgrid(elscanangles,azscanangles);scanangles = [azscangrid(:) elscangrid(:)]'。

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

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

搜索光束被传送的一个处顺序直到整个搜索区域被覆盖的时间。一旦整个搜索区域覆盖,雷达重复搜索序列。该搜索是沿着方位角方向进行,一个仰角的时间。搜索任务通常包含在作业队列。

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

队列中的每个作业指定的作业类型,以及光束的指向。它还包含作业的优先级值。该优先级值由作业类型来确定。本例使用的优先级为寻找工作机会的值1000。

DISP(SEARCHQ(current_search_idx))
优先级:1000 WaveformIndex: 1

跟踪任务

不同于搜索任务,跟踪任务不能计划。只有当通过搜索任务或当目标已经追踪检测的目标是创建跟踪任务。跟踪任务是获取创建,并根据不断变化的情况下执行的动态任务。类似的搜索任务,跟踪任务的作业队列还管理。

trackq(10)=结构(“JobType”,[]'BeamDirection',[]'优先',3000,“WaveformIndex”,[]...'时间',[]'范围',[]'的TrackID',[]);num_trackq_items = 0;DISP(trackq(1))
工作类型:[]BeamDirection:[]优先级:[]WaveformIndex:[]时间:[]范围:[]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);CURRENT_TIME = 0;NPULSES = 10;numdwells = 200;dwelltime = 0.01;jobload.num_search_job =零(1,numdwells);jobload.num_track_job =零(1,numdwells);

您可以在全部运行示例看情节执行过程中动态地更新。在顶部的两个地块,梁的颜色显示哪些当前作业:红色搜索,黄色代表确认,紫色的轨道。底部两个图分别示出了两个目标的真实位置(三角形),检测(圆圈),轨道(正方形)。系统还会记录显示在命令行解释当前时刻的系统行为。接下来,对模拟的几个关键时刻的例子显示了更多的细节。

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

对于dwell_idx = 1:14提供当前作业的调度程序[current_job, jobq] = getCurrentJob (jobq,当前时间);%模拟所接收的I / Q信号[XSUM,xdaz,XDEL,mfradar] = generateEcho(mfradar,ENV,current_job);%的信号处理器以提取检测[检测,mfradar] = generateDetection(XSUM,xdaz,XDEL,mfradar,current_job,CURRENT_TIME);%雷达管理器来执行数据处理和更新轨道队列[jobq,allTracks,mfradar] = updateTrackAndJob(检测,jobq,mfradar,current_job,CURRENT_TIME,dwelltime);%的可视化helperMPARTaskPlot (“更新”,current_job sceneplot maxrng、beamw tgtpos, allTracks, detection.Measurement);% 更新时间tgtpos = env.TargetMotion (dwelltime-Npulses / mfradar.Wav.PRF);当前时间=当前时间+ dwelltime;%记录资源分配如果STRCMP(current_job.JobType,'搜索') jobload.num_search_job(resident _idx) = 1;其他jobload.num_track_job(dwell_idx)= 1;结束结束
0.000000秒:搜索[-30.000000 - 0.000000]0.010000秒:[-27.692308 - 0.000000]0.020000秒搜索:搜索0.030000秒(-25.384615 - 0.000000):[-23.076923 - 0.000000]0.040000秒搜索:搜索0.050000秒(-20.769231 - 0.000000):[-18.461538 - 0.000000]0.060000秒搜索:搜索0.070000秒(-16.153846 - 0.000000):[-13.846154 - 0.000000]0.080000秒搜索:搜索0.090000秒(-11.538462 - 0.000000):[-9.230769 - 0.000000]0.100000秒搜索:搜索0.110000秒(-6.923077 - 0.000000):搜索[-4.615385 0.000000]0.12万秒:搜索[-2.307692 0.000000]0.13万秒:搜索[0.000000 0.000000]目标探测高度29900.000000米

如所预期的,该雷达获取的检测时的雷达波束照射目标,如该图所示。发生这种情况时,雷达立即发送一个确认光束,以确保它是不是一个错误检测。

接下来,显示了确认工作的结果。的这个例子中示出了简化的代码,结合了模拟循环到系统模拟功能的其余部分。

[mfradar, env, jobq jobload,当前时间,tgtpos] = MPARSimRun (...mfradar,ENV,jobq,jobload,CURRENT_TIME,dwelltime,sceneplot,maxrng,beamw,tgtpos,15,15);
0.140000秒:确认[-0.000586 -0.000034]创建的轨道1在29900.000000米

图中现在显示的确认光束。一旦检测证实,轨道,建立了目标和跟踪工作计划短的时间间隔后执行。

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

[mfradar, env, jobq jobload,当前时间,tgtpos] = MPARSimRun (...env, mfradar jobq jobload,当前时间,dwelltime, sceneplot, maxrng, beamw, tgtpos, 16日25);
0.150000秒:检索[2.307692 0.000000] 0.160000秒:检索[4.615385 0.000000]目标在49900.000000米0.170000秒检测:确认[4.881676 0.000739]创建的轨道2在49900.000000米0.180000秒:检索[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,当前时间,tgtpos] = MPARSimRun (...mfradar,ENV,jobq,jobload,CURRENT_TIME,dwelltime,sceneplot,maxrng,beamw,tgtpos,26,numdwells);
0.250000秒:搜索[20.769231 - 0.000000]0.260000秒:搜索0.270000秒(23.076923 - 0.000000):跟踪[4.882892 - -0.000030]跟踪2 49900.000000米0.280000秒:[25.384615 - 0.000000]0.290000秒搜索:搜索0.340000秒(27.692308 - 0.000000):跟踪[0.001390 - 0.000795]跟踪1 29900.000000 0.370000秒:跟踪[4.895153 - 0.000529]跟踪2 49900.000000米0.440000秒:跟踪[0.000284 - 0.000446]跟踪1 29900.000000 0.470000秒:跟踪[4.909764 - -0.000394]跟踪2 49900.000000米0.540000秒:跟踪[0.000455 - -0.000130]跟踪1 29800.000000 0.570000秒:跟踪[4.921876 - -0.000210]跟踪2 49900.000000米0.640000秒:跟踪[0.000181 - -0.000020]跟踪1 29800.000000 0.670000秒:跟踪[4.932942 - -0.000988]跟踪2 49900.000000米0.740000秒:跟踪[0.000348 - 0.000212]跟踪1 29800.000000 0.770000秒:跟踪[4.944255 - -0.001073]跟踪2 49900.000000米0.840000秒:跟踪[0.000171 - -0.000125]跟踪1 29800.000000 0.870000秒:跟踪[4.954431 - -0.000943]跟踪2 50000.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.240000秒:跟踪[-0.000110 - -0.000315]跟踪1 29800.000000 1.340000秒:跟踪[-0.000291 - -0.000515]跟踪1 29800.000000 1.370000秒:跟踪[5.005679 - -0.000877]跟踪2 50000.000000米1.440000秒:跟踪[-0.000191 - -0.000592]跟踪1 29800.000000 1.540000秒:跟踪[-0.000140 - -0.000787]跟踪1 29700.000000 1.640000秒:跟踪[0.000069 - -0.000600]跟踪1 29700.000000 1.740000秒:跟踪[-0.000001 - -0.000714]跟踪1 29700.000000 1.840000秒:跟踪[0.000030 - -0.000686]跟踪1 29700.000000 1.870000秒:跟踪[5.057762 - 0.000107]跟踪2 50100.000000米1.940000秒:轨道[0.000067 -0.000511]29700.000000米的轨道1

资源分布分析

的例子说明了雷达资源是如何完成不同的任务分配这部分。本图显示了多功能雷达系统,在这个例子中搜索与跟踪之间如何分配其资源。

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%。然而,一旦第二个目标离得更远,就会释放出更多的资源用于搜索。当再次跟踪第二个目标的时间到来时,跟踪负载会短暂增加。

摘要

本例介绍的资源管理和任务调度的多官能相控阵雷达系统的概念。这表明,与资源管理组件,雷达用作闭环系统。虽然只有搜索和跟踪任务的这个例子交易的多功能雷达,该概念可以扩展到其他功能,如自我检查和沟通,也参与更现实的情况。

参考

[1]沃尔特温斯托克,“一个多功能雷达的计算机控制”,实用的相控阵天线系统,莱克斯书,1997年

附录

这些辅助功能为雷达资源管理工作流程建模。

getCurrentJob

这个函数getCurrentJob该职位在搜索队列和通道队列,并选择具有最高优先级的任务来执行比较。

函数[currentjob,jobq] = getCurrentJob(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)。时间] <= CURRENT_TIME);[〜,maxpidx] = MAX([trackq(readyidx).Priority]);taskqidx = readyidx(maxpidx);%如果发现轨道作业具有更高的优先级,把它作为当前工作%,并增加下一个搜索作业的优先级,因为它被推迟。%,否则,下一个搜索工作,由于是当前的工作。如果〜的isEmpty(taskqidx)&& trackq(taskqidx).Priority> = SEARCHQ(searchqidx).Priority currentjob = trackq(taskqidx);对于m = taskqidx+1:num_trackq_items trackq(m-1) = trackq(m);结束num_trackq_items = num_trackq_items-1;SEARCHQ(searchqidx).Priority = SEARCHQ(searchqidx).Priority + 100;其他currentjob = searchq (searchqidx);searchidx = searchqidx + 1;结束jobq.SearchQueue = SEARCHQ;jobq.SearchIndex = 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];脉冲数和工作频率NPULSES = 10;FC = mfradar.TxAnt.OperatingFrequency;对于m = 1: Npulses%波形x = mfradar.Wav ();%更新目标运动[tgtpos,tgtvel] = env.TargetMotion(1 / mfradar.Wav.PRF);[〜,tgtang] = rangeangle(tgtpos);%传输[XT,inuseflag] = mfradar.Tx(X);W = mfradar.STV(FC,current_job.BeamDirection);XT = mfradar.TxAnt(XT,tgtang,连词(W));%传播XP = env.Channel(XT,radarpos,tgtpos,radarvel,tgtvel);XP = env.Target(XP);%接收和单脉冲XR = mfradar.RxAnt(XP,tgtang);[XRS,xrdaz,xrdel] = mfradar.RxFeed(XR,current_job.BeamDirection);%脉冲积分如果米== 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上述回波适用的信号处理技术,以产生目标检测。

函数(检测、mfradar) = generateDetection (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,'[)');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);测量噪声矩阵检测= objectDetection(CURRENT_TIME,...[ang_est(1); ang_est(2); rng_est]'MeasurementNoise'measNoise,...'MeasurementParameters',结构('帧''球形'“HasVelocity”,假));其他检测= objectDetection.empty;结束如果CURRENT_TIME <0.3 ||STRCMP(current_job.JobType,'跟踪')fprintf中('\ n%F秒:\吨%S \吨[%F%F]',CURRENT_TIME,current_job.JobType,current_job.BeamDirection(1),...current_job.BeamDirection(2));结束

updateTrackAndJob

这个函数updateTrackAndJob跟踪检测,然后通过轨道雷达管理器更新跟踪任务队列。

函数[jobq,allTracks,mfradar] = updateTrackAndJob(检测,jobq,mfradar,current_job,CURRENT_TIME,dwellinterval)trackq = jobq.TrackQueue;num_trackq_items = jobq.NumTrackJobs;%执行目前的工作开关current_job.JobType情况下'搜索'对于搜索作业,如果有发现,建立暂定。%的轨道和进度的确认工作如果〜的isEmpty(检测)ang_est = detection.Measurement(1:2);rng_est = detection.Measurement(3);如果~ mfradar。IsTrackerInitialized [~,~,allTracks] = mfradar.Tracker(检测,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)。如果CURRENT_TIME <0.3 ||STRCMP(current_job.JobType,'跟踪')fprintf中('在%\ t目标探测到的F M',rng_est);结束其他allTracks = [];结束情况下'确认'%有关确认工作,如果检测确认,建立轨道%,并创建与重访时间相对应的跟踪作业如果〜的isEmpty(检测)的TrackID = current_job.TrackID;[〜,〜,allTracks] = mfradar.Tracker(检测,CURRENT_TIME,的TrackID);rng_est = detection.Measurement(3);如果rng_est> = 50e3 updateinterval = 0.5;其他updateinterval = 0.1;结束revisit_time = CURRENT_TIME + updateinterval;predictedTrack = predictTracksToTime(mfradar.Tracker,的TrackID,revisit_time);xpred = predictedTrack.State([1 3 5]);[phipred,thetapred,因子Rpred] = 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,...'范围',因子Rpred,'的TrackID',的TrackID);如果CURRENT_TIME <0.3 ||STRCMP(current_job.JobType,'跟踪')fprintf中('在%女男\ tCreated轨道%d',的TrackID,rng_est);结束其他allTracks = [];结束情况下'跟踪'%有关轨道的工作,如果有检测,更新和跟踪根据重访时间安排跟踪作业。。如果有%是没有检测,预测和计划的轨道工作越早所以%的目标也不会丢失。如果〜的isEmpty(检测)的TrackID = current_job.TrackID;[〜,〜,allTracks] = mfradar.Tracker(检测,CURRENT_TIME,的TrackID);rng_est = detection.Measurement(3);如果rng_est> = 50e3 updateinterval = 0.5;其他updateinterval = 0.1;结束revisit_time = CURRENT_TIME + updateinterval;predictedTrack = predictTracksToTime(mfradar.Tracker,的TrackID,revisit_time);xpred = predictedTrack.State([1 3 5]);[phipred,thetapred,因子Rpred] = 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,...'范围',因子Rpred,'的TrackID',的TrackID);如果CURRENT_TIME <0.3 ||STRCMP(current_job.JobType,'跟踪')fprintf中('\tTrack %d at %f m',的TrackID,rng_est);结束其他的TrackID = current_job.TrackID;[〜,〜,allTracks] = mfradar.Tracker(检测,CURRENT_TIME,的TrackID);updateinterval = 0.1;%重温越快revisit_time = CURRENT_TIME + updateinterval;predictedTrack = predictTracksToTime(mfradar.Tracker,的TrackID,revisit_time);xpred = predictedTrack.State([1 3 5]);[phipred,thetapred,因子Rpred] = 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,...'范围',因子Rpred,'的TrackID',的TrackID);如果CURRENT_TIME <0.3 ||STRCMP(current_job.JobType,'跟踪')fprintf中('\ TNO检测,轨道%d预测',current_job.TrackID);结束结束结束jobq.TrackQueue = trackq;jobq.NumTrackJobs = num_trackq_items;