蒙特卡罗ROC模拟
这个例子展示了如何生成一个接受者操作特征(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;波形= phased.LinearFMWaveform (“脉冲宽度”pulse_duration,…“SampleRate”fs,“SweepBandwidth”,…pulse_bw,脉冲重复频率的脉冲重复频率);
实现一个特定的Pd和Pfa要求足够的信号功率到达接收机后目标反映了信号。计算所需的最小信噪比达到指定的假警报的可能性和概率的检测通过Albersheim方程。
snr_min = albersheim (pd, pfa);
为实现这一目标信噪比,必须足够的力量传播到目标。使用雷达方程估计峰值传输能量,peak_power
在dB,要求达到指定的信噪比目标在3000米的范围。接收到的信号还取决于目标雷达截面(RCS)。这都要遵循一套nonfluctuating模型(Swerling 0)。有相同的传输和接收的雷达获得20分贝。雷达方程
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 = phased.Platform (…“InitialPosition”,(0;0;0),…“速度”,(0;0;0]);天线= phased.IsotropicAntennaElement (…“FrequencyRange”[5 e9 15 e9]);发射机= phased.Transmitter (…“获得”txrx_gain,…“PeakPower”peak_power,…“InUseOutputPort”,真正的);散热器= phased.Radiator (…“传感器”、天线、…“OperatingFrequency”、fc);
建立目标系统对象
创建一个目标系统objec™对应于一个实际的反映目标与一个非零目标横截面。从这个目标将模拟实际的雷达反射的回报。为了计算假警报,创建第二个目标系统雷达截面为零的物体。从这个目标为零,除了噪音反射。
{1}= phased.RadarTarget(目标…“MeanRCS”tgt_rcs,…“OperatingFrequency”、fc);targetplatform {1} = phased.Platform (…“InitialPosition”,(target_range;0;0]);{2}= phased.RadarTarget(目标…“MeanRCS”0,…“OperatingFrequency”、fc);targetplatform {2} = phased.Platform (…“InitialPosition”,(target_range;0;0]);
设置无线传播的系统对象
模型传播环境的雷达和目标。
{1}= phased.FreeSpace(频道…“SampleRate”fs,…“TwoWayPropagation”,真的,…“OperatingFrequency”、fc);{2}= phased.FreeSpace(频道…“SampleRate”fs,…“TwoWayPropagation”,真的,…“OperatingFrequency”、fc);
设置接收机系统对象
通过设置指定噪声NoiseMethod
财产噪声温度的
和ReferenceTemperature
财产290 K。
收集器= phased.Collector (…“传感器”、天线、…“OperatingFrequency”、fc);接收机= phased.ReceiverPreamp (…“获得”txrx_gain,…“NoiseMethod”,噪声温度的,…“ReferenceTemperature”,290.0,…“NoiseFigure”0,…“SampleRate”fs,…“EnableInputPort”,真正的);接收器。SeedSource =“属性”;接收器。种子= 2010;
指定网格夏令时间
夏令时间网格是时间样本的集合在一个脉冲重复间隔时间。每个样本对应一个范围。
fast_time_grid = unigrid (0,1 / fs, 1 /脉冲重复频率,“()”);rangebins = c * fast_time_grid / 2;
创建发射脉冲波形
创建您想要的波形传输。
wavfrm =波形();
创建传输信号,包括传输天线收益。
[sigtrans, tx_status] =发射机(wavfrm);
从波形系统对象创建匹配滤波器系数。然后创建匹配滤波器系统对象。
MFCoeff = getMatchedFilter(波形);matchingdelay =大小(MFCoeff, - 1) - 1;过滤器= phased.MatchedFilter (…“系数”MFCoeff,…“GainOutputPort”、假);
计算目标区间本
计算目标区间,然后计算出索引范围本阵。因为目标和雷达是静止的,使用相同的位置和速度的值在整个模拟循环。你可以假定整个仿真的范围本指数是恒定的。
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));
循环脉冲
创建一个信号处理循环。每一步都是通过执行系统对象。循环处理脉冲两次,一次为target-absent target-present条件,一旦条件。
使用辐射信号送入太空
phased.Radiator
。传播信号到目标和天线使用
phased.FreeSpace
。反映信号从目标使用
phased.Target
。接收反射信号的天线使用
phased.Collector
。通过接收到的信号接收放大器使用
phased.ReceiverPreamp
。这一步还增加了随机噪声的信号。使用匹配滤波器放大信号
phased.MatchedFilter
。存储匹配滤波器输出的目标区间本指数进行进一步分析。
rcv_pulses = 0(长度(sigtrans), Npulsebuffsize);h1 = 0 (Npulse, 1);h0 = 0 (Npulse, 1);Nbuff =地板(Npulse / Npulsebuffsize);非快速眼动= 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_pulses(:,米)=接收机(rcvsig, ~ (tx_status > 0));结束rcv_pulses =过滤器(rcv_pulses);rcv_pulses =缓冲区(rcv_pulses (matchingdelay + 1:结束),大小(rcv_pulses, 1));如果h1 (n = = 1 (1: Npulsebuffsize) + (k - 1) * Npulsebuffsize) = rcv_pulses (rangeidx:)。”;其他的h0 ((1: Npulsebuffsize) + (k - 1) * Npulsebuffsize) = rcv_pulses (rangeidx:)。”;结束结束如果非快速眼动睡眠(> 0)为非快速眼动睡眠m = 1: rcv_pulses(:,米)=接收机(rcvsig, ~ (tx_status > 0));结束rcv_pulses =过滤器(rcv_pulses);rcv_pulses =缓冲区(rcv_pulses (matchingdelay + 1:结束),大小(rcv_pulses, 1));如果h1 (n = = 1(1:非快速眼动)+ Nbuff * Npulsebuffsize) = rcv_pulses(非快速眼动睡眠rangeidx, 1:)。”;其他的h0((1:非快速眼动)+ Nbuff * Npulsebuffsize) = rcv_pulses(非快速眼动睡眠rangeidx, 1:)。”;结束结束结束
创建匹配滤波器输出的柱状图
计算直方图的target-present和target-absent回报。使用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 binedges)从标题(“Target-Absent Vs Target-Present直方图”)传说(没有目标的,“目标”)
比较模拟和理论Pd和Pfa
来计算Pd和Pfa计算实例的数量,target-absent返回和target-present返回超过给定的阈值。这组阈值有一个细的粒度比垃圾箱用来创建直方图在前面的模拟。然后,规范化这些计数脉冲的数量估计的概率。向量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_steps (k);sim_pd (k) =总和(h1a > =打);sim_pfa (k) =总和(h0a > =打);结束sim_pd = sim_pd / Npulse;sim_pfa = sim_pfa / Npulse;
绘制实验ROC曲线,必须转化Pfa曲线,这样您就可以Pd对Pfa。你可以反Pfa只有当你可以表达曲线Pfa作为一个严格单调递减函数打
。来表达Pfa通过这种方式,找到所有指标的数组Pfa是在邻近指数不断。然后,删除这些值Pd和Pfa数组。
pfa_diff = diff (sim_pfa);idx = (pfa_diff = = 0);sim_pfa (idx) = [];sim_pd (idx) = [];
最小的Pfa限制 。
minpfa = 1 e-6;N =总和(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“NumPulses”1);semilogx (theor_pfa theor_pd)在semilogx (sim_pfa sim_pd,“r”。)标题(“模拟和理论ROC曲线”)包含(Pfa的)ylabel (“Pd”网格)在传奇(“理论”,“模拟”,“位置”,“本身”)
提高仿真使用一百万次脉冲
在前面的仿真中,Pd值较低Pfa不沿着光滑曲线下降,甚至不延伸至指定的操作制度。这样做的原因是,在非常低Pfa水平,很少,如果有的话,样品超过阈值。生成曲线在低Pfa,你必须使用的样本数量的倒数Pfa。这种类型的模拟需要很长时间。下面的曲线使用一百万脉冲,而不是45000。这个模拟运行,重复的例子,但集Npulse
到1000000。