这个例子展示了如何使用蒙特卡罗模拟生成雷达系统的接收机工作特性(ROC)曲线。接收机的工作特性决定了系统检测目标的能力,同时在目标缺失(误报)时剔除较大的伪信号值。检测系统将通过将接收到的信号值与预先设定的阈值进行比较来声明目标的存在或不存在。探测概率(Pd)为目标实际存在时,瞬时信号值大于阈值的概率。虚警概率(Pfa)当目标不存在时,信号值大于阈值的概率。在这种情况下,信号是由噪声引起的,其特性取决于噪声统计数据。蒙特卡罗模拟在目标存在和不存在的情况下生成大量雷达回波。模拟计算Pd和Pfa是通过计算每种情况中超过阈值的信号值的比例。
ROC曲线图Pd作为…的函数Pfa.ROC曲线的形状取决于接收信号的信噪比。如果到达的信号信噪比是已知的,那么ROC曲线显示了系统在以下方面的表现如何Pd和Pfa。如果你指定Pd和Pfa,然后您可以确定需要多少能量才能达到这个要求。
你可以使用这个函数rocsnr
来计算理论ROC曲线。这个例子展示了一个单天线雷达系统的蒙特卡罗模拟生成的ROC曲线,并与理论曲线进行了比较。
设置期望的检测概率为0.9,虚警概率为 .将雷达的最大距离设置为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;
任何计算Pfa和pd需要处理多个信号。要保持较低的内存要求,请以脉冲块的形式处理信号。将要处理的脉冲数设置为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);
实现特定目标Pd和Pfa要求在目标反射信号后有足够的信号功率到达接收器。使用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索引在整个模拟中是常数。
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对象来完成。环路对脉冲进行两次处理,一次是针对目标存在状态,一次是针对目标缺失状态。
将信号发射到太空中相控散热器
.
使用将信号传播到目标并传回天线分阶段。空闲空间
.
反射来自目标使用的信号分阶段。目标
.
使用天线接收反射信号分阶段。收集器
.
将接收到的信号通过接收放大器相控接收前置放大器
.这一步也增加了信号的随机噪声。
匹配滤波放大信号使用分阶段。MatchedFilter
.
将匹配的过滤器输出存储在目标范围库索引处,以供进一步分析。
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: Nbuff为m=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目标存在直方图”)传说(没有目标的,“目标当前”)
来计算Pd和Pfa,计算目标缺席返回和目标存在返回超过给定阈值的实例数量。这组阈值比前面模拟中用于创建直方图的容器有更细的粒度。然后,根据脉冲的数量对这些计数进行归一化,以得到概率的估计。向量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曲线反转,以便绘图Pd对Pfa.你可以把Pfa曲线只有在你可以表达的时候Pfa的严格单调递减函数脱粒
.来表达Pfa这样,找到所有的数组下标Pfa是相邻指标上的常数。然后,将这些值从Pd和Pfa数组。
pfa_diff = diff (sim_pfa);if (pfa_diff == 0);sim_pfa (idx) = [];sim_pd (idx) = [];
限制最小的Pfa为 .
minpfa = 1 e-6;N = sum(sim_pfa >= minpfa);sim_pfa = fliplr (sim_pfa (1: N))。”;sim_pd = fliplr (sim_pd (1: N))。”;
计算理论Pfa和Pd最小值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”网格)在…上传奇(“理论”,“模拟”,“位置”,“本身”)
在前面的模拟中,Pd值较低Pfa不要沿着平滑曲线下降,甚至不要向下延伸到指定的工作状态。原因是在非常低的Pfa水平,极少数(如果有)样本超过阈值。要在低水平生成曲线Pfa,则必须使用若干的逆序样本Pfa.这种类型的模拟需要很长时间。下面的曲线使用了100万个脉冲而不是4.5万个。要运行此模拟,请重复示例,但设置脉冲
到1000000。