主要内容

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

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

雷达的配置

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

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

波形

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

bw=1e6;fs=1.5*bw;prf=1/range2time(最大值,c);dcycle=0.1;wav=phased.LinearFMWaveform(“SampleRate”fs,...“持续时间规范”,的工作周期,“尽职调查”dcycle,...脉冲重复频率的,prf,“SweepBandwidth”bw);

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

rngres = bw2range (bw c)
rngres=150

雷达天线

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

arraysz = 50;蚂蚁=分阶段。(精“大小”arraysz,“ElementSpacing”,λ/2);ant.Element.backaffled=true;arraystv=phased.SteeringVector(“SensorArray”蚂蚁“PropagationSpeed”c);散热器=分阶段。散热器(“OperatingFrequency”足球俱乐部,...“PropagationSpeed”c“传感器”蚂蚁“WeightsInputPort”,真正的);收集器=分阶段。收集器(“OperatingFrequency”足球俱乐部,...“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);企业可持续= 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,...“Transmitantena”散热器,“接收天线”收集器,...“接收者”rxpassthrough,“ElectronicScanMode”,“自定义”);

信号处理

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

%匹配滤波器mfcoeff = getMatchedFilter (wav);mf =分阶段。MatchedFilter (“系数”,mfcoeff,“GainOutputPort”,真正的);时变增益%tgrid=unigrid(0,1/fs,1/prf,“()”);大门= 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);

数据处理

检测结果被输入一个跟踪器,跟踪器执行若干操作。跟踪器维护一个轨迹列表,即对感兴趣区域内目标状态的估计。如果无法将检测结果分配给跟踪器已经维护的任何轨迹,跟踪器将启动一个新轨迹。在大多数情况下,新轨迹是否代表一个真实的ta目标或假目标不清楚。首先,创建一条具有暂定状态的轨迹。如果获得足够的检测,则该轨迹将被确认。类似地,如果没有为轨迹分配检测,则该轨迹将滑行(预测而不进行校正)。如果该轨迹有一些遗漏的更新,则该轨迹将删除该轨迹。

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

追踪= radarTracker (“FilterInitializationFcn”@initSATGNN,...“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。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=size(tgtpos,2);tgtmotion=phased.Platform(“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”,“属性”)); 环境场景=场景;环境雷达平台=雷达平台;

雷达资源管理

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

搜索任务

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

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

扫描区域= [- 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=助手附件绘图(“初始化”, azscanangles scanangles maxrng、beamw tgtpos);

搜索波束一次发射一个,直到覆盖整个搜索区域。一旦覆盖整个搜索区域,雷达将重复搜索序列。搜索沿方位方向执行,每次一个仰角。搜索任务通常包含在作业队列中。

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

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

显示(搜索Q(当前搜索idx))
JobType: 'Search'波束方向:[2×1 double]优先级:1000

跟踪任务

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

trackq(10) =结构(“JobType”[],“BeamDirection”[],“优先权”,3000,“WaveformIndex”[],...“时间”[],“范围”[],“TrackID”[]);num_trackq_items = 0;disp (trackq (1))
JobType: [] BeamDirection: [] Priority: [] waveformmindex: [] 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 ms。在模拟开始时,雷达配置为一次搜索一个波束。

rng(2018);当前_时间=0;NPULES=10;numdwells=200;驻留时间=0.01;jobload.num_搜索_作业=0(1,numdwells);jobload.num_跟踪_作业=0(1,numdwells);

您可以完整运行该示例,以查看在执行期间动态更新的绘图。在顶部两个绘图中,光束的颜色表示当前作业的类型:红色表示搜索,黄色表示确认,紫色表示轨迹。下面两个绘图显示真实位置(三角形)、检测(圆形)和轨迹(方形)系统日志也会显示在命令行中,以解释当前时刻的系统行为。接下来,该示例将显示有关模拟的几个关键时刻的更多详细信息。

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

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(居民点)= 1;其他的jobload.num_track_job (dwell_idx) = 1;结束结束
搜索[-20.769231 0.000000]搜索[-18.461538 0.000000]搜索[-16.153846 0.000000]搜索[-20.769231 0.000000]搜索[-18.461538 0.000000]搜索[-16.153846 0.000000]搜索搜索[-13.846154 0.000000]0.80000秒:搜索[-11.538462 0.000000]0.90000秒:搜索[-9.230769 0.000000]0.11万秒:搜索[-4.615385 0.000000]0.12万秒:搜索[-2.307692 0.000000]0.13万秒:搜索[-2.307692 0.000000]0.13万秒:搜索[- 0.000 0.000000]目标检测在29900.000000 m

正如预期的那样,当雷达波束照亮目标时,雷达会得到一个检测,如图所示。当这种情况发生时,雷达会立即发送一个确认波束,以确保它不是错误检测。

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

[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: Search [2.307692 0.000000] 0.160000 sec: Search [4.615385 0.000000] Target detected at 499900.000000 m 0.170000 sec: Confirm [4.896994 0.014031] Created track 2 at 499900.000000 m 0.180000 sec: Search [6.923077 0.000000] 0.190000 sec: Search [11.538462 0.000000] 0.210000 sec:搜索[13.846154 0.000000]0.220000秒:搜索[16.153846 0.000000]0.230000秒:搜索[18.461538 0.000000]0.240000秒:跟踪[0.000833 -0.000127]跟踪1在29900.000000 m

结果显示,模拟在轨道梁处停止。围绕两个目标的放大图显示了如何根据检测和测量更新轨道。在执行轨道作业期间,还向作业队列添加了下一次重访的新轨道作业。

每次驻留都会重复此过程。这个模拟运行雷达系统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.340000秒:轨道[0.014417 0.015384]轨道1位于29900.000000米0.370000米0.012786]49900.000000米0.440000秒时的轨道2:29900.000000米0.470000秒时的轨道1:49900.000000米0.009622:49900.000000米0.540000秒时的轨道2:轨道[-0.003890-0.006735]29900.000000米0.570000秒时的轨道1:轨道[4.905253-0.023520]49900.000000米0.640000秒时的轨道2:轨道[-0.0091240.012105]29900.000000米0.670000秒时轨道1:49900.000000米0.740000秒时轨道2:29800.000000米0.770000秒时轨道1:49900.000000米0.770000秒时轨道[4.916246-0.006127]49900.000000米0.840000秒时轨道2:49900.000000米0.840000秒时轨道[0.002371-0.007959]29800.000000米0.870000秒时轨道1:4.919202.000403]49900.000000米0.940000秒时的轨道2:29800.000000米0.970000秒时的轨道1:49900.000000米0.931431:0.003165:49900.000000米时的轨道2:1.040000秒时的轨道[0.002358-0.007887]29800.000000米时的轨道1.070000秒时的轨道[4.932988-0.003006]49900.000000米时的轨道2: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.540000秒:轨道[-0.000965-0.003565]29800.000000米1.640000秒时轨道1:29800.000000米1.670000秒时轨道1:50000.000000米1.740000秒时轨道2:50000.000000米1.740000秒时轨道[-0.000550-0.003633]29800.000000米1.840000秒时轨道1:29800.000000米1.840000秒时轨道[-0.002676-0.003713]29800.000000米1.940000秒时轨道1轨道1在29800.000000米处

资源分布分析

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

L = 10;searchpercent =总和(缓冲区(jobload.num_search_job, L, L - 1,“诺德利”))/L;trackpercent=总和(缓冲区(jobload.num\u track\u作业,L,L-1,“诺德利”)) / L;图;阴谋(1:元素个数(searchpercent)) * L * dwelltime, [searchpercent (:) trackpercent (:)));包含(“时间(s)”);ylabel (“工作百分比”);头衔(“搜寻与追踪之间的资源分配”); 传奇(“搜索”,“轨道”,“位置”,“最佳”);网格;

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

总结

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

工具书类

[1] Walter Weinstock,“多功能雷达的计算机控制”,实用相控阵天线系统Lex Book, 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=find([trackq(1:num\u trackq\u items).Time]<=当前时间);[~,maxpidx]=max([trackq(readyidx).Priority]);taskqidx=readyidx(maxpidx);%如果找到的跟踪作业具有更高的优先级,则将其用作当前作业%,并增加下一个搜索工作的优先级,因为它被推迟了。%否则,下一个到期的搜索作业就是当前作业。如果~ isempty (taskqidx) & & trackq (taskqidx)。优先级> = searchq (searchqidx)。优先级currentjob = trackq(taskqidx);num_trackq_items trackq(M -1) = trackq(M);结束num_trackq_items=num_trackq_items-1;searchq(searchqidx)。优先级=searchq(searchqidx)。优先级+100;其他的currentjob = searchq (searchqidx);searchidx = searchqidx + 1;结束jobq.SearchQueue=searchq;jobq.SearchIndex=searchidx;jobq.TrackQueue=trackq;jobq.NumTrackJobs=num\u trackq\u项;

发电站

这个函数发电站仿真雷达接收到的目标回波的复杂(I/Q)基带表示。

函数[xrsint, xrdazint xrdelint mfradar] = generateEchos (mfradar env, current_job)%脉冲数和工作频率n脉冲=10;fc=mfradar.TxAnt.OperatingFrequency;m = 1: Npulses%传递权重w=mfradar.STV(fc,当前作业波束方向);%模拟回波推进(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;* db2pow(npwgnthresh(pfa,1, 2))“非相干”));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));%单脉冲距离和角度估计中的检测如果[~,tgtidx] = findpeaks(abs(xrsmf),“MinPeakHeight”阈值,...“Sortstr”,“下”,“NPeaks”rng_est=rgates(tgtidx-(numel(mfcoeff)-1));ang_est=mfradar.DOA(xrsint(tgtidx-1)、xrdazint(tgtidx-1)、xrdelint(tgtidx-1)、当前作业波束方向);%构成检测对象。measNoise=diag([0.1,0.1150]。^2);测量噪声矩阵检测=对象检测(当前时间,...[ang_est (1); ang_est (2); rng_est),“MeasurementNoise”measNoise,...“MeasurementParameters”,结构(“框架”,“球形”,“HasVelocity”、假));其他的检测= objectDetection.empty;结束如果Current_time < 0.3 ||JobType,“轨道”)fprintf(' \ n % f秒:\ t % s \ [% % f]”、当前时间、current_job.JobType current_job.BeamDirection (1),...current_job.BeamDirection (2));结束

updateTrackAndJobQueue

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

函数[jobq,allTracks,mfradar] = updateTrackAndJobQueue(检测,jobq,mfradar,current_job,current_time,居留时间)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。isstrackerinitialized [~,~,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 ||JobType,“轨道”)fprintf(“\t在%f m处检测到目标”, rng_est);结束其他的allTracks = [];结束情况下“确认”%确认工作,如果检测确认,建立跟踪%,并创建一个与重新访问时间相对应的跟踪作业如果~isempty(detection)trackid=当前作业trackid;[~,~,所有轨迹]=mfradar.Tracker(检测,当前时间,轨迹ID);rng_est=检测。测量(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);如果Current_time < 0.3 ||JobType,“轨道”)fprintf('\tCreated track %d at %f m'、trackid rng_est);结束其他的allTracks = [];结束情况下“轨道”%对于轨道作业,如果有检测,更新轨道和%安排一个与重新访问时间相对应的跟踪工作。如果有%是没有检测,所以提前预测和安排跟踪工作%目标没有丢失。如果~isempty(detection)trackid=当前作业trackid;[~,~,所有轨迹]=mfradar.Tracker(检测,当前时间,轨迹ID);rng_est=检测。测量(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);如果Current_time < 0.3 ||JobType,“轨道”)fprintf('\tTrack %d at %f m'、trackid rng_est);结束其他的trackid=当前作业。trackid;[~,~,所有轨迹]=mfradar.Tracker(检测,当前时间,轨迹ID);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);如果Current_time < 0.3 ||JobType,“轨道”)fprintf('\tNo检测,跟踪%d预测', current_job.TrackID);结束结束结束jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;