phased.CFARDetector2D

Двумерный детектор CFAR

Описание

phased.CFARDetector2D Система object™ реализует постоянный ложно-сигнальный детектор уровня (CFAR) для выбранных элементов (названный ячейками) данных о двухмерном изображении. Обнаружение объявляется, когда значение ячейки изображений превышает порог. Чтобы обеспечить постоянный ложный сигнальный уровень, порог устанавливается к кратному степени шума изображения. Детектор оценивает шумовую мощность для ячейки под тестом (CUT) от окружающих ячеек с помощью одного из трех методов усреднения ячейки или метода статистики порядка. Методы усреднения ячейки являются усреднением ячейки (CA), самым большим - ячейки, составляющей в среднем (GOCA), или самый маленький - ячейки, составляющей в среднем (SOCA).

Для каждой тестовой ячейки, детектора:

  1. оценивает шумовую статистическую величину от значений ячеек в учебной полосе, окружающей ячейку CUT.

  2. вычисляет порог путем умножения шумовой оценки порогового фактора.

  3. сравнивает значение ячейки CUT с порогом, чтобы определить, присутствует ли цель или отсутствует. Если значение больше порога, цель присутствует.

Запускать детектор

  1. Задайте и настройте свой 2D детектор CFAR. Можно установить phased.CFARDetector2D Свойства системного объекта, когда вы создаете объект или оставляете их набором их значениям по умолчанию. Смотрите Конструкцию. Некоторые свойства, которые вы устанавливаете во время создания, могут быть изменены позже. Эти свойства являются настраиваемыми.

  2. Найдите обнаружения путем вызова step метод. Выход этого метода зависит от свойств phased.CFARDetector2D Системный объект.

Примечание

В качестве альтернативы вместо того, чтобы использовать step метод, чтобы выполнить операцию, заданную Системным объектом, можно вызвать объект с аргументами, как будто это была функция. Например, y = step(obj,x) и y = obj(x) выполните эквивалентные операции.

Конструкция

detector = phased.CFARDetector2D создает 2D Системный объект детектора CFAR, detector.

detector = phased.CFARDetector2D(Name,Value) создает 2D Системный объект CFAR, detector, с каждым заданным свойством Name установите на заданный Value. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN).

Свойства

развернуть все

Двумерный метод усреднения CFAR в виде 'CA', 'GOCA', 'SOCA', или 'OS'. Для 'CA', 'GOCA', 'SOCA', шумовая мощность является демонстрационным средним значением, выведенным из учебной полосы. Для 'OS', шумовой мощностью является k th значение ячейки, полученное из числового упорядоченного расположения всех учебных значений ячеек. Установите k с помощью Rank свойство.

Метод усредненияОписание
CA — Составляющий в среднем ячейку алгоритм

Вычисляет демонстрационное среднее значение всех учебных ячеек, окружающих ячейку CUT.

GOCA — Самый большой - составляющего в среднем ячейку алгоритма

Разделяет 2D учебное окно, окружающее ячейку CUT в левые и правые половины. Затем алгоритм вычисляет демонстрационное среднее значение для каждой половины и выбирает самое большое среднее значение.

SOCA — Самый маленький - составляющего в среднем ячейку алгоритма

Разделяет 2D учебное окно, окружающее ячейку CUT в левые и правые половины. Затем алгоритм вычисляет демонстрационное среднее значение для каждой половины и выбирает самое маленькое среднее значение.

OS — Закажите статистический алгоритм

Сортировки учебных ячеек в порядке возрастания числовых значений. Затем алгоритм выбирает k th значение из списка. k является рангом, заданным Rank параметр.

Пример: 'OS'

Типы данных: char

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

Пример: [2 3]

Типы данных: single | double

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

Пример: [-30:0.1:30]

Типы данных: single | double

Ранг статистической величины порядка используется в 2D алгоритме CFAR в виде положительного целого числа. Значение этого свойства должно находиться между 1 и Ntrain, где Ntrain является количеством учебных ячеек. Значение 1 выбирает наименьшее значение в учебной области.

Пример 5

Зависимости

Чтобы включить это свойство, установите Method свойство к 'OS'.

Типы данных: single | double

Пороговый метод фактора в виде 'Auto', 'Input port', или 'Custom'.

Когда вы устанавливаете ThresholdFactor свойство к 'Auto', пороговый фактор вычисляется от желаемой вероятности ложного сигнального набора в ProbabilityFalseAlarm свойство. Вычисление принимает, что каждый независимый сигнал во входе является одним импульсом, выходящим из квадратичного детектора без импульсного интегрирования. Кроме того, шум принят, чтобы быть белый Гауссов.

Когда вы устанавливаете ThresholdFactor свойство к 'Input port', пороговый фактор получен из входного параметра step метод.

Когда вы устанавливаете ThresholdFactor свойство к 'Custom', пороговый фактор получен из значения CustomThresholdFactor свойство.

Пример: 'Custom'

Типы данных: char

Необходимая вероятность ложного предупреждения в виде действительной положительной скалярной величины между 0 и 1. Алгоритм вычисляет пороговый фактор от необходимой вероятности ложного предупреждения.

Пример: 0.001

Зависимости

Чтобы включить это свойство, установите ThresholdFactor свойство к 'Auto'.

Типы данных: single | double

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

Зависимости

Чтобы включить это свойство, установите ThresholdFactor свойство к 'Custom'.

Типы данных: single | double

Формат результатов обнаружения возвращен step метод в виде 'CUT result' или 'Detection index'.

  • Когда установлено в 'CUT result', результатами являются логические значения обнаружения (1 или 0) для каждой протестированной ячейки.

  • Когда установлено в 'Detection index', результаты формируют вектор или матрицу, содержащий индексы протестированных ячеек, которые превышают порог обнаружения. Можно использовать этот формат в качестве входа к phased.RangeEstimator и phased.DopplerEstimator Системные объекты.

Типы данных: char

Опция, чтобы включить порогу обнаружения выход в виде false или true. Установка этого свойства к true возвращает порог обнаружения через выходной аргумент, th, из step метод.

Типы данных: логический

Опция, чтобы включить выход шумовой мощности в виде false или true. Установка этого свойства к true возвращает шумовую мощность через выходной аргумент, noise, из step метод.

Типы данных: логический

Источник количества обнаружений в виде 'Auto' или 'Property'. Когда вы устанавливаете это свойство на 'Auto', количество индексов обнаружения, о которых сообщают, является общим количеством ячеек под тестом, которые имеют обнаружения. Если вы устанавливаете это свойство на 'Property', количество обнаружений, о которых сообщают, определяется значением NumDetections свойство.

Зависимости

Чтобы включить это свойство, установите OutputFormat свойство к 'Detection index'.

Типы данных: char

Максимальное количество индексов обнаружения, чтобы сообщить в виде положительного целого числа.

Зависимости

Чтобы включить это свойство, установите OutputFormat свойство к 'Detection index' и NumDetectionsSource свойство к 'Property'.

Типы данных: double

Методы

сбросСбросьте состояния Системного объекта
шагДвумерное обнаружение CFAR
Характерный для всех системных объектов
release

Позвольте изменения значения свойства Системного объекта

Примеры

свернуть все

В этом примере показано, как установить 2D порог CFAR, основанный на необходимой вероятности ложного предупреждения (PFA).

Примечание: можно заменить каждый вызов функции с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

Выполните составляющее в среднем ячейку обнаружение CFAR на 41 41 матрица ячеек, содержащих Гауссов шум. Оцените эмпирический PFA и сравните его с необходимым PFA. Чтобы получить хорошую оценку, выполните эту симуляцию на 1 000 подобных матриц. Во-первых, установите порог с помощью необходимого PFA. В этом случае нет никаких целей, и PFA может быть оценен от количества ячеек, которые превышают порог. Примите, что данные обрабатываются через квадратичный детектор и что никакое импульсное интегрирование не выполняется. Используйте полосу учебной ячейки 3 ячеек по ширине и 4 ячеек в высоте. Используйте защитную полосу 3 ячеек по ширине и 2 ячеек в высоте, чтобы разделить ячейки под тестом (CUT) от учебных ячеек. Задайте необходимый PFA 5.0e-4.

p = 5e-4;
rs = RandStream.create('mt19937ar','Seed',5);
N = 41;
ntrials = 1000;
detector = phased.CFARDetector2D('TrainingBandSize',[4,3], ...
    'ThresholdFactor','Auto','GuardBandSize',[2,3], ...
    'ProbabilityFalseAlarm',p,'Method','SOCA','ThresholdOutputPort',true);

Создайте 41 41 изображение, содержащее случайные комплексные данные. Затем придайте данным квадратную форму, чтобы симулировать квадратичный детектор.

x = 2/sqrt(2)*(randn(rs,N,N,ntrials) + 1i*randn(rs,N,N,ntrials));
x2 = abs(x).^2;

Процесс все ячейки в каждом изображении. Для этого найдите строку и столбец каждой ячейки CUT, учебная область которой падает полностью в каждом изображении.

Ngc = detector.GuardBandSize(2);
Ngr = detector.GuardBandSize(1);
Ntc = detector.TrainingBandSize(2);
Ntr = detector.TrainingBandSize(1);
cutidx = [];
colstart = Ntc + Ngc + 1;
colend = N - ( Ntc + Ngc);
rowstart = Ntr + Ngr + 1;
rowend = N - ( Ntr + Ngr);
for m = colstart:colend
    for n = rowstart:rowend
        cutidx = [cutidx,[n;m]];
    end
end
ncutcells = size(cutidx,2);

Отобразите ячейки CUT.

cutimage = zeros(N,N);
for k = 1:ncutcells
    cutimage(cutidx(1,k),cutidx(2,k)) = 1;
end
imagesc(cutimage)
axis equal

Figure contains an axes object. The axes object contains an object of type image.

Выполните обнаружение на всех ячейках CUT. Возвратите классификацию обнаружений, и порог раньше классифицировал ячейку.

[dets,th] = detector(x2,cutidx);

Найдите и отобразите изображение с ложным предупреждением для рисунка.

di = [];
for k = 1:ntrials
    d = dets(:,k);
    if (any(d) > 0)
        di = [di,k];
    end
end
idx = di(1);
detimg = zeros(N,N);
for k = 1:ncutcells
    detimg(cutidx(1,k),cutidx(2,k)) = dets(k,idx);
end
imagesc(detimg)
axis equal

Figure contains an axes object. The axes object contains an object of type image.

Вычислите эмпирический PFA.

pfa = sum(dets(:))/ntrials/ncutcells
pfa = 4.5898e-04

Эмпирический и заданный PFA соглашается.

Отобразите среднее эмпирическое пороговое значение по всем изображениям.

mean(th(:))
ans = 31.7139

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

threshfactor = npwgnthresh(p,1,'noncoherent');
threshfactor = 10^(threshfactor/10);
disp(threshfactor)
    7.6009

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

noisevar = mean(x2(:));
disp(threshfactor*noisevar);
   30.4118

Теоретический порог и эмпирический порог соглашаются на в приемлемом различии.

Выполните составляющее в среднем ячейку обнаружение CFAR на 41 41 матрица ячеек, содержащих пять близко расположенных целей в Гауссовом шуме. Выполните это обнаружение на симуляции 1 000 изображений. Используйте два детектора с различными областями защитной полосы. Установите пороги вручную с помощью Custom 'ThresholdFactor' . Примите, что данные обрабатываются через квадратичный детектор и что никакое импульсное интегрирование не выполняется. Используйте учебную полосу ячейки 2 ячеек по ширине и 2 ячеек в высоте. Для первого детектора используйте защитную полосу 1 ячейки все вокруг, чтобы разделить ячейки CUT от учебных ячеек. Для второго детектора используйте защитную полосу 8 ячеек все вокруг.

Примечание: Этот пример запускается только в R2016b или позже. Если вы используете более ранний релиз, заменяете каждый вызов функции с эквивалентным step синтаксис. Например, замените myObject(x) с step(myObject,x).

p = 5e-4;
rs = RandStream.create('mt19937ar','Seed',5);
N = 41;
ntrials = 1000;

Создайте 1000 41 41 изображения комплексного случайного шума со стандартным отклонением 1.

s = 1;
x = s/sqrt(2)*(randn(rs,N,N,ntrials) + 1i*randn(rs,N,N,ntrials));

Установите значения целевых ячеек к 1,5. Затем придайте значениям ячеек квадратную форму.

A = 1.5;
x(23,20,:) = A;
x(23,18,:) = A;
x(23,23,:) = A;
x(20,22,:) = A;
x(21,18,:) = A;
x2 = abs(x).^2;

Отобразите целевые ячейки.

xtgt = zeros(N,N);
xtgt(23,20,:) = A;
xtgt(23,18,:) = A;
xtgt(23,23,:) = A;
xtgt(20,22,:) = A;
xtgt(21,18,:) = A;
imagesc(xtgt)
axis equal
axis tight

Figure contains an axes object. The axes object contains an object of type image.

Установите ячейки CUT быть целевыми ячейками.

cutidx(1,1) = 23;
cutidx(2,1) = 20;
cutidx(1,2) = 23;
cutidx(2,2) = 18;
cutidx(1,3) = 23;
cutidx(2,3) = 23;
cutidx(1,4) = 20;
cutidx(2,4) = 22;
cutidx(1,5) = 21;
cutidx(2,5) = 18;

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

Создайте два детектора CFAR.

detector1 = phased.CFARDetector2D('TrainingBandSize',[2,2], ...
    'GuardBandSize',[1,1],'ThresholdFactor','Custom','Method','CA', ...
    'CustomThresholdFactor',2,'ThresholdOutputPort',true);
detector2 = phased.CFARDetector2D('TrainingBandSize',[2,2], ...
    'GuardBandSize',[8,8],'ThresholdFactor','Custom','Method','CA', ...
    'CustomThresholdFactor',2,'ThresholdOutputPort',true);

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

[dets1,th1] = detector1(x2,cutidx);
ndets = numel(dets1(:));
pd1 = sum(dets1(:))/ndets
pd1 = 0.6416
[dets2,th2] = detector2(x2,cutidx);
pd2 = sum(dets2(:))/ndets
pd2 = 0.9396

Детектор с более крупной областью защитной полосы имеет более высокий PFA, потому что шум более точно оценивается.

Больше о

развернуть все

Алгоритмы

развернуть все

Ссылки

[1] Мотт, H. Антенны для радара и коммуникаций. Нью-Йорк: John Wiley & Sons, 1992.

[2] Ричардс, M. A. Основные принципы радарной обработки сигналов. Нью-Йорк: McGraw-Hill, 2005.

[3] Skolnik, M. Введение в радиолокационные системы, 3-го Эда. Нью-Йорк: McGraw-Hill, 2001.

Расширенные возможности

Введенный в R2017b