Обнаружение постоянной скорости ложного предупреждения (CFAR)

Этот пример вводит обнаружение постоянной частоты ложных предупреждений (CFAR) и показывает, как использовать CFARDetector и CFARDetector2D в Phased Array System Toolbox™ для выполнения камеры усреднения обнаружения CFAR.

Введение

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

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

Существует обширная литература о том, как определить порог обнаружения. Читатели могут быть заинтересованы в обнаружении сигнала в белом Гауссовом шуме и обнаружении сигнала, используя несколько выборки для некоторых хорошо известных результатов. Однако все эти классические результаты основаны на теоретических вероятностях и ограничены белым Гауссовым шумом с известным отклонением (степенью). В реальных приложениях шум часто окрашен и его степень неизвестна.

Технология CFAR решает эти проблемы. В CFAR, когда обнаружение необходимо для данной камеры, часто называемой тестируемой камерой (CUT), степень шума оценивается от соседних камер. Затем порог обнаружения, T, задается как

T=αPn

где Pn - оценка степени шума и α является масштабным коэффициентом, называемым пороговым коэффициентом.

Из уравнения ясно, что порог адаптируется к данным. Можно показать, что с соответствующим пороговым фактором, α, результирующая вероятность ложного предупреждения может быть сохранена на постоянной, следовательно, имя CFAR.

Камера среднее обнаружение CFAR

CFAR-детектор, усредняющий камеру, вероятно, является наиболее широко используемым CFAR-детектором. Он также используется в качестве базового сравнения для других методов CFAR. В CFAR-детекторе, усредняющем камеру, шумовые выборки экстрагируются как из ведущих, так и из отстающих камер (называемых обучающими камерами) вокруг CUT. Оценка шума может быть вычислена как [1]

Pn=1Nm=1Nxm

где N количество обучающих камер и xm является выборкой в каждой обучающей камере. Если xm оказывается выходным сигналом квадратного детектора закона, тогда Pn представляет расчетную степень шума. В целом количество ведущих и отстающих обучающих камер одинаковое. Защитные камеры расположены рядом с CUT, как ведущими, так и отстающими. Цель этих защитных камер состоит в том, чтобы избежать утечки сигнальных компонентов в обучающую камеру, что может негативно повлиять на оценку шума.

Следующий рисунок показывает отношение между этими камерами для 1-D случая.

С вышеописанным CFAR-детектором усреднения камеры, принимая, что данные, переданные в детектор, получены от одного импульса, то есть никакое интегрирование импульсов не связано, пороговый коэффициент может быть записан как [1]

α=N(Pfa-1/N-1)

где Pfa - желаемая частота ложных предупреждений.

Обнаружение CFAR с использованием автоматического порогового коэффициента

В остальном примере мы покажем, как использовать Phased Array System Toolbox для выполнения камеры усреднения обнаружения CFAR. Для простоты и не теряя никакой общности, мы все еще принимаем, что шум белый Гауссов. Это позволяет сравнить CFAR и классическую теорию обнаружения.

Мы можем создать экземпляр CFAR детектора с помощью следующей команды

cfar = phased.CFARDetector('NumTrainingCells',20,'NumGuardCells',2);

В этом детекторе мы используем 20 обучающих камер и 2 защитных камер в общей сложности. Это означает, что на каждой стороне CUT имеется 10 обучающих камеры и по 1 защитной камере. Как упоминалось выше, если принять, что сигнал от детектора квадратного закона без импульсного интегрирования, порог может быть вычислен на основе количества обучающих камер и желаемой вероятности ложного предупреждения. Принимая желаемую частоту ложных предупреждений 0,001, мы можем сконфигурировать детектор CFAR следующим образом, чтобы можно было выполнить это вычисление.

exp_pfa = 1e-3;
cfar.ThresholdFactor = 'Auto';
cfar.ProbabilityFalseAlarm = exp_pfa;

Сконфигурированный CFAR-детектор показан ниже.

cfar
cfar = 
  phased.CFARDetector with properties:

                   Method: 'CA'
            NumGuardCells: 2
         NumTrainingCells: 20
          ThresholdFactor: 'Auto'
    ProbabilityFalseAlarm: 1.0000e-03
             OutputFormat: 'CUT result'
      ThresholdOutputPort: false
     NoisePowerOutputPort: false

Теперь мы моделируем входные данные. Поскольку основное внимание уделяется тому, чтобы показать, что детектор CFAR может держать частоту ложных предупреждений под определенным значением, мы просто моделируем выборки шума в этих камерах. Вот настройки:

  • Последовательность данных составляет 23 выборки, и CUT является камерой 12. Это оставляет 10 обучающих камеры и 1 защитную камеру на каждой стороне CUT.

  • Частота ложных предупреждений вычисляется с помощью 100 тысяч испытаний Монте-Карло

rs = RandStream('mt19937ar','Seed',2010);
npower = db2pow(-10);  % Assume 10dB SNR ratio

Ntrials = 1e5;
Ncells = 23;
CUTIdx = 12;

% Noise samples after a square law detector
rsamp = randn(rs,Ncells,Ntrials)+1i*randn(rs,Ncells,Ntrials);   
x = abs(sqrt(npower/2)*rsamp).^2;

Чтобы выполнить обнаружение, передайте данные через детектор. В этом примере существует только один CUT, поэтому выход является логическим вектором, содержащим результат обнаружения для всех испытаний. Если результат равен true, это означает, что цель присутствует в соответствующем испытании. В нашем примере все обнаружения являются ложными предупреждениями, потому что мы проходим только в шуме. Получившуюся частоту ложных предупреждений можно затем вычислить на основе количества ложных предупреждений и количества испытаний.

x_detected = cfar(x,CUTIdx);
act_pfa = sum(x_detected)/Ntrials
act_pfa = 9.4000e-04

Результат показывает, что результирующая вероятность ложного предупреждения ниже 0,001, так же как мы и указали.

Обнаружение CFAR с использованием пользовательского порогового коэффициента

Как объяснено в предыдущей части этого примера, существует только несколько случаев, в которых детектор CFAR может автоматически вычислить соответствующий пороговый коэффициент. Для примера, используя предыдущий сценарий, если мы используем 10-импульсное некогерентное интегрирование, прежде чем данные попадут в детектор, автоматический порог больше не может обеспечить желаемую частоту ложных предупреждений.

npower = db2pow(-10);  % Assume 10dB SNR ratio
xn = 0;
for m = 1:10
    rsamp = randn(rs,Ncells,Ntrials)+1i*randn(rs,Ncells,Ntrials);
    xn = xn + abs(sqrt(npower/2)*rsamp).^2;   % noncoherent integration
end
x_detected = cfar(xn,CUTIdx);
act_pfa = sum(x_detected)/Ntrials
act_pfa = 0

Можно озадачить, почему мы считаем, что результирующая частота ложных предупреждений 0 хуже, чем частота ложных предупреждений 0,001. В конце концов, разве ложная тревога в 0 не замечательная вещь? Ответ на этот вопрос заключается в том, что, когда вероятность ложного предупреждения уменьшается, также есть вероятность обнаружения. В этом случае, поскольку истинная частота ложных предупреждений намного ниже допустимого значения, порог обнаружения устанавливается слишком высоким. Та же вероятность обнаружения может быть достигнута с нашей желаемой вероятностью ложного предупреждения при меньших затратах; для примера с более низкими степенями передатчика.

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

release(cfar);
cfar.ThresholdFactor = 'Custom';

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

cfar.CustomThresholdFactor = 2.35;
x_detected = cfar(xn,CUTIdx);
act_pfa = sum(x_detected)/Ntrials
act_pfa = 9.6000e-04

Порог обнаружения CFAR

Обнаружение CFAR происходит, когда уровень входного сигнала в камеру превышает уровень порога. Уровень порога для каждой камеры зависит от фактора порога и степени шума, полученного от обучающих камер. Чтобы поддерживать постоянную частоту ложных предупреждений, порог обнаружения будет увеличиваться или уменьшаться пропорционально степени шума в обучающих камерах. Сконфигурируйте CFAR-детектор, чтобы вывести порог, используемый для каждого обнаружения, используя ThresholdOutputPort свойство. Используйте автоматический пороговый коэффициент и 200 обучающих камеры.

release(cfar);
cfar.ThresholdOutputPort = true;
cfar.ThresholdFactor = 'Auto';
cfar.NumTrainingCells = 200;

Затем создайте входной сигнал квадратного закона с увеличением степени шума.

rs = RandStream('mt19937ar','Seed',2010);
Npoints = 1e4;
rsamp = randn(rs,Npoints,1)+1i*randn(rs,Npoints,1);
ramp = linspace(1,10,Npoints)';
xRamp = abs(sqrt(npower*ramp./2).*rsamp).^2;

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

[x_detected,th] = cfar(xRamp,1:length(xRamp));

Затем сравните порог CFAR с входным сигналом.

plot(1:length(xRamp),xRamp,1:length(xRamp),th,...
  find(x_detected),xRamp(x_detected),'o')
legend('Signal','Threshold','Detections','Location','Northwest')
xlabel('Time Index')
ylabel('Level')

Figure contains an axes. The axes contains 3 objects of type line. These objects represent Signal, Threshold, Detections.

Здесь порог увеличивается со степенью шума сигнала, чтобы поддерживать постоянную частоту ложных предупреждений. Обнаружения происходят там, где уровень сигнала превышает порог.

Сравнение между CFAR и классическим детектором Неймана-Пирсона

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

T_ideal = npower*db2pow(npwgnthresh(exp_pfa));

Скорость ложного предупреждения этого классического детектора Неймана-Пирсона может быть вычислена с помощью этого теоретического порога.

act_Pfa_np = sum(x(CUTIdx,:)>T_ideal)/Ntrials
act_Pfa_np = 9.5000e-04

Поскольку мы знаем степень шума, классическая теория обнаружения также создает желаемую частоту ложных предупреждений. Скорость ложного предупреждения, достигнутая детектором CFAR, аналогична.

release(cfar);
cfar.ThresholdOutputPort = false;
cfar.NumTrainingCells = 20;
x_detected = cfar(x,CUTIdx);
act_pfa = sum(x_detected)/Ntrials
act_pfa = 9.4000e-04

Затем примите, что оба детектора развернуты в поле и что степень шума на 1 дБ больше, чем ожидалось. В этом случае, если использовать теоретический порог, получившаяся вероятность ложного предупреждения в четыре раза больше, чем мы хотим.

npower = db2pow(-9);  % Assume 9dB SNR ratio
rsamp = randn(rs,Ncells,Ntrials)+1i*randn(rs,Ncells,Ntrials);
x = abs(sqrt(npower/2)*rsamp).^2;   
act_Pfa_np = sum(x(CUTIdx,:)>T_ideal)/Ntrials
act_Pfa_np = 0.0041

Напротив, эффективность CFAR-детектора не зависит.

x_detected = cfar(x,CUTIdx);
act_pfa = sum(x_detected)/Ntrials
act_pfa = 0.0011

Следовательно, детектор CFAR является устойчивым к неопределенности степени шума и лучше подходит для полевых приложений.

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

npower = db2pow(-10);
fcoeff = maxflat(10,'sym',0.2);
x = abs(sqrt(npower/2)*filter(fcoeff,1,rsamp)).^2;   % colored noise
act_Pfa_np = sum(x(CUTIdx,:)>T_ideal)/Ntrials
act_Pfa_np = 0

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

release(cfar);
cfar.ThresholdFactor = 'Custom';
cfar.CustomThresholdFactor = 12.85;
x_detected = cfar(x,CUTIdx);
act_pfa = sum(x_detected)/Ntrials
act_pfa = 0.0010

Обнаружение CFAR для допплеровских изображений

В предыдущих разделах оценка шума была вычислена из обучающих камер, ведущих и отстающих CUT в одной размерности. Мы также можем выполнить обнаружение CFAR на изображениях. Камеры соответствуют пикселям в изображениях, а защитные камеры и обучающие камеры помещаются в полосы вокруг CUT. Порог обнаружения вычисляется из камер в прямоугольной полосе обучения вокруг CUT.

На рисунке выше размер защитной полосы равен [2 2], а размер обучающей полосы равен [4 3]. Индексы размера относятся к количеству камер на каждой стороне CUT в размерностях строка и столбцы, соответственно. Размер защитной полосы также может быть определен как 2, поскольку размер одинаковый по размерностям строки и столбца.

Затем создайте двумерный CFAR-детектор. Используйте вероятность ложного предупреждения 1e-5 и задайте размер защитной полосы 5 камер и размер обучающей полосы 10 камер.

cfar2D = phased.CFARDetector2D('GuardBandSize',5,'TrainingBandSize',10,...
  'ProbabilityFalseAlarm',1e-5);

Далее загрузите и постройте допплеровское изображение диапазона. Изображение включает возвраты от двух стационарных целей и одной цели, отходящей от радара.

[resp,rngGrid,dopGrid] = helperRangeDoppler;

Figure contains an axes. The axes with title Range Doppler Map contains an object of type image.

Используйте CFAR для поиска объектов в допплеровском пространстве диапазона и построения карты обнаружений. Поиск от -10 до 10 кГц и от 1000 до 4000 м. Сначала определите камеры для этой области.

[~,rangeIndx] = min(abs(rngGrid-[1000 4000]));
[~,dopplerIndx] = min(abs(dopGrid-[-1e4 1e4]));
[columnInds,rowInds] = meshgrid(dopplerIndx(1):dopplerIndx(2),...
  rangeIndx(1):rangeIndx(2));
CUTIdx = [rowInds(:) columnInds(:)]';

Вычислите результат обнаружения для каждой камеры. Каждый пиксель в области поиска является камерой в этом примере. Постройте карту результатов обнаружения для допплеровского изображения диапазона.

detections = cfar2D(resp,CUTIdx);
helperDetectionsMap(resp,rngGrid,dopGrid,rangeIndx,dopplerIndx,detections)

Figure contains an axes. The axes with title Range Doppler CFAR Detections contains an object of type image.

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

Сводные данные

В этом примере мы представили основные концепции, лежащие в основе CFAR-детекторов. В частности, мы исследовали, как использовать Phased Array System Toolbox для выполнения среднего обнаружения CFAR камер на сигналах и допплеровских изображениях диапазона. Сравнение эффективности, предлагаемых детектором CFAR для усреднения камер, и детектором, оборудованным теоретически рассчитанным порогом, ясно показывает, что детектор CFAR более подходит для реальных полевых применений.

Ссылка

[1] Марк Ричардс, Основы обработки радиолокационных сигналов, McGraw Hill, 2005