шаг

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

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

Синтаксис

Y = step(detector,X,cutidx)
Y = step(detector,X,cutidx,K)
[Y,th] = step(___)
[Y,noise] = step(___)

Описание

Примечание

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

пример

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

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

пример

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

пример

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

Примечание

Объект выполняет инициализацию в первый раз, когда объект выполняется. Эта инициализация блокирует ненастраиваемые свойства (MATLAB) и входные спецификации, такие как размерности, сложность и тип данных входных данных. Если вы изменяете ненастраиваемое свойство или входную спецификацию, Системный объект выдает ошибку. Чтобы изменить ненастраиваемые свойства или входные параметры, необходимо сначала вызвать метод 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

Выполните обнаружение на всех ячейках 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

Вычислите эмпирический 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. Примите, что данные обрабатываются через квадратичный детектор и что никакое импульсное интегрирование не выполняется. Используйте учебную полосу ячейки 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

Установите ячейки 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