Engee 文档
Notebook

在白噪声中检测信号

本例研究如何在复杂的高斯噪声中检测确定信号。这种情况在雷达、声纳和通信系统中经常遇到。

引言

有许多不同类型的检测器可用于各种应用。其中最常用的是贝叶斯检测器、最大似然检测器和奈曼-皮尔逊准则(KNP)检测器。在雷达和声纳系统中,KNP 是最受欢迎的选择,因为它可以提供一定水平的误报概率(FAP)。

在本例中,我们只考虑信号是确定的,噪声是高斯白噪声的情况。

示例包括以下部分:相干检测、非相干检测、匹配滤波和接收器检测曲线(ROC)。

信号和噪声模型

假定接收到的信号符合模型:

\开始 x(t)=s(t)+n(t) \end{align} 其中$s(t)$ 为信号,$n(t)$ 为噪声。

假设信号功率等于 1 瓦,噪声功率根据信噪比 (SNR) 适当确定。例如,信噪比为 10 dB 时,噪声功率(即噪声方差)为 0.1 瓦。

匹配滤波

接收器通常使用匹配滤波器来提高信噪比。从离散信号的角度来看,匹配滤波器的系数指定为相对于发射信号的复共轭值。

在处理复杂信号和噪声时,有两种类型的接收器。第一种是相干接收器,它假定接收信号的振幅和相位是已知的。这将导致相干滤波器系数与信号 s 完美匹配。因此,匹配滤波器的系数可视为共轭信号 s。那么,匹配滤波器的工作模式可以是

\开始 y = s^x = s^(s+n) = |s|^2 + s^*n\ . \end{align}

请注意,虽然总输出$y$ 仍然是一个复数,但信号完全由$∣s∣^2$ 表征,它是一个实数,包含在同相分量$y$ 中。因此,相干接收机中匹配滤波器之后的检测器通常只使用接收信号的实部。这样的接收器通常性能最佳。然而,相干接收机容易受到相位误差的影响。此外,相干接收机还需要额外的设备来进行相位检测。对于非相干接收机,接收信号被模拟为带有随机相位误差的原始信号的副本。在非相干检测中,匹配滤波器后的信号功率用于计算同相和正交分量

检测器

决策规则 CNR 的目标函数可写成

\开始 J = P_d + g(P_{fa} - a)、 \结束

即在给定水平 a 下,最大化检测概率$(Pd)$ ,同时限制误报概率$(Pfa)$ 。等式中的变量 g 是拉格朗日乘数。NP 检测器可组成似然比检验$(LRT)$ ,如下所示:

\开始 \frac{p_y(y|H_1)}{p_y(y|H_0)}{{H_1 \atop >}\atop {< \atop H_0}}}}.Th\ . \end{align}

在这种特殊情况下$NP$ ,由于误报仅由噪声引起,阈值$Th$ 由噪声决定,以提供一个固定的$Pfa$ 。一般情况下,$LRT$ ,如上图所示,通常很难评估。在实际应用中,我们通常使用信号中易于计算的量,即充分统计量来替代两个概率密度函数的比值。例如,充分统计量$z$ 可以简单为

\开始{对齐} z = |y \end{align}

则简化后的探测器变为

\开始 z {{H_1 \atop >}\atop {< \atop H_0}}T\ . \end{align}

T 是充分统计量 z 的阈值,其作用与 LRT 的阈值 Th 相同。因此,阈值不仅与概率分布有关,还取决于充分统计量的选择。

使用相干接收器检测单个样本

我们首先来看一个利用单个样本在噪声中检测信号的例子。

假设信号为单个功率样本,信噪比为 3 dB。通过蒙特卡罗模拟 100000 次尝试,我们生成信号和噪声如下

In [ ]:
Pkg.add(["DSP"])
In [ ]:
using Random,DSP
# fix the random number generator
seed = 2024
rstream =  Xoshiro(seed)

Ntrial = Int64(1e5); #  количество попыток Монте-Карло
snrdb = 3; # ОСШ в dB
snr = db2pow(snrdb);# ОСШ в абсолютных единицах
spower = 1;               # мощность сигнала, Вт
npower = spower/snr; # мощность шума
namp = sqrt(npower/2); # амплитуда шума в каждом канале
s = ones(1,Ntrial);       # генерация сигнала
n = namp*(randn(rstream,1,Ntrial)+1im*randn(rstream,1,Ntrial));  # шум

请注意,噪声是复数、白噪声和高斯分布。

如果接收到的信号包含一个目标,其值等于

In [ ]:
x = s + n; # смесь сигнал с шумом

在这种情况下,匹配滤波器是微不足道的,因为信号本身就是一个单一样本。

In [ ]:
mf = 1;

在这种情况下,匹配滤波器的增益为 1,因此信噪比没有增益。

现在我们将进行检测并检查检测器的性能。对于相干接收机,匹配滤波器后的接收信号形式如下

In [ ]:
y = mf'*x; # применение согласованного фильтра;

相干检测器的充分统计量,即用于与检测阈值比较的值,是匹配滤波器后接收信号的实部,即

In [ ]:
z = real(y);

假设我们要将$Pfa$ 固定在$10^{-3}$ 。给定足够的统计量$z$ ,决策规则如下

\开始 z {{H_1 \atop >}\atop {< \atop H_0}}T \end{align}

其中,阈值$T$ 与$Pfa$ 的关系如下:

\开始 P_{fa}=\frac{1}{2}\left[ 1 - {\rm erf}\left(\frac{T}{\sqrt{NM}}\right)\right] \end{align}

在这个公式中,N 是信号功率,M 是匹配滤波器的增益。请注意,T 是匹配滤波器后的信号阈值,NM 是匹配滤波器后的噪声功率,因此$T/√ (NM)$ 可以看作是信号和噪声大小的比值,即与信噪比 SNR 有关。由于信噪比通常指的是信号功率和噪声功率的比值,考虑到这一表达式中各量的单位,我们可以看到

\开始{对齐} \frac{T}{sqrt{NM}}=\sqrt\rm SNR}\ 。 \end{align}

由于 N 和 M 在选择噪声和信号波形后是固定的,因此 T 和 SNR 之间存在对应关系。鉴于 T 是信号的阈值,SNR 可视为信噪比的阈值。因此,阈值方程可改写为

\开始 P_{fa}=\frac{1}{2}\left[ 1 - {\rm erf}left({/sqrt{SNR}}/right)/right]。 {end{align}

可以使用 npwgnthresh 函数计算 NP 检测器在复白高斯噪声下所需的信噪比阈值,计算公式如下:

In [ ]:
Pfa = 1e-3;
snrthreshold = db2pow(npwgnthresh(Pfa, 1,"coherent"));

请注意,尽管该阈值也采用 SNR 值的形式,但它与接收信号的 SNR 不同。信噪比阈值是根据所需的检测效率计算得出的值,在本例中为 Pfa;而接收信号的信噪比是信号的物理特性,由传播介质、波形、传输功率等决定。

真实阈值 T 可以从 SNR 阈值中推导出来,即

\开始 T=\sqrt{NM}\cdot\sqrt{\rm SNR}. \end{align}

In [ ]:
mfgain = mf'*mf;
# Для соответствия уравнению в тексте выше:
# npower - N 
# mfgain - M 
# snrthreshold - SNR
threshold = sqrt(npower*mfgain*snrthreshold);

检测是通过将信号与阈值进行比较来完成的。由于接收信号中包含原始信号 s,因此当接收信号通过阈值(即 z>T)时,检测就成功了。探测器探测目标的能力通常用 Pd 来衡量。在蒙特卡罗建模中,Pd 可计算为信号通过阈值的次数与试验总数之比。

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

另一方面,当检测结果表明有目标但实际上没有目标时,即接收到的信号通过阈值时只有噪声存在,就会发生误报。当没有目标时,检测器检测到目标的错误概率定义为 Pfa。

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

这符合我们的要求。

为了在图表上看到信噪比、Pd 和 Pfa 之间的关系,我们可以使用 rocsnr 函数绘制信噪比为 3 dB 时的理论 ROC 曲线,即

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

从图中可以看出,上述信噪比为 3 dB 时的测量值 Pd=0.1390 和 Pfa=0.0009 与 ROC 曲线上的理论点相对应。

使用非相干接收器检测单个样本

非相干接收器考虑到了接收信号的相位,因此对于所考虑的情况,信号 x 包含一个相位项,其定义为

In [ ]:
# simulate the signal
x = s.*exp.(1im*2*pi*rand(rstream,1,Ntrial)) .+ n;
y = mf'*x;

使用非相干接收器时,匹配滤波器后接收信号的功率(或幅度)用于与阈值进行比较。在此模型中,我们选择幅度作为充分统计量

In [ ]:
z = abs.(y);

考虑到我们选择的充分统计量 z,阈值与 Pfa 的关系式为

\begin{align} P_{fa}={rm exp}\left(-\frac{T^2}{NM}\right)={\rm exp}(-{\rm SNR})\ . \end{align}

NP 检测器的信噪比阈值 SNR 可通过 npwgnthresh 计算如下:

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

阈值 T 是根据信噪比确定的,如下所示

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

同样,Pd 可以通过

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

注意,得出的 Pd 不如相干接收器的性能。

在没有目标的情况下,接收到的信号只包含噪声。我们可以通过蒙特卡罗模拟计算出 Pfa 为

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

非相干接收机的 ROC 曲线为

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

我们可以看到,非相干接收机的检测器性能不如相干接收机。

结论

本例展示了如何使用 Engee 建模并执行各种检测方法。示例说明了信号检测中常见的几个变量之间的关系,即检测概率(Pd)、误报概率(Pfa)和信噪比(SNR)。特别是,该示例使用蒙特卡罗模拟计算了检测器的性能,并使用接收器工作特性曲线(ROC)验证了指标结果。

在检测信号时,我们会遇到两种 SNR 值。第一个是单个数据样本的 SNR。这是显示在 ROC 曲线图上的信噪比值。ROC 曲线上的点给出了达到相应 Pd 和 Pfa 所需的单个样本信噪比。然而,这并不是用于检测的阈值 SNR 值。根据奈曼-皮尔逊(Neyman-Pearson)决策规则,信噪比阈值(我们看到的用于检测的第二个信噪比值)由噪声分布和所需的 Pfa 水平决定。因此,这样的 SNR 阈值确实与 ROC 曲线上的 Pfa 轴相对应。如果我们固定单个样本的 SNR,如上面的 ROC 曲线图所示,曲线上的每个点将对应一个 Pfa 值,这反过来又转化为一个阈值 SNR 值。使用这个阈值 SNR 值进行检测,就会得到相应的 Pd 值。

请注意,信噪比阈值可能与实际检测器中直接使用的阈值不同。在实际检测器中,通常会使用一个易于计算的充分统计值来进行检测。因此,真正的阈值应从上述信噪比阈值中推导出来,使其与充分统计值的选择相匹配。