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

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

此示例需要传感器融合和跟踪工具箱™。

雷达配置

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

FC = 2E9;%雷达的载波频率(Hz)的C = 3E8;%传播速度(m / s)的拉姆达= C / FC;%雷达波长(μm)maxrng = 100e3;%最大范围(M)minrng = 2 e3;最小距离(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

雷达天线

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

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

发射器和接收

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

PD = 0.9;检测的概率%PFA = 1E-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('峰值功率'企业可持续,'获得'ampgain,'InUseOutputPort',真正的);rx = phased.ReceiverPreamp ('获得'ampgain,“NoiseFigure”,7,'EnableInputPort',真正的);

信号处理

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

%匹配滤波器mfcoeff = getMatchedFilter (wav);mf = phased.MatchedFilter (“系数”,mfcoeff,“GainOutputPort”,真正的);%时变增益tgrid = unigrid(0,1 / FS,1 / PRF,'[)');rgates = C * tgrid / 2;rngloss = 2 * fspl(rgates,拉姆达);refloss = 2 * fspl(maxrng,拉姆达);TVG = phased.TimeVaryingGain('RangeLoss',rngloss,“ReferenceLoss”,refloss);单脉冲%monfeed = phased.MonopulseFeed ('SensorArray',蚂蚁,'PropagationSpeed',C,'工作频率',FC,“SquintAngle”,1);monest = getMonopulseEstimator(monfeed);

数据处理

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

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

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

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

mfradar。Tx = Tx;mfradar。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),'工作频率'、fc);

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

频道= phased.FreeSpace (“SampleRate”,FS,'TwoWayPropagation',真正,'工作频率'、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);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);scanangle = [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))
JobType: '搜索' BeamDirection:2×双]优先级:1000 WaveformIndex:1

跟踪任务

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

trackq(10)=结构(“JobType”,[]'BeamDirection',[]'优先',3000,'WaveformIndex',[]'时间',[]'范围',[]'的TrackID'[]);num_trackq_items = 0;disp (trackq (1))
JobType:[] 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 (“更新”,sceneplot,current_job,maxrng,beamw,tgtpos,allTracks,detection.Measurement);% 更新时间tgtpos = env.TargetMotion(dwelltime-NPULSES / mfradar.Wav.PRF);CURRENT_TIME = CURRENT_TIME + dwelltime;%记录资源分配如果STRCMP(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秒:检索[-25.384615 0.000000] 0.030000秒:检索[-23.076923 0.000000] 0.040000秒:检索[-20.769231 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,CURRENT_TIME,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,CURRENT_TIME,tgtpos] = MPARSimRun(mfradar,ENV,jobq,jobload,CURRENT_TIME,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,CURRENT_TIME,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:numel(searchpercent))* L * dwelltime,[searchpercent(:) trackpercent(:)]);xlabel('时间(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 = 1E-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] = findpeak (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秒:\ t % s \ [% % f]”、当前时间、current_job.JobType current_job.BeamDirection (1),current_job.BeamDirection (2));结束

updateTrackAndJob

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

功能[jobq,allTracks,mfradar] = updateTrackAndJob(检测,jobq,mfradar,current_job,current_time,居民间隔)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(检测,CURRENT_TIME,UINT32([]));结束num_trackq_items = num_trackq_items + 1;trackq(num_trackq_items)=结构(“JobType”'确认''优先',2000年,'BeamDirection'ang_est,'WaveformIndex'1,'时间',CURRENT_TIME + 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更新时间= 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 at %f m'、trackid rng_est);结束其他allTracks = [];结束情况下'跟踪'%有关轨道的工作,如果有检测,更新和跟踪%安排对应的重访时间的轨道工作。如果有%是没有检测,预测和计划的轨道工作越早所以%的目标也不会丢失。如果〜的isEmpty(检测)的TrackID = current_job.TrackID;[〜,〜,allTracks] = mfradar.Tracker(检测,CURRENT_TIME,的TrackID);rng_est = detection.Measurement(3);如果rng_est >= 50e3更新时间= 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在%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;