Engee 文档
Notebook

多样本信号检测

此示例演示如何使用多个接收信号样本检测复白高斯噪声中的信号。 使用一致的过滤器来利用处理。

导言

示例"在白噪声背景下检测信号"提出了检测信号的基本任务。 接收信号的仅一个样本用于检测。 在本例中,在检测过程中使用了更多的样品,以提高检测效率。

与前面的示例一样,假设信号强度为1,一个样本的信噪比(SNR)为3dB。 蒙特卡罗试验的数量是100,000。 期望的虚警概率水平(pfa)为0.001。

In [ ]:
using DSP
In [ ]:
Ntrial = Int64(1e5); # количество испытаний Монте-Карло 
Pfa = 1e-3; 
snrdb = 3; # SNR в дБ 
snr = db2pow(snrdb); # SNR в линейном масштабе 
npower = 1/snr; # мощность шума 
namp = sqrt(npower/2); # амплитуда шума в каждом канале

使用长波形的信号检测

如在前面的示例中所述,基于Pfa来确定阈值。 因此,只要选择阈值,Pfa就保持不变,反之亦然。 同时,当然希望具有更高的检测概率(Pd)。 实现这一点的一种方法是使用多个样本进行检测。 例如,在前一种情况下,一个样本上的SNR为3dB。 如果可以使用多个采样,那么一致的滤波器可以在SNR中提供额外的增益并因此提高性能。 在实践中,可以使用较长的信号来实现这样的增益。 在离散时间信号处理的情况下,可以通过提高采样速率来获得多个采样。

让我们假设信号现在由两个样本形成:

In [ ]:
Nsamp = 2;
wf = ones(Nsamp,1);
mf = conj.(reverse(wf)); # matched filter

对于相干接收机,信号、噪声和阈值定义如下

In [ ]:
using Random
# fix the random number generator
seed = 2014
rstream = Xoshiro(seed)

s = wf*ones(1,Ntrial);
n = namp*(randn(rstream,Nsamp,Ntrial)+1im*randn(rstream,Nsamp,Ntrial));
snrthreshold = db2pow(npwgnthresh(Pfa, 1,"coherent"));
mfgain = mf'*mf;
threshold = sqrt.(npower*mfgain*snrthreshold);   # Final threshold T;

如果目标存在:

In [ ]:
x = s + n;
y = mf'*x;
z = real(y);
Pd = sum(z.>threshold)/Ntrial
print("Pd = $(Pd)")
Pd = 0.39814

如果没有目标

In [ ]:
x = n;
y = mf'*x;
z = real(y);
Pfa = sum(z.>threshold)/Ntrial
print("Pfa = $(Pfa)")
Pfa = 0.00104

请注意,SNR通过一致滤波器得到改善。

In [ ]:
snr_new = snr*mf'*mf;
snrdb_new = pow2db.(snr_new)[1];
print("snrdb_new = $(round(snrdb_new;sigdigits=5))")
snrdb_new = 6.0103

让我们为新的SNR值构建一个维护曲线:

In [ ]:
rocsnr(snrdb_new,SignalType="NonfluctuatingCoherent",MinPfa=1e-4)
Out[0]:

从图中可以看出,Pfa和Pd设置的点直接落在曲线上。 因此,对应于ROC曲线的SNR是在匹配滤波器的输出处的一个样本的SNR。 这表明,尽管多个样本可用于检测,但与简单样本的情况相比,用于单个样本的SNR阈值(程序中的snrthreshold)不改变。 没有变化,因为阈值基本上由Pfa确定。 然而,最终阈值T由于匹配滤波器的附加增益而改变。 所得Pfa值与仅使用一个样品进行检测的情况相比保持相同。 然而,额外的一致增益将Pd从0.1390提高到0.3947。

为了测试Pd、Pfa和SNR之间的关系,可以对非相干接收机执行类似的计算。

通过脉冲积分进行信号检测

雷达和声纳系统通常使用脉冲集成来进一步提高检测性能。 如果接收器是相干的,则脉冲积分减少到添加匹配滤波脉冲的实部。 因此,当使用相干接收机时,SNR的改善线性地发生。 如果集成10个脉冲,SNR将提高10倍。 对于非相干接收器,这种依赖性并不那么简单。 下面的示例显示了脉冲集成与非相干接收器的使用。

假设积分为2个脉冲。 然后构造接收信号并对其应用匹配滤波器。

In [ ]:
PulseIntNum = 2;
Ntotal = PulseIntNum*Ntrial;
s = wf*exp.(1im*2*pi*rand(rstream,1,Ntotal));  # noncoherent
n = sqrt(npower/2).*(randn(rstream,Nsamp,Ntotal) + 1im*randn(rstream,Nsamp,Ntotal));

如果目标存在,我们得到

In [ ]:
x = s .+ n;
y = mf'*x;
y = reshape(y,Ntrial,PulseIntNum);  # reshape to align pulses in columns;

您可以使用两种可能的方法之一来积累冲动。 这两种方法都涉及近似第一种修正的贝塞尔函数,这是在使用多个脉冲对非相干检测过程的似然比检验(LRT)进行建模时发生的。 第一种方法是总结 通过脉冲,这通常被称为二次定律检测器。 第二种方法是总结 对于所有脉冲,通常称为线性检测器。 对于小SNR,优选使用平方律检测器,而对于大SNR,使用线性检测器更有利。 在这个模拟中,我们使用平方律检测器。 然而,两种类型的检测器之间的差异通常在0.2db以内。

对于此示例,请选择比线性检测器更受欢迎的二次定律检测器。 Pulsint函数可用于执行二次定律检测器。 该函数将输入数据矩阵的每一列视为单独的脉冲。 Pulsint函数执行操作

\开始{对齐}
y=\sqrt{|x_1|2+\cdots+|x_n/2}\。
\结束

In [ ]:
z = pulsint(y,"noncoherent");

阈值T和Pfa之间的关系,考虑到z的新的足够统计量,确定如下

\开始{对齐}
P_{fa}=1-I\左(\frac{T^2/(NM)}{\sqrt{L}},L-1\右)
=1-I\左(\frac{\rm SNR}{\sqrt{L}},L-1\右)\。
\结束

哪里
\开始{对齐}
I(u,K)=\int_0{u\sqrt{K+1}}\frac{e{-\tau}\tau^K}{K!n.头,头
\结束

不完全Pearson gamma函数的形式,并且L是用于积分脉冲的脉冲数。 使用二次定律检测器,可以像以前一样使用npwgnthresh函数计算与脉冲积分相关的SNR的阈值。

In [ ]:
snrthreshold = db2pow(npwgnthresh(Pfa,PulseIntNum,"noncoherent"));

得到的足够统计量的阈值, ,定义如下

In [ ]:
mfgain = mf'*mf;
threshold = (sqrt.(npower*mfgain*snrthreshold))[1];

检测的概率确定如下

In [ ]:
Pd = sum(z.>threshold)/Ntrial
print("Pd = $(Pd)")
Pd = 0.52807

然后使用具有集成2个脉冲的非相干检测器计算接收信号仅为噪声时的Pfa。

In [ ]:
x = n;
y = mf'*x;
y = reshape(y,Ntrial,PulseIntNum);
z = pulsint(y,"noncoherent");
Pfa = sum(z.>threshold)/Ntrial
print("Pfa = $(Pfa)")
Pfa = 0.00101

要构建脉冲积分ROC曲线,您需要在rocsnr函数中指定积分中使用的脉冲数。:

In [ ]:
rocsnr(snrdb_new,SignalType="NonfluctuatingNoncoherent",
    MinPfa=1e-4,NumPulses=PulseIntNum)
Out[0]:

再次,由Pfa和Pd设置的点落在曲线上。 因此,ROC曲线上的SNR确定用于单脉冲检测的单个样本的SNR。

这样的SNR值也可以使用Albersham方程从Pd和Pfa获得。 从Alberheim方程得到的结果只是一个近似值,但在Pfa,Pd和脉冲积分的常用范围内已经足够好了。

注意:Alberheim方程有几个假设:
-目标不会波动,
-白高斯噪声;
-接收器不连贯;
-使用线性检测器进行检测。

要计算单个样本实现特定Pd和Pfa所需的SNR,请使用Albersham函数

In [ ]:
snr_required = albersheim(Pd,Pfa,N=PulseIntNum)
print("snr_required = $(round(snr_required;digits=5))")
snr_required = 6.01593

此计算的所需SNR值对应于4dB的新SNR值。

为了看到由于脉冲积分导致Pd的改善,我们构建了没有脉冲积累的ROC曲线。

In [ ]:
rocsnr(snrdb_new,SignalType="NonfluctuatingNoncoherent",
    MinPfa=1e-4,NumPulses=1)
Out[0]:

从图中可以看出,在没有脉冲积累的情况下,Pd在Pfa1e-3处只能约为0.24。 当两个脉冲累积时,如上面的蒙特卡罗模拟所示,对于相同的Pfa,Pd约为0.53。

结论

该示例展示了如何在检测期间使用多个信号采样可以增加检测的概率,同时保持期望的虚警概率水平。 特别是,显示了如何使用更长的信号或脉冲累积方法可以改善Pd。 该示例显示了Pd,Pfa,ROC曲线与Alberheim方程之间的关系。 使用蒙特卡罗模拟计算效率。