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

Анализ эффективности детектирования с использованием характеристик обнаружения (Часть 1)

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

ROC-кривые часто используются для оценки эффективности радарного или гидролокационного детектора. ROC-кривые - это графики зависимости вероятности обнаружения (Pd) от вероятности ложной тревоги (Pfa) при заданном отношении сигнал/шум (SNR).

Используемые функции

In [ ]:
using SpecialFunctions,Statistics

function shnidman(Pd,Pfa,N::Int64=1,SwerlingCase::Int64=0)
    if SwerlingCase ==1
    K=1
    elseif SwerlingCase ==2
        K=N   
    end 
    if SwerlingCase ==3
        K=2
    elseif SwerlingCase ==4
            K=2*N   
    end
    if SwerlingCase ==5 || SwerlingCase ==0
            K = Inf 
    end
    C1 = (((17.7006*Pd-18.4496)*Pd+14.5339)*Pd-3.525)/K;
    C2 = 1/K*(exp(27.31*Pd-25.14)+(Pd-0.8)*(0.7*log(1e-5/Pfa)+(2*N-20)/80));

    if Pd<=0.872
        Cdb = C1;
    else 
        Cdb = C1+C2;
    end 

    alpha = 0;
    if N > 40
        alpha = 0.25;
    elseif N < 0.5
        alpha = 0.25 - N / 2;
    end

    etaPfa = sqrt( -0.8 * log( 4 * Pfa .* ( 1 - Pfa ) ) );
    etaPd = sign( Pd - 0.5 ) .* sqrt( -0.8 * log( 4 * Pd .* ( 1 - Pd ) ) )

    if isa(Pd, Number) && isa(Pfa,Number)
        eta = etaPd + etaPfa;
    else
        eta = repeat( etaPd, size( Pfa ) ) + repeat( etaPfa, size( Pd ) );
    end

    SNR = ( eta / N ) .* ( eta + 2 * sqrt( N / 2 + ( alpha - 0.25 ) ) );
    SNR = max(SNR, 0);
    return  Cdb +(10*log10(SNR)+300)-300
end;

Введение

Pd - это вероятность того, что 1 истинна, если произошло событие 1. Pfa - это вероятность утверждать, что 1 истинна, если произошло событие 0. В таких приложениях, как гидролокаторы и радары, событие 1 означает, что цель присутствует, а событие 0 - что цели нет.

Обнаружение одиночных импульсов

Учитывая значение SNR, вы можете рассчитать значения Pd и Pfa, которых может достичь линейный или квадратичный детектор с помощью одного импульса. Установите значение Pd, предположив, что SNR составляет 8 дБ, а требования диктуют значение Pfa не более 1%. Вы можете использовать функцию rocsnr для расчета значений Pd и Pfa, а затем определить, какое значение Pd соответствует Pfa = 0,01. Обратите внимание, что по умолчанию функция rocsnr предполагает когерентное обнаружение.

In [ ]:
Pd,Pfa = rocsnr(8,"Pd&Pfa");
idx = findfirst(round.(Pfa;sigdigits=16).==0.01) #find index for Pfa=0.01
print("idx = $(idx)")
idx = 81

Используя определенный выше индекс, вы можете найти значение Pd, соответствующее Pfa = 0,01.

In [ ]:
Pd[idx]
print("Pd[idx] = $(round(Pd[idx];sigdigits=5))")
Pd[idx] = 0.8899

Одна из особенностей функции rocsnr заключается в том, что вы можете задать вектор значений SNR, и функция рассчитает ROC-кривую для каждого из этих значений SNR. Вместо того чтобы отдельно вычислять значения Pd и Pfa для заданного SNR, вы можете просмотреть результаты в виде графика ROC-кривых. Функция rocsnr строит графики ROC-кривых по умолчанию, если не указаны выходные аргументы. Вызов функции rocsnr с входным вектором из четырех значений SNR и без выходных аргументов приводит к построению графика ROC-кривых.

In [ ]:
SNRvals = [2 4 8 9.4]
rocsnr(SNRvals)
Out[0]:

На графике выберите кнопку курсора данных на панели инструментов (или в меню Tools), а затем выберите кривую SNR = 8 дБ в точке, где Pd = 0,9, чтобы убедиться, что Pfa составляет приблизительно 0,01.

Обнаружение множественных импульсов

Одним из способов улучшения работы детектора является усреднение по нескольким импульсам. Это особенно полезно в тех случаях, когда интересующий сигнал известен и возникает в аддитивном комплексном белом шуме. Хотя этот способ применим как к линейным, так и к квадратичным детекторам, результат для квадратичных детекторов может быть смещен примерно на 0,2 дБ. Проанализируйте производительность, приняв SNR равным 8 дБ и усреднив по двум импульсам.

In [ ]:
rocsnr(8;NumPulses=2)
Out[0]:

На графике видно, что усреднение по двум импульсам привело к повышению вероятности обнаружения при заданном уровне ложной тревоги. При SNR 8 дБ и усреднении по двум импульсам вы можете ограничить вероятность ложной тревоги не более чем 0,0001 и получить вероятность обнаружения 0,9. Напомним, что для одного импульса вероятность ложной тревоги должна была составлять 1 %, чтобы достичь такой же вероятности обнаружения.

Некогерентное обнаружение

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

In [ ]:
rocsnr(SNRvals,SignalType="NonfluctuatingNoncoherent")
Out[0]:

Сфокусируйтесь на кривой ROC, соответствующей SNR 8 дБ. Осмотрев график с помощью курсора данных, вы увидите, что для достижения вероятности обнаружения 0,9 необходимо допустить вероятность ложного срабатывания до 0,05. Без использования фазовой информации вам потребуется более высокий SNR для достижения той же Pd при заданном Pfa. Для некогерентных линейных детекторов используйте уравнение Альбершема, чтобы определить, какое значение SNR обеспечит желаемые Pd и Pfa.

In [ ]:
SNR_valdB = albersheim(0.9,.01) # Pd=0.9 and Pfa=0.01
print("SNR_valdB = $(round(SNR_valdB;sigdigits=5)) дБ")
SNR_valdB = 9.5027 дБ

Построив ROC-кривую для значения SNR, аппроксимированного уравнением Альбершема, можно увидеть, что детектор достигнет Pd = 0,9 и Pfa = 0,01.Обратите внимание, что методика Альбершейма применима только к некогерентным детекторам.

In [ ]:
rocsnr(SNR_valdB,SignalType="NonfluctuatingNoncoherent")
Out[0]:

Обнаружение флуктуирующих целей

Во всех приведенных выше рассуждениях предполагается, что цель не колеблется, то есть статистические характеристики цели не меняются с течением времени.Однако в реальных сценариях цели могут ускоряться и замедляться, а также крениться и наклоняться. Эти факторы приводят к тому, что радиолокационное поперечное сечение (RCS) цели меняется со временем. Для описания случайного изменения RCS цели часто используется набор статистических моделей, называемых моделями Сверлинга.

Существует четыре модели Сверлинга, а именно Сверлинг 1 - 4. Не колеблющуюся цель часто называют Сверлинг 0 или Сверлинг 5. Каждая модель Сверлинга описывает, как RCS цели изменяется с течением времени, и распределение вероятности этого изменения.

Поскольку RCS цели меняется, кривые ROC для флуктуирующих целей не совпадают с кривыми для неколеблющихся. Кроме того, поскольку цели Сверлинга добавляют случайную фазу в принимаемый сигнал, для целей Сверлинга сложнее использовать когерентный детектор. Поэтому для целей Сверлинга часто используются некогерентные методы обнаружения.

Теперь сравните ROC-кривые для неколеблющейся цели и цели Swerling 1. В частности, вы хотите выяснить, каковы требования к SNR для обеих ситуаций, если вы хотите достичь одинаковых Pd и Pfa. Для такого сравнения часто удобно построить кривую ROC в виде зависимости Pd от SNR при изменяющемся Pfa. Мы можем использовать функцию rocpfa, чтобы построить ROC-кривую в таком виде.

Предположим, что обнаружение некогерентное, с 10 интегрированными импульсами, а желаемое значение Pfa не более 1e-8. Сначала постройте ROC-кривую для неколеблющейся цели.

In [ ]:
rocpfa(1e-8,NumPulses=10,SignalType="NonfluctuatingNoncoherent")
Out[0]:

Затем для сравнения постройте ROC-кривую для цели Swerling 1.

In [ ]:
rocpfa(1e-8,NumPulses=10,SignalType="Swerling1")
Out[0]:

Из рисунков видно, что для Pd, равного 0,9, требуется SNR около 6 дБ, если цель не колеблется. Однако если цель - модель Swerling case 1, требуемый SNR возрастает до более чем 14 дБ, что составляет разницу в 8 дБ. Это сильно повлияет на дизайн системы.

Как и в случае с неколеблющимися целями, для определения требуемого SNR без необходимости строить все кривые существуют уравнения аппроксимации. Уравнение, используемое для флуктуирующих целей, - это уравнение Шнидмана. Для сценария, используемого для построения ROC-кривых, требования к SNR можно вывести с помощью функции shnidman.

In [ ]:
snr_sw1_db = shnidman(0.9,1e-8,10,1)  # Pd=0.9, Pfa=1e-8, 10 pulses
print("snr_sw1_db = $(round(snr_sw1_db;sigdigits=5)) дБ")
snr_sw1_db = 14.713 дБ

Расчетное значение SNR соответствует значению, полученному из кривой.

Заключение

ROC-кривые полезны для анализа эффективности детекторов как для когерентных, так и для некогерентных систем. В данном примере функция rocsnr использовалась для анализа эффективности линейного детектора при различных значениях SNR. Также было рассмотрено улучшение работы детектора, достигаемое усреднением нескольких образцов. Наконец, в примере показано, как можно использовать функции rocsnr и rocpfa для анализа работы детектора при использовании некогерентного детектора для неколеблющихся и флуктуирующих целей.