Системный объект: поэтапный. 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,th] = step(___)
также возвращает порог обнаружения, th
, применился к обнаруженным ячейкам под тестом. Чтобы включить этот синтаксис, установите свойство ThresholdOutputPort
на true
.
Объект выполняет инициализацию в первый раз, когда объект выполняется. Эта инициализация блокирует ненастраиваемые свойства (MATLAB) и входные спецификации, такие как размерности, сложность и тип данных входных данных. Если вы изменяете ненастраиваемое свойство или входную спецификацию, Системный объект выдает ошибку. Чтобы изменить ненастраиваемые свойства или входные параметры, необходимо сначала вызвать метод release
, чтобы разблокировать объект.
detector
— Двумерный детектор CFARphased.CFARDetector2D
Двумерный детектор CFAR, заданный как Системный объект phased.CFARDetector2D
.
X
Введите изображениеВведите изображение, заданное как действительный M-by-N матрица или действительный M-by-N-by-P массив. M и N представляют строки и столбцы матрицы. Каждая страница является независимым 2D сигналом.
Размер первой размерности входной матрицы может отличаться, чтобы моделировать изменяющуюся длину сигнала. Изменение размера может произойти, например, в случае импульсной формы волны с переменной импульсной частотой повторения.
Пример: [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-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
Вычисленный порог обнаруженияВычисленный порог обнаружения для каждой обнаруженной ячейки, возвращенной как матрица с действительным знаком. 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
Этот пример показывает, как установить 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, потому что шум более точно оценивается.
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.