Engee 文档
Notebook

多采样信号检测

该示例展示了如何利用多个接收到的信号样本检测复白高斯噪声中的信号。使用匹配滤波器可充分利用处理过程。

简介

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

与上例相同,假设信号强度为 1,一个样本的信噪比(SNR)为 3 dB。蒙特卡罗试验次数为 100,000 次。期望的误报概率水平 (Pfa) 为 0.001。

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

使用长波形进行信号检测

如上例所述,阈值是根据 Pfa 确定的。因此,只要阈值选定,Pfa 就保持不变,反之亦然。同时,我们当然希望有更高的检测概率(Pd)。实现这一目标的方法之一是使用多个样本进行检测。例如,在前面的例子中,单个样本的信噪比为 3 dB。如果可以使用多个样本,匹配滤波器就可以带来额外的信噪比增益,从而提高性能。实际上,可以使用更长的信号来实现这一增益。在离散时间信号处理中,可以通过提高采样率来获得多个样本。

假设现在的信号由两个样本组成:

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

请注意,匹配滤波器可改善 OSN。

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

我们来绘制新 VSD 值的反演曲线:

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

从图中可以看出,Pfa 和 Pd 给出的点正好落在曲线上。因此,ROC 曲线对应的信噪比就是匹配滤波器输出端单个样本的信噪比。这表明,虽然可以使用多个样本进行检测,但与单个样本的情况相比,单个样本的信噪比阈值(程序中的 snrthreshold)并没有变化。没有变化是因为阈值基本上是由 Pfa 决定的。但是,由于匹配滤波器的额外增益,最终阈值 T 会发生变化。与只使用一个样本进行检测的情况相比,最终的 Pfa 值保持不变。但是,额外的匹配增益将 Pd 从 0.1390 提高到 0.3947。

为验证 Pd、Pfa 和信噪比之间的关系,可对非相干接收机进行类似计算。

利用脉冲积分进行信号检测

脉冲积分通常用于雷达和声纳系统,以进一步提高探测性能。如果接收器是相干的,脉冲积分就简化为将匹配滤波脉冲的实部相加。因此,如果使用相干接收器,信噪比的改善是线性的。如果对 10 个脉冲进行积分,信噪比将提高 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)建模时会遇到这种情况。第一种方法是对$|y^2|$ 的脉冲求和,这通常被称为二次定律检测。第二种方法是对所有脉冲求和$|y|$ ,这通常被称为线性检测器。当 ROS 较小时,最好使用平方律检测器,而当 ROS 较大时,则使用线性检测器。在本模拟中,我们使用的是平方律检测器。不过,这两种检测器之间的差别通常在 0.2 dB 以内。

在本示例中,选择比线性检测器更常用的平方律检测器。您可以使用 pulsint 函数来执行二次律检测器。该函数将输入数据矩阵的每一列都视为一个单独的脉冲。pulsint 函数执行以下操作

\开始 y=\sqrt{|x_1|^2+\cdots+|x_n|^2}\ . \end{align}

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

给定新的充分统计量 z 后,阈值 T 和 Pfa 之间的关系定义如下

\开始 P_{fa}=1-I\left(\frac{T^2/(NM)}{\sqrt{L}},L-1\right) =1-I\left(\frac{rm SNR}{\sqrt{L}},L-1\right)\ . \end{align}

其中 \开始 I(u,K)=\int_0^{u\sqrt{K+1}}\frac{e^{-\tau}\tau^K}{K!}d\tau \end{align}

是不完全皮尔逊伽马函数的形式,L 是用于脉冲积分的脉冲数。使用二次定律检测器,可以像之前一样使用 npwgnthresh 函数计算与脉冲积分相关的信噪比阈值。

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

由此得出的充分统计阈值$z$ 定义如下

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 曲线上的信噪比定义了用于单脉冲检测的一个采样的信噪比。

这一信噪比值也可通过阿尔伯斯海姆方程从 Pd 和 Pfa 得出。从阿尔伯斯海姆方程得到的结果只是一个近似值,但在常用的 Pfa、Pd 和脉冲积分范围内已经足够好了。

注意:阿尔伯斯海姆方程有几个假设条件:

  • 目标无波动、
  • 噪声是白高斯噪声
  • 接收器是非相干的;
  • 使用线性检测器进行检测。

要计算单个样本达到特定 Pd 和 Pfa 所需的均方根误差,请使用阿尔伯沙函数

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

计算出的所需 OSD 值对应于 4 dB 的新 OSD 值。

为了了解脉冲积分对 Pd 的改善,我们绘制了没有脉冲累积的 ROC 曲线。

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

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

结论

本示例说明了在探测中使用多重信号采样如何提高探测概率,同时保持所需的误报概率水平。特别是,它还展示了使用较长信号或脉冲累积法如何提高 Pd。举例说明了 Pd、Pfa、ROC 曲线和阿尔伯斯海姆方程之间的关系。效率是通过蒙特卡罗模拟计算得出的。