Документация Engee

EngeePhased.CFARDetector2D

Страница в процессе разработки.

Детектор с постоянным уровнем ложной тревоги (ПУЛТ) для двумерных сигналов.

Библиотека

EngeePhased

Блок

2-D Обнаружение с ПУЛТ

Описание

Системный объект EngeePhased.CFARDetector2D моделирует детектор с поддержанием постоянного уровня ложной тревоги (ПУЛТ) для двумерных сигналов.

Входная сигнальная последовательность разбивается на интервалы (называемых ячейками). Обнаружение регистрируется тогда, когда значение ячейки во входных данных превышает пороговое значение. Чтобы поддерживать постоянную частоту ложных тревог, пороговое значение устанавливается кратным мощности шума входных данных.

Детектор оценивает мощность шума от соседних ячеек, окружающих тестируемую ячейку (cell-under-test, CUT), используя один из трех методов усреднения ячеек или метод порядковой статистики. Методы усреднения ячеек: усреднение ячеек (CA), усреднение наибольшего значения ячейки (GOCA) или усреднение наименьшего значения ячейки (SOCA).

Более подробную информацию о детекторах CFAR см. в [1].

Для каждой тестируемой ячейки детектор:

  1. Оценивает статистику шума по значениям ячеек в полосе обучения, окружающей тестируемую ячейку.

  2. Вычисляет пороговое значение, умножая оценку шума на пороговый коэффициент.

  3. Сравнивает значение тестируемой ячейки с пороговым значением, чтобы определить наличие или отсутствие цели. Если значение больше порогового, то цель присутствует.

Чтобы создать и использовать детектор с ПУЛТ, выполните следующие действия:

  1. Создайте объект EngeePhased.CFARDetector2D и установите его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Чтобы узнать подробнее о том, как работать с системными объектами, см. Системные объекты Engee.

Синтаксис

Создание

  • detector = EngeePhased.CFARDetector2D() — создает объект двумерного детектора с ПУЛТ со значениями свойств по умолчанию.

  • detector = EngeePhased.CFARDetectora2D(Name=Value) — создает объект двумерного детектора с ПУЛТ с заданными свойствами в виде пары Name=Value, где Name — имя свойства, а Value — соответствующее значение. Можно указать несколько пар «имя-значение», порядок пар не имеет значения. Неуказанные свойства сохраняют свои значения по умолчанию.

    detector=EngeePhased.CFARDetector2D(Method="OS", ThresholdFactor="Custom", Rank=2)

Использование

  • Y = detector(X,cutidx) — выполняет двумерное обнаружение с ПУЛТ во входных данных X для тестируемых ячеек cutidx. Выходной аргумент Y содержит результаты обнаружения для тестируемых ячеек.

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

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

  • ___ = detector(X,cutidx,thfac) — также использует пороговый коэффициент thfac для расчета порога обнаружения. Чтобы использовать этот синтаксис, установите для свойства ThresholdFactor значение "Input port".

Аргументы

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

X — входной сигнал
вещественная матрица M на N | вещественный массив M на N на P

Details

Входной сигнал, заданный как вещественная матрица на или вещественный массив на на

Типы данных

Float32, Float64

cutidx — индексы тестируемых ячеек
матрица целых положительных чисел 2 на D

Details

Индексы тестируемых ячеек, заданные как матрица целых положительных чисел на , где — количество тестируемых ячеек.

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

Типы данных

Float32, Float64

thfac — коэффициент порога обнаружения
положительный скаляр

Details

Пороговый коэффициент, используемый для расчета порога обнаружения, заданный как положительный скаляр.

Зависимости

Чтобы использовать этот входной аргумент, установите для свойства CustomThresholdFactor объекта детектора значение "Input port".

Типы данных

Float32, Float64

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

Y — выходной сигнал детектора
логическая матрица D на P | логическая матрица K на L

Details

Формат данных на выходе детектора зависит от свойства OutputFormat:

  • Если для свойства OutputFormat установлено значение "Cut result", аргумент Y представляет собой матрицу на , содержащую логические результаты обнаружения. Значение — это длина аргумента cutidx, а — величина третьей размерности аргумента X. Строки Y соответствуют строкам cutidx. Для каждой строки аргумента Y содержит значение 1 в столбце, если в соответствующем столбце аргумента X есть обнаружение. В противном случае аргумент Y содержит значения 0.

  • Если для свойства OutputFormat установлено значение "Detection index", аргумент Y — это матрица на , содержащая индексы обнаружений. Значение — это количество обнаружений, найденных во входных данных, а — число размерностей X. Если аргумент X — массив, то аргумент Y содержит индексы строк, столбцов и страниц каждого обнаружения в X в виде [detrow;detcol;detpage]. Если для свойства NumDetectionsSource установлено значение "Property", равно значению свойства NumDetections. Если количество фактических обнаружений меньше этого значения, то в столбцах без обнаружений устанавливаются значения NaN.

Типы данных

Float32, Float64

th — вычисленный порог обнаружения
вещественная матрица

Details

Вычисленный порог обнаружения для каждой обнаруженной ячейки, возвращаемый как вещественная матрица. Данные на порту th имеют ту же размерность, что и Y.

  • Если для свойства OutputFormat установлено значение "CUT result", аргумент th возвращает порог обнаружения, когда аргумент Y равен 1, и NaN, когда аргумент Y равен 0.

  • Если для свойства OutputFormat установлено значение "Detection index", аргумент th возвращает порог обнаружения для каждого соответствующего обнаружения в Y. Если при этом для свойства NumDetectionsSource установлено значение "Property", равно значению свойства NumDetections. Если количество фактических обнаружений меньше этого значения, столбцы без обнаружений устанавливаются в значения NaN.

Зависимости

Чтобы включить этот выходной аргумент, установите для свойства ThresholdOutputPort значение true.

Типы данных

Float32, Float64

noise — оценка мощности шума
вещественная матрица

Details

Оценка мощности шума для каждой обнаруженной ячейки, возвращаемая как вещественная матрица. Шум имеет те же размеры, что и аргумент Y.

  • Если для свойства OutputFormat установлено значение "CUT result", аргумент noise возвращает мощность шума, когда аргумент Y равен 1, и NaN, когда аргумент Y равен 0.

  • Если для свойства OutputFormat установлено значение "Detection index", аргумент noise возвращает мощность шума для каждого соответствующего обнаружения в Y. Если при этом для свойства NumDetectionsSource установлено значение "Property", равно значению свойства NumDetections. Если количество фактических обнаружений меньше этого значения, столбцы без обнаружений устанавливаются в значения NaN.

Зависимости

Чтобы включить этот выходной аргумент, установите для свойства NoisePowerOutputPort значение true.

Типы данных

Float32, Float64

Свойства

# Method — метод усреднения ПУЛТ
Строка

Details

Метод двумерного усреднения ПУЛТ, заданный одним из следующих значений: "CA" (по умолчанию), "GOCA", "SOCA" или "OS".

Для значений "CA", "GOCA", "SOCA" мощность шума — это среднее значение отсчетов, полученных из обучающей области.

Для значения "OS" мощность шума — это -е значение ячейки, полученное в результате численного упорядочивания всех значений обучающих ячеек. Установите с помощью свойства Rank.

Метод усреднения Описание

"CA" — алгоритм усреднения по ячейкам

Вычисляет выборочное среднее значение всех обучающих ячеек, окружающих тестовую ячейку.

"GOCA" — алгоритм усреднения по наибольшему числу ячеек

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

"SOCA" — алгоритм усреднения по наименьшему числу ячеек

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

"OS" — алгоритм статистики порядка

Сортирует обучающие ячейки в порядке возрастания числовых значений. Затем алгоритм выбирает -е значение из списка, где — это ранг, заданный свойством Rank.

# NoisePowerOutputPort — включение оценки выходной мощности шума
Логический тип

Details

Включение выходной мощности шума, заданное как false (по умолчанию) или true.

Чтобы получить оценку шума, установите для свойства NoisePowerOutputPort значение true и используйте выходной аргумент noise при вызове функции объекта.

# ProbabilityFalseAlarm — требуемая вероятность ложной тревоги
Вещественное число

Details

Требуемая вероятность ложной тревоги, заданная как вещественный положительный скаляр в диапазоне от 0 до 1.

Алгоритм вычисляет пороговый коэффициент из требуемой вероятности ложной тревоги.

Значение по умолчанию — 0.001.

Зависимости

Чтобы использовать это свойство, установите для свойства ThresholdFactor значение "Auto".

# OutputFormat — формат результатов обнаружения
Строка

Details

Формат возвращаемых результатов обнаружения, заданный одним из следующих значений: "CUT result" (по умолчанию) или "Detection index".

Если для свойства OutputFormat установлено значение "CUT result", результаты представляют собой логические значения обнаружения (1 или 0) для каждой протестированной ячейки.

Если для свойства OutputFormat установлено значение "Detection index", результаты представляют собой вектор или матрицу, содержащую индексы проверенных ячеек, превысивших порог обнаружения.

# ThresholdFactor — метод определения порогового коэффициента
Строка

Details

Метод порогового коэффициента, заданный одним из следующих значений: "Auto" (по умолчанию), "Custom" или "Input port":

  • "Auto" — объект автоматически вычисляет пороговый коэффициент, основываясь на желаемой вероятности ложной тревоги, указанной в свойстве ProbabilityFalseAlarm. При расчете предполагается, что каждый независимый сигнал на входе — это одиночный импульс, выходящий из детектора с квадратичным законом без интегрирования импульсов. При расчете также предполагается, что шум является белым гауссовским.

  • "Custom" — пороговый коэффициент задается в свойстве CustomThresholdFactor.

  • "Input port" — входной аргумент thfac задает пороговый коэффициент.

# TrainingBandSize — размер обучающей области
Скаляр / массив вещественных чисел

Details

Количество строк и столбцов ячеек обучающей области с каждой стороны тестируемой ячейки, заданное как целое положительное число или матрица на из целых положительных чисел. Первый элемент задает размер обучающей области по строкам, второй — по столбцам.

Указание этого свойства в виде скаляра эквивалентно указанию обучающей области с одинаковым значением для обоих измерений.

Значение по умолчанию [1 1] указывает на область шириной в 1 обучающую ячейку, окружающую тестируемую ячейку.

# GuardBandSize — размер защитной области
Скаляр / массив вещественных чисел

Details

Количество строк и столбцов ячеек защитной области с каждой стороны тестируемой ячейки, заданное как целое положительное число или матрица на из целых положительных чисел. Первый элемент задает размер защитной области по строкам, второй — по столбцам.

Значение по умолчанию [1 1] указывает на область шириной в 1 обучающую ячейку, окружающую тестируемую ячейку.

Значение 0 указывает на отсутствие защитных ячеек.

# ThresholdOutputPort — включение вывода значения порогового обнаружения
Логический тип

Details

Включение вывода порога обнаружения, заданное как false (по умолчанию) или true.

Чтобы включить вывод порога обнаружения, установите для свойства ThresholdOutputPort значение true и используйте выходной аргумент th.

# NumDetections — максимальное количество индексов обнаружения
Целое число

Details

Максимальное количество индексов обнаружения, заданное как целое положительное число.

Значение по умолчанию — 1.

Зависимости

Чтобы использовать это свойство, установите для свойства OutputFormat значение "Detection index", а для свойства NumDetectionsSource значение "Property".

# Rank — ранг порядковой статистики
Целое число

Details

Ранг порядковой статистики, заданный как целый положительный скаляр.

Значение этого свойства должно лежать между 1 и , где — количество обучающих ячеек. Значение по умолчанию 1 задает наименьшее значение в области обучения.

Зависимости

Чтобы использовать это свойство, установите для свойства Method значение "OS".

# NumDetectionsSource — источник количества обнаружений
Строка

Details

Источник количества обнаружений, заданный одним из следующих значений: "Auto" (по умолчанию) или "Property":

  • Если для свойства NumDetectionsSource установлено значение "Auto", количество сообщаемых индексов обнаружения равно общему количеству тестируемых ячеек, в которых есть обнаружения.

  • Если для свойства NumDetectionsSource установлено значение "Property", количество сообщаемых обнаружений определяется значением свойства NumDetections.

Зависимости

Чтобы использовать это свойство, установите для свойства [Property:OutputForma]t значение "Detection index".

# CustomThresholdFactor — пользовательский пороговый коэффициент
Вещественное число

Details

Пользовательский пороговый коэффициент, заданный как вещественный положительный скаляр.

Значение по умолчанию — 1.

Зависимости

Чтобы использовать это свойство, установите для свойства Property:ThresholdFactor значение "Custom".

Методы

Общие для всех системных объектов

step!

Запустить алгоритм работы системного объекта

release!

Разрешить изменение значения свойства системного объекта

reset!

Сброс внутренних состояний системного объекта

Примеры

Установка двумерного порога ПУЛТ для данных, содержащих только шум

Details

В этом примере показано, как установить двумерный порог ПУЛТ на основе требуемой вероятности ложной тревоги (probability of false alarm, pfa).

Выполним обнаружение с ПУЛТ методом усреднения ячеек на матрице ячеек размером , содержащей гауссовский шум. Оценим эмпирическое pfa и сравните ее с требуемой pfa. Для получения хорошей оценки выполним это моделирование на 1000 аналогичных матрицах. Сначала установим порог, используя требуемую pfa. В данном случае целевых ячеек нет, и pfa можно оценить по количеству ячеек, превышающих порог. Предположим, что данные обрабатываются с помощью детектора квадратичного закона и что интеграция импульсов не выполняется. Используем полосу обучающих ячеек шириной 3 ячейки и высотой 4 ячейки. Используем защитную полосу шириной 3 ячейки и высотой 2 ячейки, чтобы отделить тестируемые ячейки (CUT) от обучающих ячеек. Укажиv требуемую pfa 5.0e-4.

using EngeePhased
using Random

Random.seed!(1234)

p = 5e-4
rs = MersenneTwister(5)
N = 41
ntrials = 1000
detector = EngeePhased.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) + im * randn(rs, N, N, ntrials))
x2 = abs.(x).^2;

Обработаем все клетки на каждом изображении. Для этого найдем строку и столбец каждой клетки CUT, область обучения которой полностью находится внутри каждого изображения. Отобразим клетки CUT.

Ngc = detector.GuardBandSize[2];
Ngr = detector.GuardBandSize[1];
Ntc = detector.TrainingBandSize[2];
Ntr = detector.TrainingBandSize[1];
cutidx = Matrix{Int}(undef, 2, 0)
colstart = Ntc + Ngc + 1;
colend = N - ( Ntc + Ngc);
rowstart = Ntr + Ngr + 1;
rowend = N - ( Ntr + Ngr);

for m in colstart:colend
    for n in rowstart:rowend
        cutidx = [cutidx [n; m]]
    end
end

ncutcells = size(cutidx,2);

using Plots

cutimage = zeros(N, N)

for k in 1:ncutcells
    cutimage[cutidx[1, k], cutidx[2, k]] = 1
end

heatmap(cutimage, aspect_ratio=:equal, yflip=true)

so cfar detector 2d 1

Выполним обнаружение всех клеток CUT. Вернем классификацию обнаружения и пороговое значение, использованное для классификации клетки.

dets,th = detector(x2,cutidx);

Найдем и отобразим изображение с ложным срабатыванием.

using Plots

di = Int[]
for k in 1:ntrials
    d = dets[:, k]
    if any(d)
        push!(di, k)
    end
end

idx = di[1]
detimg = zeros(N, N)
for k in 1:ncutcells
    detimg[cutidx[1, k], cutidx[2, k]] = dets[k, idx]
end

heatmap(detimg, aspect_ratio=:equal, yflip=true)

so cfar detector 2d 2

Вычислим эмпирический pfa.

pfa = sum(dets) / ntrials / ncutcells
0.0005005945303210463

Эмпирические и заданные значения pfa совпадают.

Отобразим среднее эмпирическое пороговое значение по всем изображениям.

import EngeeDSP.Functions: mean
mean(th, "all")
31.71466631470533

Вычислим теоретический пороговый коэффициент для требуемого значения pfa.

import EngeePhased.Functions: npwgnthresh

threshfactor = npwgnthresh(p,1,"noncoherent");
threshfactor = 10^(threshfactor/10)
7.600902459542084

Теоретический пороговый коэффициент, умноженный на дисперсию шума, должен совпадать с измеренным порогом.

noisevar = mean(x2, "all")
threshfactor*noisevar
30.42597796742739

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

Дополнительно

Тестируемые ячейки

Details

Алгоритм для двумерного детектирования с ПУЛТ требует оценки мощности шума. Мощность шума вычисляется по ячейкам, которые, как предполагается, не содержат целевого сигнала. Эти ячейки являются обучающими. Обучающие ячейки образуют полосу вокруг тестируемой ячейки, но могут быть отделены от тестируемой ячейки защитной полосой. Порог обнаружения рассчитывается путем умножения мощности шума на пороговый коэффициент.

2 d cfar detector 1 ru

Для усреднения по методу GOCA и SOCA мощность шума определяется как среднее значение одной из левой или правой половин области обучающих ячеек.

Поскольку число столбцов в обучающей области нечетное, то ячейки среднего столбца в равной степени относятся либо к левой, либо к правой половине.

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

Общее количество ячеек в комбинированной обучающей области, защитной области и тестируемой ячейке составляет:

где

  • — количество столбцов обучающей полосы;

  • — количество строк обучающей полосы;

  • — количество столбцов защитной полосы;

  • — количество строк защитной полосы.

Общее количество ячеек в комбинированной защитной области и тестируемой ячейке составляет:

Количество обучающих ячеек составляет:

По конструкции число обучающих ячеек всегда четное. Поэтому для реализации медианного фильтра можно выбрать ранг или .

Точность данных

Details

Системный объект EngeePhased.CFARDetector2D поддерживает одинарную и двойную точность для входных данных, свойств и аргументов.

Если входные данные аргумента X имеют одинарную точность, то выходные данные имеют одинарную точность.

Если входные данные аргумента X имеют двойную точность, то выходные данные имеют двойную точность.

Точность выходных данных не зависит от точности свойств и других аргументов.

Литература

  1. Richards, M. A. Fundamentals of Radar Signal Processing. New York: McGraw-Hill, 2005.

  2. Mott, H. Antennas for Radar and Communications. New York: John Wiley & Sons, 1992.

  3. Skolnik, M. Introduction to Radar Systems, 3rd Ed. New York: McGraw-Hill, 2001.