В среде Неймана-Пирсона вероятность обнаружения максимизируется при условии ограничения, что вероятность ложного предупреждения не превышает заданный уровень. Вероятность ложного предупреждения зависит от отклонения шума. Поэтому, чтобы вычислить вероятность ложного предупреждения, необходимо сначала оценить отклонение шума. Если отклонение шума изменяется, необходимо настроить порог, чтобы поддерживать постоянную частоту ложных предупреждений. Постоянные детекторы частоты ложных предупреждений реализуют адаптивные процедуры, которые позволяют вам обновлять пороговый уровень своего теста, когда изменяется мощность помех.
Чтобы мотивировать необходимость адаптивной процедуры, примите простой тест двоичной гипотезы, где вы должны решить между гипотезами отсутствия сигнала и присутствия сигнала для одной выборки. Сигнал имеет амплитуду 4, и шум является нулевым гауссовым с единичным отклонением.
Сначала установите скорость ложного предупреждения 0,001 и определите порог.
T = npwgnthresh(1e-3,1,'real');
threshold = sqrt(db2pow(T))
threshold = 3.0902
Проверяйте, что этот порог приводит к желаемой вероятности ложного предупреждения, а затем вычислите вероятность обнаружения.
pfa = 0.5*erfc(threshold/sqrt(2)) pd = 0.5*erfc((threshold-4)/sqrt(2))
pfa = 1.0000e-03 pd = 0.8185
Затем примите, что степень шума увеличивается на 6,02 дБ, удваивая отклонение шума. Если ваш детектор не адаптируется к этому увеличению отклонения путем определения нового порога, ваша частота ложных предупреждений значительно увеличивается.
pfa = 0.5*erfc(threshold/2)
pfa = 0.0144
Следующий рисунок показывает эффект увеличения отклонения шума на вероятности ложного предупреждения для фиксированного порога.
noisevar = 1:0.1:10; noisepower = 10*log10(noisevar); pfa = 0.5*erfc(threshold./sqrt(2*noisevar)); semilogy(noisepower,pfa./1e-3) grid on title('Increase in P_{FA} due to Noise Variance') ylabel('Increase in P_{FA} (Orders of Magnitude)') xlabel('Noise Power Increase (dB)')
CFAR-детектор, усредняющий ячейку, оценивает отклонение шума для интересующей камеры области значений или тестируемой камеры путем анализа данных из соседних камер области значений, обозначенных как обучающие камеры. Шумовые характеристики в обучающих камерах приняты идентичными шумовым характеристикам в тестируемой камере (CUT).
Это предположение является ключевым в обосновании использования обучающих камер для оценки отклонения шума в CUT. Кроме того, среднесрочный CFAR-детектор принимает, что обучающие камеры не содержат никаких сигналов от целей. Таким образом, данные в обучающих камерах приняты состоящими только из шума.
Чтобы сделать эти предположения реалистичными:
Предпочтительно иметь некоторое количество буфера или guard cells между CUT и обучающими камерами. Буфер, предоставленный защитными камерами, защищает от утечки сигнала в обучающие камеры и отрицательно влияет на оценку отклонения шума.
Обучающие камеры не должны представлять камеры области значений, слишком удаленные в области значений от CUT, как показано на следующем рисунке.
Оптимальный оценщик для отклонения шума зависит от распределительных допущений и типа детектора. Предположим следующее:
Вы используете детектор квадратного закона.
У вас есть Гауссова, комплексная, случайная переменная (RV) с независимыми вещественными и мнимыми частями.
Каждая из вещественных и мнимых частей имеет средний нуль и отклонение, равную2/2.
Примечание
Если вы обозначаете это RV на Z = U + jV, квадратная величина |Z|2 следует экспоненциальному распределению со средним2.
Если выборки в обучающих камерах являются квадратными величинами таких сложных Гауссовых RV, можно использовать среднее значение выборки в качестве оценщика отклонения шума.
Чтобы реализовать среднее по ячейкам обнаружение CFAR, используйте phased.CFARDetector
. Можно настроить характеристики детектора, такие как количество обучающих камер и защитных камер, и вероятность ложного предупреждения.
В этом примере показано, как создать детектор CFAR и проверить его способность адаптироваться к статистике входных данных. Тест использует испытания только для шума. При помощи детектора квадратного закона по умолчанию можно определить, насколько близка эмпирическая частота ложных предупреждений к желаемой вероятности ложных предупреждений.
Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step
синтаксис. Для примера замените myObject(x)
с step(myObject,x)
.
Создайте объект детектора CFAR с двумя защитными камерами, 20 обучающими камерами и вероятностью ложного предупреждения 0,001. По умолчанию этот объект принимает детектор квадратного закона без импульсного интегрирования.
detector = phased.CFARDetector('NumGuardCells',2,... 'NumTrainingCells',20,'ProbabilityFalseAlarm',1e-3);
На каждой стороне тестируемой камеры (CUT) имеется 10 обучающих камеры и по 1 защитной камере. Установите индекс CUT равным 12.
CUTidx = 12;
Инициализируйте генератор случайных чисел для воспроизводимого набора входных данных.
rng(1000);
Установите отклонение шума равным 0,25. Это значение соответствует приблизительному ОСШ -6 дБ. Сгенерируйте 23 на 10000 матрицу комплексных, белых гауссовских rv с заданным отклонением. Каждая строка матрицы представляет 10 000 исследований Монте-Карло для одной камеры.
Ntrials = 1e4; variance = 0.25; Ncells = 23; inputdata = sqrt(variance/2)*(randn(Ncells,Ntrials)+1j*randn(Ncells,Ntrials));
Поскольку в примере реализован детектор квадратного закона, возьмите квадратные величины элементов в матрице данных.
Z = abs(inputdata).^2;
Предоставьте выход от оператора квадратного закона и индекс тестируемой камеры детектору CFAR.
Z_detect = detector(Z,CUTidx);
Выход, Z_detect
, является логическим вектором с 10000 элементами. Суммируйте элементы в Z_detect
и разделите на общее количество испытаний, чтобы получить эмпирическую частоту ложных предупреждений.
pfa = sum(Z_detect)/Ntrials
pfa = 0.0013
Эмпирическая частота ложных предупреждений составляет 0,0013, что тесно соответствует желаемой частоте ложных предупреждений 0,001.
Алгоритм усреднения ячеек для CFAR-детектора хорошо работает во многих ситуациях, но не во всех. Для примера, когда цели тесно расположены, камерой среднее может заставить сильную цель замаскировать слабую цель рядом. The phased.CFARDetector
Системная object™ поддерживает следующие алгоритмы обнаружения CFAR.
Алгоритм | Типичное использование |
---|---|
CFAR со средним количеством ячеек | Большинство ситуаций |
Наибольшее среднее значение CFAR для ячеек | Когда важно избегать ложных предупреждений на краю загромождения |
CFAR с наименьшим средним значением ячейки | Когда цели тесно расположены |
Статистика порядка CFAR | Компромисс между самым большим и самым маленьким средним значением камеры |
Этот пример показывает, как сравнить вероятность обнаружения, полученную из двух алгоритмов CFAR. В этом сценарии алгоритм статистики порядка обнаруживает цель, которую алгоритм усреднения ячеек не обнаруживает.
Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step
синтаксис. Для примера замените myObject(x)
с step(myObject,x)
.
Создайте детектор CFAR, который использует усредненный по ячейкам алгоритм CFAR.
Ntraining = 10; Nguard = 2; Pfa_goal = 0.01; detector = phased.CFARDetector('Method','CA',... 'NumTrainingCells',Ntraining,'NumGuardCells',Nguard,... 'ProbabilityFalseAlarm',Pfa_goal);
Детектор имеет 2 защитные камеры, 10 обучающих камеры и вероятность ложного предупреждения 0,01. Этот объект принимает детектор квадратного закона без импульсного интегрирования.
Сгенерируйте вектор входных данных на основе комплексной белой Гауссовой случайной переменной.
Ncells = 23;
Ntrials = 100000;
inputdata = 1/sqrt(2)*(randn(Ncells,Ntrials) + ...
1i*randn(Ncells,Ntrials));
В входных данных замените строки 8 и 12, чтобы симулировать две цели, чтобы детектор CFAR обнаружил.
inputdata(8,:) = 3*exp(1i*2*pi*rand); inputdata(12,:) = 9*exp(1i*2*pi*rand);
Поскольку в примере реализован детектор квадратного закона, возьмите квадратные величины элементов в векторе входных данных.
Z = abs(inputdata).^2;
Выполните обнаружение на строках с 8 по 12.
Z_detect = detector(Z,8:12);
The Z_detect
матрица имеет пять строк. Первая и последняя строки соответствуют моделируемым целям. Три средние строки соответствуют шуму.
Вычислите вероятность обнаружения двух целей. Кроме того, оцените вероятность ложного предупреждения, используя строки только для шума.
Pd_1 = sum(Z_detect(1,:))/Ntrials
Pd_1 = 0
Pd_2 = sum(Z_detect(end,:))/Ntrials
Pd_2 = 1
Pfa = max(sum(Z_detect(2:end-1,:),2)/Ntrials)
Pfa = 6.0000e-05
The 0
значение Pd_1
указывает, что этот детектор не обнаруживает первую цель.
Измените детектор CFAR, чтобы он использовал статистический алгоритм CFAR порядка с рангом 5.
release(detector);
detector.Method = 'OS';
detector.Rank = 5;
Повторите обнаружение и расчеты вероятностей.
Z_detect = detector(Z,8:12); Pd_1 = sum(Z_detect(1,:))/Ntrials
Pd_1 = 0.5820
Pd_2 = sum(Z_detect(end,:))/Ntrials
Pd_2 = 1
Pfa = max(sum(Z_detect(2:end-1,:),2)/Ntrials)
Pfa = 0.0066
Используя алгоритм статистики порядка вместо алгоритма усреднения ячеек, детектор обнаруживает первую цель примерно в 58% испытаний.