Системный объект: фазированный. CFARDetector2D
Пакет: поэтапный
Двумерное обнаружение CFAR
Примечание
Кроме того, вместо использования step метод для выполнения операции, заданной Системной object™, можно вызвать объект с аргументами, как если бы это была функция. Для примера, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.
[Y,th] = step(___) также возвращает порог обнаружения, th, применяется к обнаруженным камерам. Чтобы включить этот синтаксис, установите ThresholdOutputPort свойство к true.
Примечание
Объект выполняет инициализацию при первом выполнении объекта. Эта инициализация блокирует нетронутые свойства и входные спецификации, такие как размерности, сложность и тип данных входных данных. Если вы изменяете свойство nontunable или спецификацию входа, системный объект выдает ошибку. Чтобы изменить нетронутые свойства или входы, необходимо сначала вызвать release метод для разблокировки объекта.
detector - Двумерный CFAR-детекторphased.CFARDetector2D Системный объектДвумерный CFAR-детектор, заданный как phased.CFARDetector2D Системный объект.
X - Входное изображениеВходное изображение, заданное как матрица M -by- N или массив M -by- N -by- P. M и N представляют строки и столбцы матрицы. Каждая страница является независимым 2-D сигналом.
Размер первой размерности матрицы входа может варьироваться, чтобы симулировать изменяющуюся длину сигнала. Изменение размера может произойти, например, в случае импульсного сигнала с переменной частотой повторения импульса.
Пример: [1,1;2.5,1;0.5,0.1]
Типы данных: single | double
cutidx - Тестовые камерыТестовые камеры, заданные как 2 -by D матрица положительных целых чисел, где D количество тестовых камер. Каждый столбец cutidx задает индексы строка и столбец камеры CUT. Одинаковые индексы применяются ко всем страницам массива входа. Необходимо ограничить местоположение камер CUT, чтобы их области обучения полностью находились в входе изображениях.
Пример: [10,15;11,15;12,15]
Типы данных: single | double
K - Пороговый коэффициент обнаруженияПороговый коэффициент, используемый для вычисления порога обнаружения, заданный как положительная скалярная величина.
Чтобы включить этот входной параметр, установите ThresholdFactor свойство объекта детектора, чтобы 'Input port'
Типы данных: single | double
Y - Результаты обнаруженияРезультаты обнаружения, чей формат зависит от 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 - Вычисленный порог обнаруженияВычисленный порог обнаружения для каждой обнаруженной камеры, возвращенный как действительная матрица. 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 - Расчетная степень шумаОценка степени шума для каждой обнаруженной камеры, возвращенная как действительная матрица. 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

Выполните обнаружение всех камер 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 камерах, содержащей пять тесно расположенных целей в Гауссовом шуме. Выполните это обнаружение на симуляции 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

Установите камеры 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, потому что шум более точно оценен.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.