主要内容

蒙特卡罗ROC模拟

这个例子展示了如何使用蒙特卡罗模拟生成雷达系统的接收机工作特性(ROC)曲线。接收机的工作特性决定了系统检测目标的能力,同时在目标缺失(误报)时剔除较大的伪信号值。检测系统将通过将接收到的信号值与预先设定的阈值进行比较来声明目标的存在或不存在。探测概率(Pd)为目标实际存在时,瞬时信号值大于阈值的概率。虚警概率(Pfa)当目标不存在时,信号值大于阈值的概率。在这种情况下,信号是由噪声引起的,其特性取决于噪声统计数据。蒙特卡罗模拟在目标存在和不存在的情况下生成大量雷达回波。模拟计算PdPfa是通过计算每种情况中超过阈值的信号值的比例。

ROC曲线图Pd作为…的函数Pfa.ROC曲线的形状取决于接收信号的信噪比。如果到达的信号信噪比是已知的,那么ROC曲线显示了系统在以下方面的表现如何PdPfa。如果你指定PdPfa,然后您可以确定需要多少能量才能达到这个要求。

你可以使用这个函数rocsnr来计算理论ROC曲线。这个例子展示了一个单天线雷达系统的蒙特卡罗模拟生成的ROC曲线,并与理论曲线进行了比较。

指定雷达要求

设置期望的检测概率为0.9,虚警概率为 1 0 - 6 .将雷达的最大距离设置为4000米,距离分辨率设置为50米。将实际目标距离设置为3000米。将目标雷达横截面设置为1.5平方米,将工作频率设置为10 GHz。所有计算均在基带中执行。

c = physconst (“光速”);pd = 0.9;pfa = 1 e-6;max_range = 4000;target_range = 3000.0;range_res = 50;tgt_rcs = 1.5;fc = 10 e9;λ= c / fc;

任何计算Pfapd需要处理多个信号。要保持较低的内存要求,请以脉冲块的形式处理信号。将要处理的脉冲数设置为45000,并将每个块的大小设置为10000。

Npulse = 45000;Npulsebuffsize = 10000;

选择波形和信号参数

使用脉冲范围分辨率计算波形脉冲带宽。从最大范围计算脉冲重复频率。因为信号是基带,所以将采样频率设置为带宽的两倍。从脉冲带宽计算脉冲持续时间。

pulse_bw = c / (2 * range_res);脉冲重复频率= c / (2 * max_range);fs = 2 * pulse_bw;pulse_duration = 10 / pulse_bw;波形=分阶段。LinearFMWaveform (“脉冲宽度”pulse_duration,...“SampleRate”fs,“SweepBandwidth”...pulse_bw,脉冲重复频率的,prf);

实现特定目标PdPfa要求在目标反射信号后有足够的信号功率到达接收器。使用Albersheim方程计算达到规定的虚警概率和检测概率所需的最小信噪比。

snr_min = albersheim (pd, pfa);

为了达到这个信噪比,必须向目标传输足够的功率。利用雷达方程估计峰值发射功率,峰值功率,要求在3000米的距离内达到以分贝为单位的指定信噪比。接收到的信号也取决于目标雷达横截面(RCS)。设定雷达具有相同的发射和接收增益20db。给出了雷达方程

txrx_gain = 20;peak_power =((4 *π)^ 3 * noisepow (1 / pulse_duration) * target_range ^ 4 *...db2pow (snr_min)) / (db2pow (2 * txrx_gain) * tgt_rcs *λ^ 2)
peak_power = 293.1830

设置发射器系统对象

创建构成模拟传输部分的系统对象:雷达平台、天线、发射机和散热器。

antennaplatform =分阶段。平台(...“初始位置”,[0; 0; 0],...“速度”, (0;0;0]);天线=分阶段。IsotropicAntennaElement (...“频率范围”[5 e9 15 e9]);发射机=分阶段。发射机(...“获得”,txrx_增益,...“PeakPower”peak_power,...“InUseOutputPort”,真正的);散热器=分阶段。散热器(...“传感器”、天线、...“工作频率”、fc);

设置目标系统对象

创建一个目标系统对象™,对应于一个具有非零目标横截面的实际反射目标。来自这个目标的反射将模拟真实的雷达回波。为了计算假警报,创建一个雷达截面为零的第二个目标系统对象。除了噪声外,这个目标的反射为零。

目标{1}=phased.RadarTarget(...“MeanRCS”tgt_rcs,...“工作频率”、fc);targetplatform{1} =分阶段。平台(...“初始位置”,[target_range;0;0]);target{2}=phased.RadarTarget(...“MeanRCS”0,...“工作频率”,fc);targetplatform{2}=分阶段的.Platform(...“初始位置”, (target_range;0;0]);

建立自由空间传播系统对象

对从雷达到目标和从目标到目标的传播环境进行建模。

{1} =阶段性频道。空闲空间(...“SampleRate”fs,...“双向传播”,真的,...“工作频率”、fc);{2} =阶段性频道。空闲空间(...“SampleRate”fs,...“双向传播”,真的,...“工作频率”、fc);

设置接收器系统对象

属性指定噪声噪声法财产‘噪音温度’ReferenceTemperature物业价格为290K。

收集器=分阶段。收集器(...“传感器”、天线、...“工作频率”、fc);接收机=分阶段。ReceiverPreamp (...“获得”,txrx_增益,...“NoiseMethod”‘噪音温度’...“ReferenceTemperature”, 290.0,...“NoiseFigure”0,...“SampleRate”fs,...“EnableInputPort”,真正的);接收器。SeedSource =“属性”;接收器。种子= 2010;

指定快速时间网格

快速时间网格是一个脉冲重复时间间隔内的时间样本集。每个样本对应一个范围仓。

快速时间网格=单网格(0,1/fs,1/prf,“()”);rangebins = c * fast_time_grid / 2;

从波形创建传输脉冲

创建你想要传输的波形。

wavfrm =波形();

创建包含发射天线增益的发射信号。

[sigtrans, tx_status] =发射机(wavfrm);

从波形系统对象中创建匹配的滤波器系数。然后创建匹配的过滤器System对象。

MFCoeff = getMatchedFilter(波形);matchingdelay = size(MFCoeff,1) - 1;过滤器=分阶段。MatchedFilter (...“系数”MFCoeff,...“GainOutputPort”,假);

计算目标范围Bin

计算目标范围,然后计算范围bin数组中的索引。因为目标和雷达是固定的,所以在整个仿真循环中使用相同的位置和速度值。您可以假设范围bin索引在整个模拟中是常数。

ant_pos = antennaplatform.InitialPosition;ant_vel = antennaplatform.Velocity;tgt_pos = targetplatform {1} .InitialPosition;tgt_vel = targetplatform {1} .Velocity;[tgt_rng, tgt_ang] = rangeangle (tgt_pos ant_pos);rangeidx = val2ind (tgt_rng rangebins (2) -rangebins (1) rangebins (1));

循环脉冲

创建一个信号处理循环。每个步骤都通过执行System对象来完成。环路对脉冲进行两次处理,一次是针对目标存在状态,一次是针对目标缺失状态。

  1. 将信号发射到太空中相控散热器

  2. 使用将信号传播到目标并传回天线分阶段。空闲空间

  3. 反射来自目标使用的信号分阶段。目标

  4. 使用天线接收反射信号分阶段。收集器

  5. 将接收到的信号通过接收放大器相控接收前置放大器.这一步也增加了信号的随机噪声。

  6. 匹配滤波放大信号使用分阶段。MatchedFilter

  7. 将匹配的过滤器输出存储在目标范围库索引处,以供进一步分析。

rcv_脉冲=零(长度(sigtrans),Npulsebuffsize);h1=零(Npulse,1);h0=零(Npulse,1);Nbuff=地板(Npulse/Npulsebuffsize);Nrem=Npulse-Nbuff*Npulsebuffsize;n = 1:2% H1和H0假设trsig =散热器(sigtrans tgt_ang);trsig = {n}频道(trsig,...ant_pos tgt_pos,...ant_vel tgt_vel);rcvsig =目标{n} (trsig);rcvsig =收集器(rcvsig tgt_ang);k = 1: Nbuffm=1:Npulsebuffsize rcv_脉冲(:,m)=接收器(rcvsig,~(tx_状态>0));结束rcv_pulses =过滤器(rcv_pulses);rcv_pulses =缓冲区(rcv_pulses (matchingdelay + 1:结束),大小(rcv_pulses, 1));如果n==1h1(1:Npulsebuffsize)+(k-1)*Npulsebuffsize)=rcv_脉冲(rangeidx,:);其他的h0((1:Npulsebuffsize) + (k-1)*Npulsebuffsize) = rcv_脉冲(rangeidx,:).';结束结束如果非快速眼动睡眠(> 0)m = 1:Nrem rcv_pulse (:,m) = receiver(rcvsig,~(tx_status>0));结束rcv_pulses =过滤器(rcv_pulses);rcv_pulses =缓冲区(rcv_pulses (matchingdelay + 1:结束),大小(rcv_pulses, 1));如果n == 1 h1((1:Nrem) + Nbuff*Npulsebuffsize) = rcv_脉冲(rangeidx,1:Nrem).';其他的h0((1:Nrem)+Nbuff*Npulsebuffsize)=rcv_脉冲(范围IDX,1:Nrem)。”;结束结束结束

创建匹配过滤器输出的直方图

计算目标出现和目标缺席返回的直方图。使用100个箱子来粗略估计信号值的扩散。设置从最小信号到最大信号的直方图值范围。

h1a=绝对值(h1);h0a=绝对值(h0);阈值低=最小值([h1a;h0a]);阈值高=最大值([h1a;h0a]);nbins=100;双边缘=林空间(阈值低,阈值高,双边缘);图形直方图(h0a,双边缘)保持在…上直方图(h1a binedges)标题(“目标缺失Vs目标存在直方图”)传说(没有目标的“目标当前”

图中包含一个Axis对象。标题为Target缺席Vs Target Present直方图的Axis对象包含2个histogram类型的对象。这些对象表示Target缺席、Target Present。

模拟与理论比较PdPfa

来计算PdPfa,计算目标缺席返回和目标存在返回超过给定阈值的实例数量。这组阈值比前面模拟中用于创建直方图的容器有更细的粒度。然后,根据脉冲的数量对这些计数进行归一化,以得到概率的估计。向量sim_pfa为模拟虚警概率与阈值的函数,脱粒.向量sim_pd是模拟的检测概率,也是阈值的函数。接收器设置阈值,以便确定目标是否存在。上面的直方图表明,最佳阈值约为1.8。

nbins=1000;阈值步长=linspace(阈值低,阈值高,nbins);模拟pd=0(1,nbins);模拟pfa=0(1,nbins);K = 1:n = n;Sim_pd (k) = sum(h1a >= thresh);Sim_pfa (k) = sum(h0a >= thresh);结束sim_pd=sim_pd/n脉冲;sim_pfa=sim_pfa/Npulse;

要绘制实验ROC曲线,必须将Pfa曲线反转,以便绘图PdPfa.你可以把Pfa曲线只有在你可以表达的时候Pfa的严格单调递减函数脱粒.来表达Pfa这样,找到所有的数组下标Pfa是相邻指标上的常数。然后,将这些值从PdPfa数组。

pfa_diff = diff (sim_pfa);if (pfa_diff == 0);sim_pfa (idx) = [];sim_pd (idx) = [];

限制最小的Pfa为 1 0 - 6

minpfa = 1 e-6;N = sum(sim_pfa >= minpfa);sim_pfa = fliplr (sim_pfa (1: N))。”;sim_pd = fliplr (sim_pd (1: N))。”;

计算理论PfaPd最小值Pfa为1。然后绘制理论Pfa曲线。

[theor_pd, theor_pfa] = rocsnr (snr_min,“SignalType”...“NonfluctuatingNoncoherent”...“MinPfa”minpfa,“NumPoints”N“小脉冲”1);semilogx (theor_pfa theor_pd)在…上semilogx (sim_pfa sim_pd,“r”。)头衔(“模拟和理论ROC曲线”)xlabel(“Pfa”)伊拉贝尔(“Pd”网格)在…上传奇(“理论”“模拟”“位置”“本身”

图中包含一个轴对象。以模拟ROC曲线和理论ROC曲线为标题的坐标轴对象包含两个线型对象。这些对象代表理论和模拟。

使用一百万个脉冲改进模拟

在前面的模拟中,Pd值较低Pfa不要沿着平滑曲线下降,甚至不要向下延伸到指定的工作状态。原因是在非常低的Pfa水平,极少数(如果有)样本超过阈值。要在低水平生成曲线Pfa,则必须使用若干的逆序样本Pfa.这种类型的模拟需要很长时间。下面的曲线使用了100万个脉冲而不是4.5万个。要运行此模拟,请重复示例,但设置脉冲到1000000。