Этот пример вводит обнаружение постоянного ложного сигнального уровня (CFAR) и показывает, как использовать CFARDetector и CFARDetector2D в Phased Array System Toolbox™, чтобы выполнить ячейку, составляющую в среднем обнаружение CFAR.
Одной важной задачей, которую выполняет радиолокационная система, является целевое обнаружение. Само обнаружение является довольно прямым. Это сравнивает сигнал с порогом. Поэтому действительная работа над обнаружением придумывает соответствующий порог. В общем случае порог является функцией и вероятности обнаружения и вероятности ложного предупреждения.
Во многих системах фазированной решетки, из-за стоимости, сопоставленной с ложным обнаружением, желательно иметь порог обнаружения, который не только максимизирует вероятность обнаружения, но также и сохраняет вероятность ложного предупреждения ниже предварительно установленного уровня.
Существует обширная литература по тому, как определить порог обнаружения. Читатели могут интересоваться Обнаружением Сигнала в Белом Гауссовом шуме и Обнаружением Сигнала Используя Несколько Демонстрационных примеров для некоторых известных результатов. Однако все эти классические результаты основаны на теоретических вероятностях и ограничиваются белым Гауссовым шумом с известным отклонением (степень). В действительных приложениях часто окрашивается шум, и его степень неизвестна.
Технология CFAR решает эти проблемы. В CFAR, когда обнаружение необходимо для данной ячейки, которую часто называют как ячейка под тестом (CUT), шумовая мощность оценивается от соседних ячеек. Затем порог обнаружения, , дают
где оценка шумовой мощности и масштабный коэффициент, названный пороговым фактором.
От уравнения ясно, что порог адаптируется к данным. Можно показать это с соответствующим пороговым фактором, , получившаяся вероятность ложного предупреждения может быть сохранена в константе, отсюда имя CFAR.
Ячейка, составляющая в среднем детектор CFAR, является, вероятно, наиболее широко используемым детектором CFAR. Это также используется в качестве базового сравнения для других методов CFAR. В ячейке, составляющей в среднем детектор CFAR, шумовые выборки извлечены и из ведущих и из отстающих ячеек (названный учебными ячейками) вокруг CUT. Шумовая оценка может быть вычислена как [1]
где количество учебных ячеек и выборка в каждой учебной ячейке. Если оказывается, выход квадратичного детектора, затем представляет предполагаемую шумовую мощность. В общем случае количество продвижения и отставания учебных ячеек является тем же самым. Ячейки охраны помещаются смежные с CUT, и продвижение и отставание его. Цель этих защитных ячеек состоит в том, чтобы избежать компонентов сигнала от утечки в учебную ячейку, которая могла оказать негативное влияние на шумовую оценку.
Следующий рисунок показывает отношение среди этих ячеек для 1D случая.
С вышеупомянутой ячейкой, составляющей в среднем детектор CFAR, принимая данные, переданные в детектор, от одного импульса, i.e., никакое импульсное интегрирование не включило, пороговый фактор может быть записан как [1]
где желаемый ложный сигнальный уровень.
В остальной части этого примера мы показываем, как использовать Phased Array System Toolbox, чтобы выполнить ячейку, составляющую в среднем обнаружение CFAR. Для простоты и не теряя общности, мы все еще принимаем, что шум белый Гауссов. Это включает сравнение между CFAR и классической теорией обнаружения.
Мы можем инстанцировать детектора CFAR используя следующую команду:
cfar = phased.CFARDetector('NumTrainingCells',20,'NumGuardCells',2);
В этом детекторе мы используем 20 учебных ячеек и 2 защитных ячейки всего. Это означает, что существует 10 учебных ячеек и 1 защитная ячейка на каждой стороне CUT. Как упомянуто выше, если мы принимаем, что сигнал от квадратичного детектора без импульсного интегрирования, порог может быть вычислен на основе количества учебных ячеек и желаемой вероятности ложного предупреждения. Принятие желаемого ложного сигнального уровня 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, таким образом, выход является логическим вектором, содержащим результат обнаружения для всех испытаний. Если результат верен, это означает, что цель присутствует в соответствующем испытании. В нашем примере все обнаружения являются ложными предупреждениями, потому что мы являемся только передающими в шуме. Получившийся ложный сигнальный уровень может затем быть вычислен на основе количества ложных предупреждений и количества испытаний.
x_detected = cfar(x,CUTIdx); act_pfa = sum(x_detected)/Ntrials
act_pfa = 9.4000e-04
Результат показывает, что получившаяся вероятность ложного предупреждения ниже 0.001, когда мы задали.
Как объяснено в начале этого примера, существует только несколько случаев, в которых детектор 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, чтобы вывести порог, используемый для каждого обнаружения с помощью 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')
Здесь, порог увеличивается с шумовой мощностью сигнала обеспечить постоянный ложный сигнальный уровень. Обнаружения происходят, где уровень сигнала превышает порог.
В этом разделе мы сравниваем эффективность детектора 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. Порог обнаружения вычисляется из ячеек в прямоугольной учебной полосе вокруг CUT.
На рисунке выше, размер защитной полосы [2 2], и учебный размер полосы [4 3]. Индексы размера относятся к количеству ячеек на каждой стороне сокращения строки и размерностей столбцов, соответственно. Размер защитной полосы может также быть задан как 2, поскольку размер является тем же самым по измерениям строки и столбца.
Затем создайте двумерный детектор CFAR. Используйте вероятность ложного предупреждения 1e-5 и задайте размер защитной полосы 5 ячеек и учебный размер полосы 10 ячеек.
cfar2D = phased.CFARDetector2D('GuardBandSize',5,'TrainingBandSize',10,... 'ProbabilityFalseAlarm',1e-5);
Затем загрузите и постройте доплеровское областью значений изображение. Изображение включает, возвращается из двух стационарных целей и одной цели, переезжающей от радара.
[resp,rngGrid,dopGrid] = helperRangeDoppler;
Используйте CFAR, чтобы искать пробел Доплера области значений объекты и построить карту обнаружений. Поиск от-10 до 10 кГц и от 1 000 до 4 000 м. Во-первых, задайте ячейки под тестом для этой области.
[~,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)
Три объекта обнаруживаются. Куб данных изображений Доплера области значений в зависимости от времени может аналогично предоставляться как входной сигнал cfar2D
, и обнаружения будут вычислены на одном шаге.
В этом примере мы представили фундаментальные понятия позади детекторов CFAR. В частности, мы исследовали, как использовать Phased Array System Toolbox, чтобы выполнить ячейку, составляющую в среднем обнаружение CFAR на изображениях Доплера области значений и сигналах. Сравнение между эффективностью, предлагаемой ячейкой, составляющей в среднем детектор CFAR и детектором, оборудованным теоретически расчетным порогом, показывает ясно, что детектор CFAR более подходит для действительных полевых приложений.
[1] Марк Ричардс, основные принципы радарной обработки сигналов, Макгроу Хилла, 2005