step

Системный объект: phased.CFARDetector2D
Пакет: поэтапный

Двумерное обнаружение CFAR

Описание

Примечание

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

пример

Y = step(detector,X,cutidx) выполняет 2D обнаружение CFAR на входных данных изображения, X, для ячеек под тестом (CUT) изображений, заданных cutidxY содержит результаты обнаружения для ячеек CUT.

Y = step(detector,X,cutidx,K) также задает пороговый фактор, K, для того, чтобы установить порог обнаружения. Этот синтаксис применяется когда ThresholdFactor свойство детектора установлено в 'Input port'.

пример

[Y,th] = step(___) также возвращает порог обнаружения, th, примененный обнаруженные ячейки под тестом. Чтобы включить этот синтаксис, установите ThresholdOutputPort свойство к true.

пример

[Y,noise] = step(___) также возвращает предполагаемую шумовую степень, noise, примененный обнаруженные ячейки под тестом. Чтобы включить этот синтаксис, установите NoisePowerOutputPort свойство к true.

Примечание

Объект выполняет инициализацию в первый раз, когда объект выполняется. Эта инициализация блокирует ненастраиваемые свойства и входные технические требования, такие как размерности, сложность и тип данных входных данных. Если вы изменяете ненастраиваемое свойство или входную спецификацию, Системный объект выдает ошибку. Чтобы изменить ненастраиваемые свойства или входные параметры, необходимо сначала вызвать release метод, чтобы разблокировать объект.

Входные параметры

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

Двумерный детектор CFAR в виде phased.CFARDetector2D Системный объект.

Введите изображение в виде действительного M-by-N матрица или действительный M-by-N-by-P массив. M и N представляют строки и столбцы матрицы. Каждая страница является независимым 2D сигналом.

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

Пример: [1,1;2.5,1;0.5,0.1]

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

Тестовые ячейки в виде 2-by-D матрица положительных целых чисел, где D является количеством тестовых ячеек. Каждый столбец cutidx задает индексы строки и столбца ячейки CUT. Те же индексы применяются ко всем страницам во входном массиве. Необходимо ограничить местоположения ячеек CUT так, чтобы их учебные области легли полностью во входных изображениях.

Пример: [10,15;11,15;12,15]

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

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

Зависимости

Чтобы включить этот входной параметр, установите ThresholdFactor свойство детектора возражает против 'Input port'

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

Выходные аргументы

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

Результаты обнаружения, формат которых зависит от OutputFormat свойство

  • Когда OutputFormat 'Cut result'Y D-by-P матрица, содержащая логические результаты обнаружения для ячеек под тестом. D является длиной cutidx и P является количеством страниц X. Строки Y соответствуйте строкам cutidx. Для каждой строки, Y содержит 1 в столбце, если существует обнаружение в соответствующей ячейке в X. В противном случае, Y содержит 0.

  • Когда OutputFormat 'Detection report'Y K-by-L матрица, содержащая индексы обнаружений. K является количеством размерностей X. L является количеством обнаружений, найденных во входных данных. Когда X матрица, Y содержит индексы строки и столбца каждого обнаружения в X в форме [detrow;detcol]. Когда X массив, Y содержит строку, столбец и индексы страницы каждого обнаружения в X в форме [detrow;detcol;detpage]. Когда NumDetectionsSource свойство установлено в 'Property', L равняется значению NumDetections свойство. Если количество фактических обнаружений меньше этого значения, столбцы без обнаружений установлены в NaN.

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

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

  • Когда OutputFormat 'CUT result'th возвращает порог обнаружения каждый раз, когда элемент Y 1 и NaN каждый раз, когда элемент Y 0.

  • Когда OutputFormat 'Detection index'th возвращает порог обнаружения для каждого соответствующего обнаружения в Y. Когда NumDetectionsSource свойство установлено в 'Property', L равняется значению NumDetections свойство. Если количество фактических обнаружений меньше этого значения, столбцы без обнаружений установлены в NaN.

Зависимости

Чтобы включить этот выходной аргумент, установите ThresholdOutputPort к true.

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

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

  • Когда OutputFormat 'CUT result', noise возвращает шумовую степень каждый раз, когда элемент Y 1 и NaN каждый раз, когда элемент Y 0.

  • Когда OutputFormat 'Detection index', noise возвращает шумовую степень для каждого соответствующего обнаружения в Y. Когда NumDetectionsSource свойство установлено в 'Property', L равняется значению NumDetections свойство. Если количество фактических обнаружений меньше этого значения, столбцы без обнаружений установлены в NaN.

Зависимости

Чтобы включить этот выходной аргумент, установите NoisePowerOutputPort к true.

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

Примеры

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

В этом примере показано, как установить 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. The axes 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. The axes 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. The axes 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, потому что шум более точно оценивается.

Смотрите также

Введенный в R2017b