Документация Engee
Notebook

Обнаружение сигнала в белом гауссовском шуме

В этом примере рассматривается обнаружение детерминированного сигнала в комплексном белом гауссовском шуме. Такая ситуация часто встречается в радиолокации, гидролокации и коммуникационных приложениях.

Введение

Существует множество различных видов детекторов для использования в различных приложениях. Среди наиболее популярных - байесовский детектор, детектор максимального правдоподобия (ML) и детектор Неймана-Пирсона (NP). В радарных и гидролокационных приложениях NP является наиболее популярным выбором, поскольку он может обеспечить вероятность ложной тревоги (Pfa) на определенном уровне.

В этом примере мы ограничимся сценарием, в котором сигнал является детерминированным, а шум - белым и гауссовским. И сигнал, и шум являются сложными.

В примере рассматриваются следующие темы и их взаимосвязь: когерентное обнаружение, некогерентное обнаружение, согласованная фильтрация и кривые операционных характеристик приемника (ROC).

Модель сигнала и шума

Предполагается, что принимаемый сигнал соответствует модели:

\begin{align} x(t)=s(t)+n(t) \end{align}

где $s(t)$ - сигнал, а $n(t)$ - шум. Не теряя общности, мы предполагаем, что мощность сигнала равна 1 ватту, а мощность шума определяется соответствующим образом на основе отношения сигнал/шум (SNR). Например, для SNR 10 дБ мощность шума, то есть дисперсия шума, будет равна 0,1 ватта.

Согласованная фильтрация

Согласованный фильтр часто используется на переднем фронте приемника для повышения SNR. С точки зрения дискретного сигнала, коэффициенты согласованного фильтра просто задаются комплексно сопряженными обратными выборками сигнала.

При работе со сложными сигналами и шумами существует два типа приемников. Первый тип - это когерентный приемник, который предполагает, что известны и амплитуда, и фаза принимаемого сигнала. Это приводит к идеальному совпадению между коэффициентами согласованного фильтра и сигналом s. Поэтому коэффициенты согласованного фильтра можно рассматривать как сопряженный сигнал s. Тогда работа согласованного фильтра может быть смоделирована как

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

Заметим, что хотя общий выход $y$ по-прежнему является комплексной величиной, сигнал полностью характеризуется $∣s∣^2$ , который является вещественным числом и содержится в вещественной части $y$. Следовательно, детектор, следующий за согласованным фильтром в когерентном приемнике, обычно использует только вещественную часть принимаемого сигнала. Такой приемник обычно обеспечивает наилучшую производительность. Однако когерентный приемник уязвим к фазовым ошибкам. Кроме того, когерентный приемник требует дополнительного оборудования для выполнения фазового детектирования. Для некогерентного приемника принимаемый сигнал моделируется как копия исходного сигнала со случайной фазовой ошибкой. При некогерентном сигнале обнаружение после согласованного фильтра обычно основано на мощности или величине сигнала, поскольку для полного определения сигнала необходимы как действительная, так и мнимая части.

Обнаружитель

Целевая функция правила принятия решений NP может быть записана как

\begin{align} J = P_d + g(P_{fa} - a), \end{align}

т.е. максимизировать вероятность обнаружения ($Pd$), при ограничении вероятности ложной тревоги ($Pfa$), на заданном уровне a. Переменная g в уравнении - множитель Лагранжа. Детектор NP может быть сформирован как тест отношения правдоподобия ($LRT$) следующим образом:

\begin{align} \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$ может быть такой простой, как

\begin{align} z = |y| \end{align}

тогда упрощенный детектор становится

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

T - порог для достаточной статистики z, действующий так же, как порог Th для LRT. Таким образом, порог связан не только с распределениями вероятностей, но и зависит от выбора достаточной статистики.

Обнаружение одного образца с помощью когерентного приемника

Сначала мы рассмотрим пример обнаружения сигнала в шуме с помощью одного образца.

Предположим, что сигнал представляет собой образец единичной мощности, а SNR составляет 3 дБ. Используя моделирование Монте-Карло на 100000 попыток, мы генерируем сигнал и шум следующим образом

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, поэтому выигрыш в SNR отсутствует.

Теперь мы выполним обнаружение и проверим работу детектора. Для когерентного приемника принимаемый сигнал после согласованного фильтра имеет вид

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

Достаточной статистикой, т.е. значением, используемым для сравнения с порогом обнаружения, для когерентного детектора является реальная часть принятого сигнала после согласованного фильтра, т.е,

In [ ]:
z = real(y);

Предположим, что мы хотим зафиксировать $Pfa$ на уровне $10^{-3}$. Учитывая достаточную статистику $z$, правило принятия решений выглядит следующим образом

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

где порог $T$ связан с $Pfa$ следующим образом:

\begin{align} 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. Поскольку SNR обычно называют отношением между мощностью сигнала и шума, учитывая единицы измерения каждой величины в этом выражении, мы можем увидеть, что

\begin{align} \frac{T}{\sqrt{NM}}=\sqrt{\rm SNR}\ . \end{align}

Поскольку N и M фиксированы после выбора формы шума и сигнала, существует соответствие между T и SNR. Учитывая, что T - это порог сигнала, SNR можно рассматривать как порог отношения сигнала к шуму. Таким образом, уравнение порога можно переписать в виде

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

Требуемый порог SNR при комплексном белом гауссовском шуме для детектора NP можно рассчитать с помощью функции npwgnthresh следующим образом:

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

Обратите внимание, что этот порог, хотя он также имеет форму значения SNR, отличается от SNR принятого сигнала. Пороговое значение SNR - это расчетное значение, основанное на желаемой эффективности обнаружения, в данном случае Pfa; в то время как SNR принятого сигнала - это физическая характеристика сигнала, определяемая средой распространения, формой волны, мощностью передачи и т. д.

Истинный порог T может быть получен из этого порога SNR как

\begin{align} 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

что соответствует нашим требованиям.

Чтобы увидеть связь между SNR, Pd и Pfa на графике, мы можем построить теоретическую ROC-кривую с помощью функции rocsnr для значения SNR 3 дБ как

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

Из рисунка видно, что измеренные значения Pd=0,1390 и Pfa=0,0009, полученные выше для значения SNR 3 дБ, соответствуют теоретической точке на 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}

Пороговое значение отношения сигнал/шум SNR для детектора NP может быть рассчитано с помощью npwgnthresh следующим образом:

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

Порог, T, определяется из SNR следующим образом

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 одного образца данных. Это значение SNR, отображаемое на графике ROC-кривой. Точка на ROC дает требуемый SNR одного образца, необходимый для достижения соответствующих Pd и Pfa. Однако это НЕ пороговое значение SNR, используемое для обнаружения. Согласно правилу принятия решений Неймана-Пирсона, порог SNR - второе значение SNR, которое мы видим при обнаружении, - определяется распределением шума и желаемым уровнем Pfa. Поэтому такой порог SNR действительно соответствует оси Pfa на ROC-кривой. Если зафиксировать SNR одного образца, как показано на приведенных выше графиках ROC-кривых, то каждая точка на кривой будет соответствовать значению Pfa, которое, в свою очередь, переводится в пороговое значение SNR. Использование этого порогового значения SNR для обнаружения приведет к соответствующему значению Pd.

Обратите внимание, что порог SNR может не совпадать с порогом, используемым непосредственно в реальном детекторе. В реальном детекторе для обнаружения обычно используется легко вычисляемая достаточная статистическая величина. Таким образом, истинный порог должен быть выведен из вышеупомянутого порога SNR таким образом, чтобы он соответствовал выбору достаточной статистики.