主要内容

蒙特卡罗模拟中华民国

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

ROC曲线图Pd作为Pfa.ROC曲线的形状取决于接收信号的信噪比。如果到达的信号信噪比是已知的,那么ROC曲线显示了系统在以下方面的表现如何PdPfa.如果您指定PdPfa,然后您可以确定实现此要求所需的功率。

您可以使用该函数ROCSR计算理论ROC曲线。此示例显示了单天线雷达系统的蒙特卡罗模拟生成的ROC曲线,并将该曲线与理论曲线进行了比较。

指定雷达需求

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

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,...“采样器”fs,“扫频带宽”...pulse_bw,脉冲重复频率的脉冲重复频率);

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

snr_min=阿尔伯斯海姆(pd,pfa);

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

txrx增益=20;峰值功率=((4*pi)^3*噪声波(1/脉冲持续时间)*目标范围^4*...db2pow(snr_min))/(db2pow(2*txrx_增益)*tgt_rcs*lambda^2)
峰值功率=293.1830

设置变送器系统对象

创建系统对象,这些对象构成了仿真的传输部分:雷达平台、天线、发射器和散热器。

antennaplatform =分阶段。平台(...“InitialPosition”, (0;0;0),...“速度”, (0;0;0]);天线=分阶段。IsotropicAntennaElement (...“FrequencyRange”,[5e9 15e9]);发射机=相控发射机(...“获得”txrx_gain,...“峰值功率”peak_power,...“InUseOutputPort”,对);散热器=相控。散热器(...“传感器”、天线、...“OperatingFrequency”、fc);

设置目标系统对象

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

{1} =阶段性目标。RadarTarget (...“MeanRCS”tgt_rcs,...“OperatingFrequency”,fc);targetplatform{1}=分阶段的.Platform(...“InitialPosition”, (target_range;0;0]);{2} =阶段性目标。RadarTarget (...“MeanRCS”,0,...“OperatingFrequency”、fc);targetplatform{2} =分阶段。平台(...“InitialPosition”, (target_range;0;0]);

设置自由空间传播系统对象

对雷达与目标之间的传播环境进行建模。

通道{1}=phased.FreeSpace(...“采样器”fs,...“TwoWayPropagation”,真的,...“OperatingFrequency”,fc);通道{2}=phased.FreeSpace(...“采样器”fs,...“TwoWayPropagation”,真的,...“OperatingFrequency”、fc);

设置Receiver系统对象

通过设置NoiseMethod财产噪声温度的ReferenceTemperature财产到290 K。

收集器=分阶段。收集器(...“传感器”、天线、...“OperatingFrequency”,fc);接收器=相控。接收器前置放大器(...“获得”txrx_gain,...“NoiseMethod”噪声温度的...“参考温度”, 290.0,...“噪音图”,0,...“采样器”fs,...“启用输入端口”,对);接收机种子源=“财产”;receiver.Seed=2010;

指定网格夏令时间

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

fast_time_grid = unigrid (0,1 / fs, 1 /脉冲重复频率,'[)');rangebins=c*快速时间网格/2;

从波形创建传输脉冲

创建你想要传输的波形。

wavfrm=波形();

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

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

从波形系统对象创建匹配的滤波器系数。然后创建匹配的滤波器系统对象™.

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

计算目标范围Bin

计算目标距离,然后将索引计算到距离元阵列中。因为目标和雷达是静止的,所以在整个模拟循环中使用相同的位置和速度值。您可以假设整个模拟中的距离元索引是恒定的。

ant_pos=antennaplatform.InitialPosition;ant_vel=antennaplatform.Velocity;tgt_pos=targetplatform{1}.InitialPosition;tgt_vel=targetplatform{1}.Velocity;[tgt_rng,tgt_ang]=射程角(tgt_pos,ant_pos);rangeidx=val2ind(tgt_rng,rangebins(2)—射程箱(1));

循环脉冲

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

  1. 将信号辐射到太空分阶段。散热器

  2. 将信号传播到目标,并返回到天线使用分阶段自由空间

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

  4. 利用天线接收反射信号相控收集器

  5. 使用将接收到的信号通过接收放大器分阶段。ReceiverPreamp.这一步也增加了信号的随机噪声。

  6. 使用匹配滤波器对放大的信号进行匹配滤波相位匹配滤波器

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

rcv_pulses = 0(长度(sigtrans), Npulsebuffsize);h1 = 0 (Npulse, 1);h0 = 0 (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,...蚂蚁级、tgt级);rcvsig=目标{n}(trsig);rcvsig=收集器(rcvsig,tgt_ang);对于k = 1: Nbuff对于m = 1:Npulsebuffsize 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:Npulsebuffsize) + (k-1)*Npulsebuffsize) = rcv_脉冲(rangeidx,:).';其他的h0((1:Npulsebuffsize) + (k-1)*Npulsebuffsize) = rcv_脉冲(rangeidx,:).';终止终止如果非快速眼动睡眠(> 0)对于m=1:Nrem rcv_脉冲(:,m)=接收器(rcvsig,~(tx_状态>0));终止rcv_pulses =过滤器(rcv_pulses);rcv_pulses =缓冲区(rcv_pulses (matchingdelay + 1:结束),大小(rcv_pulses, 1));如果n==1 h1((1:Nrem)+Nbuff*Npulsebuffsize)=rcv_脉冲(范围IDX,1:Nrem)。”;其他的h0((1:Nrem) + Nbuff*Npulsebuffsize) = rcv_脉冲(rangeidx,1:Nrem). `;终止终止终止

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

计算目标存在和目标不存在返回的直方图。使用100个箱子粗略估计信号值的传播。设置从最小信号到最大信号的直方图值范围。

h1a = abs (h1);h0a = abs (h0);thresh_low = min ([h1a; h0a]);thresh_hi = max ([h1a; h0a]);nbins = 100;binedges = linspace (thresh_low thresh_hi nbins);图直方图(h0a binedges)直方图(h1a,边)保持不变头衔(“目标缺失Vs目标存在直方图”)传奇(没有目标的“目标”

图中包含一个坐标轴。标题为目标-缺席与目标-呈现直方图的轴包含2个直方图类型的对象。这些对象表示目标缺席,目标存在。

模拟与理论比较PdPfa

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

nbins = 1000;thresh_steps = linspace (thresh_low thresh_hi nbins);nbins sim_pd = 0 (1);nbins sim_pfa = 0 (1);对于k=1:nbins-thresh=thresh\u步数(k);sim\u-pd(k)=和(h1a>=thresh);sim\u-pfa(k)=和(h0a>=thresh);终止sim_pd = sim_pd / Npulse;sim_pfa = sim_pfa / Npulse;

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

pfa_diff=diff(sim_pfa);idx=(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曲线。

[Thero_pd,Thero_pfa]=rocsnr(snr_min,“信号类型”...“NonfluctuatingNoncoherent”...“MinPfa”minpfa,“NumPoints”N“NumPulses”1);semilogx (theor_pfa theor_pd)semilogx (sim_pfa sim_pd,“r”。)标题(模拟和理论ROC曲线)包含(Pfa的) ylabel (“Pd”)网格传奇(“理论的”“模拟”“位置”“SE”

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

改进模拟使用一百万脉冲

在前面的模拟中,Pd值较低Pfa不要沿着平滑的曲线下降,甚至不要向下延伸到指定的操作制度。原因是在非常低Pfa几乎没有样本超过阈值。在低时生成曲线Pfa,则必须使用数量与Pfa.这种类型的模拟需要很长时间。下面的曲线使用了100万个脉冲而不是4.5万个。要运行此模拟,请重复示例,但设置Npulse到一百万。