主要内容

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

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

雷达配置

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

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

波形

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

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

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

rngres=bw2range(bw,c)
rngres = 150

雷达天线

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

arraysz = 50;蚂蚁=分阶段。(精“大小”arraysz,“元素间距”λ/ 2);ant.Element.BackBaffled = true;arraystv =分阶段。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“启用输入端口”,真正的);rxpassthrough =分阶段。ReceiverPreamp (“SampleRate”,财政司司长,“获得”0,“ReferenceTemperature”1);雷达= radarTransceiver (“波形”, wav,“发射机”tx,“TransmitAntenna”散热器,“ReceiveAntenna”,收藏家,“接收方”,rxpassthrough,“ElectronicScanMode”“习俗”);

信号处理

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

%匹配滤波器mfcoeff = getMatchedFilter (wav);mf =分阶段。MatchedFilter (“系数”mfcoeff,“GainOutputPort”,真正的);时变增益%tgrid = unigrid (0,1 / fs, 1 /脉冲重复频率,“()”); rgates=c*tgrid/2;rngloss=2*fspl(rgates,λ);refloss=2*fspl(最大值,λ);tvg=相控时变增益(“射程损失”rngloss,“ReferenceLoss”, refloss);%单脉冲monfeed =分阶段。MonopulseFeed (“SensorArray”蚂蚁,“PropagationSpeed”C“OperatingFrequency”足球俱乐部,“SquintAngle”,1); monest=单脉冲刺激器(monfeed);

数据处理

探测结果被输入跟踪器,跟踪器执行几个操作。跟踪器维护一个跟踪列表,即对感兴趣区域的目标状态进行估计。如果一个检测不能被分配到任何已经由跟踪器维护的轨道,跟踪器会启动一个新的轨道。在大多数情况下,新轨迹代表的是真目标还是假目标尚不清楚。首先,创建一个带有试探性状态的轨道。如果获得足够的检测,轨迹就得到确认。类似地,如果没有对轨道进行检测,轨道就被滑行(预测没有校正)。如果曲目有一些遗漏的更新,跟踪器就会删除曲目。

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

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

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

mfradar.Tx=Tx;mfradar.Rx=Rx;mfradar.TxAnt=散热器;mfradar.RxAnt=收集器;mfradar.Wav=Wav;mfradar.Radar=雷达;mfradar.RxFeed=monfeed;mfradar.MF=MF;mfradar.TVG=TVG;mfradar.DOA=monest;mfradar.STV=arraystv;mfradar.Tracker=跟踪器;mfradar.istrackrinitialized=false;

目标和场景定义

这个例子假设雷达在原点处是静止的,在它的视场内有两个目标。一个目标偏离雷达,距离约为50公里。另一个目标接近雷达并且在30公里之外。两个目标的RCS都是1平方米。

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

假设传播环境是空闲空间。

频道=分阶段。空闲空间(“SampleRate”,财政司司长,“双向传播”,真的,“OperatingFrequency”、fc);

将目标和传播信道分组在一个结构中,以便在仿真循环中参考。

env。目标=目标;env。TargetMotion = tgtmotion;env。频道=通道;现场= radarScenario (“更新”脉冲重复频率);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度的空间。利用波束宽度计算角搜索网格。

扫描区域= [- 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=struct(“JobType”“搜索”“BeamDirection”num2cell (scanangles 1),“优先”, 1000,“波形指数”1);current_search_idx = 1;

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

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

跟踪任务

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

trackq(10) =结构(“JobType”,[],“BeamDirection”,[],“优先”, 3000,“波形指数”,[],“时间”,[],“范围”,[],“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。

任务调度

在本例中,为简单起见,多功能雷达在一小段时间内仅执行一种类型的作业,通常称为暂停,但可在每次暂停开始时切换任务。对于每次暂停,雷达会查看所有应执行的任务,并选择优先级最高的任务。因此,获得stponed现在将具有更高的优先级,并且更有可能在下一次驻留中执行。

模拟

本节的例子模拟了多功能雷达系统的短期运行。该多功能雷达仿真系统的整体结构如图所示。

仿真从雷达管理器开始,它提供了一个初始工作。在此基础上,雷达发送波形,模拟回波,并通过信号处理生成检测。跟踪器对检测进行处理,为目标创建跟踪。然后这些轨迹会回到雷达管理员那里。基于轨道和场景的知识,雷达经理安排新的轨道工作,并为下一次驻留选择工作。

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

  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%调度程序以提供当前作业[当前作业,作业Q]=当前雷达任务(作业Q,当前作业时间);%模拟接收的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 (“更新”、场景图、当前作业、最大RNG、beamw、tgtpos、所有轨迹、检测、测量);%更新时间tgtpos=环境目标运动(驻留时间NPULES/mfradar.Wav.PRF);当前时间=当前时间+驻留时间;%记录资源分配如果比较字符串(current_job。JobType,“搜索”)jobload.num\u search\u job(驻留\u 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.1538460.000000]0.070000秒:搜索[-13.846150.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.307620.000000]0.130000秒:搜索[0.0000000.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: 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 sec: Search [20.769231 0.000000] 0.260000 sec: Search [23.076923 0.000000] 0.270000 sec: Track [4.882021 0.002546] Track 2 at 29900.000000 m 0.280000 sec: Search [25.384615 0.000000] 0.290000 sec: Search [27.692308 0.000000] 0.340000 sec: Track 1 at 29900.000000 m 0.370000 sec:Track [4.889519 -0.009622] Track [-0.003890 -0.006735] Track 1 at 29900.000000 m 0.570000 sec: Track [4.905253 -0.023520] Track 2 at 49900.000000 m 0.640000 sec:Track [-0.014700 -0.007442] Track 1 at 29800.000000 m 0.770000 sec: Track [-0.014700 -0.007442] Track 2 at 29800.000000 m 0.770000 sec: Track [- 0.0916246 -0.006127] Track 1 at 29800.000000 m 0.840000 sec: Track [- 0.002371 -0.007959] Track 1 at 29800.000000 m 0.870000 sec:Track [4.919202 0.000403] Track [4.919202 0.000403] Track [0.003877 -0.018467] Track 1 at 29800.000000 m 0.970000 sec: Track [4.919202 0.000403] Track 1 at 29800.000000 m 0.970000 sec: Track [4.919202 0.000403] Track 1 at 29800.000000 m 0.970000 sec: Track [4.919202 0.000403] Track 1 at 29800.000000 m 0.970000 sec:Track [-0.000250 -0.003156] Track 1 at 29800.000000 m 1.440000 sec: Track [- 0.000101 -0.005774] Track 1 at 29800.000000 m 1.440000 sec: Track [-0.000250 -0.003156] Track 1 at 29800.000000 m 1.440000 sec: Track [-0.000250 -0.003156] Track 1 at 29800.000000 m 1.440000 sec:Track [-0.000965 -0.003565] Track 1 at 29800.000000 m 1.940000 sec: Track [-0.001041 -0.003305] Track 1 at 29800.000000 m 1.670000 sec: Track [-0.000550 -0.003633] Track 1 at 29800.000000 m 1.840000 sec: Track [-0.002676 -0.003713] Track 1 at 29800.000000 m 1.940000 sec:轨道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:numel(searchpercent))*L*驻留时间,[searchpercent(:)trackpercent(:)];xlabel(‘时间’);ylabel (的工作比例);标题(“搜寻与追踪之间的资源分配”);传奇(“搜索”“跟踪”“位置”“最佳”);网格在…上

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

总结

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

参考文献

[1]沃尔特·温斯托克,《计算机控制多功能雷达》,实用相控阵天线系统Lex Book, 1997年出版

附录

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

currentRadarTask

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

功能[currentjob,jobq]=currentRadarTask(jobq,当前时间)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);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:N脉冲%传递权重w = mfradar.STV (fc, current_job.BeamDirection);%模拟回波前进(环境现场);xr1=mfradar.Radar(目标姿态(环境雷达平台),(m-1)/mfradar.Wav.PRF,conj(w));%单脉冲[xrs,xrdaz,xrdel]=mfradar.RxFeed(xr1,当前任务波束方向);%脉冲集成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.sweep带宽);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));%探测范围和角度估计通过单脉冲如果[~,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);%形成检测对象。测量噪音= diag([0.1, 0.1, 150].^2);测量噪声矩阵检测= objectDetection(当前时间,[ang_est (1); ang_est (2); rng_est),“测量噪音”,米斯诺伊斯,“MeasurementParameters”结构(“帧”“球”“HasVelocity”、假));其他的detection=objectDetection.empty;结束如果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(检测,jobq,mfradar,当前_作业,当前_时间,驻留间隔)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.istrackrinitialized[~,~,allTracks]=mfradar.Tracker(检测,当前时间,uint32([]);mfradar.istrackrinitialized=true;其他的[~, ~, allTracks] = mfradar.Tracker(检测、当前时间、uint32 ([]));结束num_trackq_items = num_trackq_items + 1;trackq (num_trackq_items) =结构(“JobType”“确认”“优先”, 2000,“BeamDirection”ang_est,“波形指数”,1,“时间”,当前时间+ dwellinterval,“范围”rng_est,“TrackID”allTracks (~ [allTracks.IsConfirmed]) .TrackID);如果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]),“波形指数”,1,“时间”revisit_time,“范围”弹性分组环,“TrackID”, trackid);如果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]),“波形指数”,1,“时间”revisit_time,“范围”弹性分组环,“TrackID”, trackid);如果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]),“波形指数”,1,“时间”revisit_time,“范围”弹性分组环,“TrackID”, trackid);如果Current_time < 0.3 ||JobType,“跟踪”)流('\tNo检测,跟踪%d预测', current_job.TrackID);结束结束结束jobq。TrackQueue = trackq;jobq。NumTrackJobs = num_trackq_items;