exponenta event banner

шаг

Системный объект: поэтапный. 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.

Примечание

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

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

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

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

Входное изображение, заданное как вещественная матрица M-на-N или вещественная матрица M-на-N-на-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-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

Примеры

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

В этом примере показано, как установить пороговое значение 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

Теоретический порог и эмпирический порог соответствуют допустимой разнице.

Выполните обнаружение cell-avering 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 изображений сложных случайных шумов со стандартным отклонением 1 по 41.

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