step

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

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

Описание

Примечание

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

пример

Y = step(detector,X,cutidx) выполняет 2-D 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.

Примечание

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

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

расширить все

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

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

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

Пример: [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 матрица 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

Примеры

расширить все

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

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

Выполните среднее по ячейкам обнаружение CFAR на матрице 41 на 41 камерах, содержащей Гауссов шум. Оцените эмпирический pfa и сравните его с необходимым pfa. Чтобы получить хорошую оценку, выполните эту симуляцию на 1000 подобных матрицах. Сначала установите порог, используя необходимую 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 камерах, содержащей пять тесно расположенных целей в Гауссовом шуме. Выполните это обнаружение на симуляции 1000 изображений. Используйте два детектора с различными защитными полосами областей. Установите пороги вручную с помощью 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

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 с помощью двух детекторов 2-D CFAR. Первый детектор имеет небольшую защитную полосу области. Область обучения может включать в себя соседние цели, которые могут влиять на расчет степени шума. Второй детектор имеет большую защитную полосу области, которая препятствует использованию целевых камер в шумовой расчет.

Создайте два детектора 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, потому что шум более точно оценен.

См. также

Введенный в R2016b