В этом примере показано, как оценить:
Вероятность целевой дорожки: целевая вероятность обнаружения дорожки для единой цели с и без присутствия ложных предупреждений
Вероятность ложной дорожки: Ложная вероятность дорожки из-за ложных предупреждений в окружении единой цели
Этот пример обсуждает различные методы, чтобы выполнить эти вычисления с различными уровнями точности и время вычисления.
В оценке эффективности средства отслеживания часто вычисляются четыре типа вероятностей:
Вероятность единой цели отслеживает в отсутствие ложных предупреждений (вероятность ложного предупреждения )
Вероятность одной ложной дорожки в отсутствие целей (вероятность обнаружения )
Вероятность единой цели отслеживает в присутствии ложных предупреждений
Вероятность одной ложной дорожки в присутствии целей
Этот пример сначала вычисляет вероятность дорожки единой цели в отсутствие ложных предупреждений с помощью Бернуллиевой суммы. Затем это обсуждает алгоритм общей истории логического элемента (CGH), который может использоваться, чтобы вычислить все 4 типа вероятностей и вводит концепцию рабочей характеристики средства отслеживания (TOC), которая похожа в форме на рабочую характеристику приемника (ROC). Алгоритм CGH обеспечивает оценку системной способности и предлагает средние значения, чтобы оценить эффективность комплексной системы. Наконец, пример представляет алгоритм CGH в применении к автомобильному радарному сценарию проекта и помогает пользователям в выборе:
Необходимое целевое отношение сигнал-шум (SNR)
Количество ложных дорожек
Порог подтверждения средства отслеживания
Бернуллиевая сумма допускает быстрый и легкий анализ эффективности в случае единой цели в отсутствие ложных предупреждений. Вероятность обнаружения дорожки может быть задан в терминах вероятности обнаружения приемника в течение периода окна, заданного как
,
где T является основным периодом выборки, и N представляет количество возможностей для обнаружения.
Для пороговой логики подтверждения M-of-N, целевой вероятности дорожки задан как
,
где
.
Пороговая логика подтверждения, обозначенная как M-of-N или M/N, является одноэтапной логикой, где дорожка должна сопоставить к обнаружению, также известному как хит, по крайней мере, M времена из последовательных взглядов N. Например, рассмотрите 2 3 логика. В следующем рисунке чисто желтый представляет хит, который может быть или от цели или от ложного предупреждения. Шаблонные синие блоки представляют промахи. Случаи, представленные ниже, не предназначаются, чтобы быть исчерпывающими, но фигура указывает, что случаи 2 и 3 удовлетворяют порогу, но случай 1 не делает.
Исследуйте вероятность целевой дорожки по сравнению с вероятностью обнаружения для порога подтверждения 2/3 с помощью Бернуллиевого метода суммы. Выполните Бернуллиевое вычисление суммы, приняв, что один хит требуется, чтобы инициализировать дорожку.
% Define probabilities for analysis Pd = linspace(0,1,100).'; % Define confirmation threshold M/N M = 2; % Number of hits N = 3; % Number of observations or opportunities % Calculate Bernoulli sum, assuming 1 hit is required to initialize a track tic PdtBernoulli = helperBernoulliSum(Pd,M,N); elapsedTime = toc; helperUpdate('Bernoulli',elapsedTime);
Bernoulli calculation completed. Total computation time is 0.0158 seconds.
% Plot the probability of detection versus the probability of target track hAxes = helperPlot(Pd,PdtBernoulli,'M/N = 2/3','P_D','P_{DT}', ... sprintf('Bernoulli Sum\nProbability of Target Track in the Absence of False Alarms')); % Set desired probability of target track yline(hAxes,0.9,'--','LineWidth',2,'DisplayName','Desired P_{DT}');
Принимая необходимую вероятность целевой дорожки 0,9, график выше показывает, что вероятность обнаружения приблизительно 0,7 необходима.
Значения, полученные из Бернуллиевого вычисления суммы, являются полезными в быстрых исследованиях, но не являются обычно представительными для действительных сред отслеживания, где целевые дорожки затронуты присутствием ложных предупреждений. Рассмотрите сценарий, где цель действует в присутствии помехи.
Предположение, что ложные предупреждения происходят на базисе на ячейку на взгляд, вероятность ложных предупреждений в логическом элементе отслеживания зависит от количества ячеек в логическом элементе. Примите три типа событий:
Мисс: Никакое обнаружение
Хит: Ложное предупреждение
Хит: Целевое обнаружение
Количество ячеек в логическом элементе зависит от истории событий и порядка, в котором события имеют место. Эти факторы диктуют последовательность роста логического элемента средства отслеживания.
Бернуллиевый метод суммы принимает, что нет никаких ложных предупреждений и что порядок обнаружений не имеет значения. Таким образом, когда вы используете Бернуллиевую сумму в цели в сценарии помехи, это приводит к чрезмерно оптимистическим результатам.
Один подход для анализа таких сценариев должен оценить каждую возможную последовательность дорожки и определить, какие последовательности удовлетворяют пороговой логике подтверждения. Этот метод решения "в лоб" создания Цепи Маркова обычно слишком в вычислительном отношении интенсивен.
Другой подход должен использовать анализ типов Монте-Карло. Вместо того, чтобы генерировать полную Цепь Маркова, симуляция Монте-Карло вручную генерирует случайные последовательности событий N. Порог подтверждения применяется к каждой последовательности, и статистические данные агрегированы. Метод Монте-Карло основан на законе больших чисел, таким образом, эффективность улучшается как количество увеличений итераций. Анализ Монте-Карло предоставляет себя хорошо распараллеливанию, но в случае маленьких вероятностей ложного предупреждения, количество итераций может стать ненадежным. Таким образом альтернативные методы, чтобы быстро вычислить меры по вероятности дорожки необходимы.
Алгоритм общей истории логического элемента (CGH) значительно уменьшает время вычисления и требования к памяти. Алгоритм избегает потребности в ручной генерации последовательностей, как в случае анализа Монте-Карло, который может быть дорогостоящим для событий низкой вероятности.
Алгоритм начинается путем создания предположения, что существует три типа дорожек, которые могут содержать:
Обнаружения от целей
Обнаружения от целей и ложных предупреждений
Обнаружения от ложных предупреждений только
Целевая дорожка задана как любая дорожка, которая содержит по крайней мере одно целевое обнаружение и удовлетворяет порогу подтверждения M/N. Таким образом отследите типы 1 и 2, считаются целевыми дорожками, тогда как 3 считается ложной дорожкой.
Учитывая ранее заданные типы дорожки и с пороговой логикой подтверждения M/N, уникальное состояние дорожки задано как
,
где количество временных шагов начиная с последнего обнаружения (целевое или ложное предупреждение), количество временных шагов начиная с последнего целевого обнаружения, и общее количество обнаружений (цели или ложные предупреждения). В то время как алгоритм продолжает, вектор состояния дорожки развивается согласно Цепи Маркова.
Алгоритм принимает, что дорожка может быть запущена, учитывая только два типа событий:
Целевое обнаружение
Ложное предупреждение
Если дорожка инициируется, следующие четыре типа событий продолжают дорожку:
Никакое обнаружение
Целевое обнаружение
Ложное предупреждение
Целевое обнаружение и ложное предупреждение
Вероятность дорожки во взгляде m умножается на вероятность события, которое продолжает дорожку во взгляде . Дорожки затем смешаны путем добавления вероятностей дорожки файлов дорожки с общим вектором истории логического элемента. Это смешивание сохраняет количество состояний дорожки в Цепи Маркова в разумных пределах.
Предположения об алгоритме CGH следующие:
Вероятность больше чем одного ложного предупреждения в логическом элементе является низкой, который верен, когда вероятность ложного предупреждения является низкой ( или меньше)
Местоположение цели в логическом элементе имеет универсальное пространственное распределение
Алгоритм разделения дорожки используется
Алгоритм CGH может использоваться, чтобы вычислить все четыре типа вероятности:
Вероятность единой цели отслеживает в отсутствие ложных предупреждений
Вероятность одной ложной дорожки в отсутствие целей
Вероятность единой цели отслеживает в присутствии ложных предупреждений
Вероятность одной ложной дорожки в присутствии целей
Вероятность целевой дорожки и вероятность ложной дорожки формируют базис рабочей характеристики средства отслеживания (TOC). TOC хвалит рабочую характеристику приемника (ROC), которая обычно используется в предсказании анализа и эффективности приемников. Объединение ROC и TOC обеспечивает аналитический инструмент комплексной системы.
Вычислите и постройте TOC с помощью кривых ROC от rocsnr
как входные параметры. Примите отношение сигнал-шум (SNR) 8 дБ. Продолжите использовать 2/3 пороговую логику подтверждения в качестве в Бернуллиевом примере суммы. Используйте toccgh
встроенное средство отслеживания.
% Receiver operating characteristic (ROC) snrdB = 8; % SNR (dB) [Pd,Pfa] = rocsnr(snrdB,'MaxPfa',1e-3,'MinPfa',1e-12,'NumPoints',20); % Plot ROC helperPlotLog(Pfa,Pd,snrdB, ... 'Probability of False Alarm (P_{FA})', ... 'Probability of Detection (P_D)', ... 'Receiver Operating Characteristic');
% CGH algorithm tic [PdtCGH,PftCGH] = toccgh(Pd,Pfa,'ConfirmationThreshold',[M N]); elapsedTime = toc; helperUpdate('Common Gate History',elapsedTime);
Common Gate History calculation completed. Total computation time is 0.5482 seconds.
% Plot CGH results hAxes = helperPlotLog(PftCGH,PdtCGH,'CGH','P_{FT}','P_{DT}', ... 'Tracker Operating Characteristic (TOC) Curve');
Алгоритм CGH разрешает оценку эффективности средства отслеживания, похожей на анализ Монте-Карло, но с приемлемым временем вычисления несмотря на события низкой вероятности. Алгоритм CGH таким образом разрешает высокоуровневое расследование и выбор опций до более интенсивных, подробных симуляций.
Рассмотрите средство отслеживания для автомобильного приложения. Задайте пользовательское, одномерное, средство отслеживания почти постоянной скорости (NCV) с помощью trackingKF
. Примите что частота обновления 1 секунда. Примите, что матрица переходов имеет форму
и шум процесса имеет форму
,
где настраивающийся фактор, заданный как
.
Вход максимальное целевое ожидаемое ускорение. Примите что максимальное ускорение 4 м/с ожидается для транспортных средств.
% Define the state transition matrix dt = 1; % Update rate (sec) A = [1 dt; 0 1]; % Define the process noise Q = [dt^4/4 dt^3/2; dt^3/2 dt^2]; % Tune the process noise amax = 4; % Maximum target acceleration (m/s^2) q = amax^2*dt; % Update the process noise Q = Q.*q; % Initialize the Kalman filter trkfilt = trackingKF('MotionModel','Custom', ... 'StateCovariance', [0 0; 0 0], ... 'StateTransitionModel',A, ... 'ProcessNoise',Q, ... 'MeasurementNoise',0, ... 'MeasurementModel',[1 0]);
Ошибочный эллипс используется к неопределенности дорожки модели. От этого эллипса неопределенности может быть вычислена последовательность роста логического элемента.
1- значения ошибочного эллипса вычисляются как квадратный корень из собственных значений из предсказанной ковариации состояния :
.
Область ошибочного эллипса затем вычисляется как
.
Область интервалов вычисляется как
.
Наконец, размер логического элемента в интервалах
.
Размер логического элемента таким образом зависит от средства отслеживания, последовательности события и разрешения интервалов. Вычислите последовательность роста логического элемента, приняв порог подтверждения N равный 3. Примите область значений, и разрешения уровня области значений для автомобильного радара равны 1 метру и 1 м/с, соответственно.
% Calculate gate growth sequence res = [1, 1]; % Bin resolutions [range (m), range-rate (m/s)] gs = helperCalculateGateSize(N,trkfilt,res)
gs = 1×3
1 51 124
% CGH algorithm tic [PdtCGHcustom,PftCGHcustom] = toccgh(Pd,Pfa,'ConfirmationThreshold',[M N],'GateGrowthSequence',gs); elapsedTime = toc; helperUpdate('Common Gate History',elapsedTime);
Common Gate History calculation completed. Total computation time is 0.1229 seconds.
% Add plot to previous plot helperAddPlotLog(hAxes,PftCGHcustom,PdtCGHcustom,'CGH with Custom Gate Growth Sequence');
При помощи ROC и TOC в соединении, системный аналитик может выбрать рабочую точку детектора, которая удовлетворяет в целом системные требования. Рассмотрите автомобильный радарный случай. По причине приложения желательно, чтобы ложные предупреждения остались очень низкие события вероятности. Кроме того, вероятность целевой дорожки должна быть высокой в целях безопасности. Рассмотрите следующие два требования.
Требование 1 Вероятность ложного предупреждения должна быть меньше
Требование 2 Вероятность целевой дорожки должна быть равна 0,9 или выше
Вычислите кривые ROC для SNRs, равного 6, 8, 10, и 12 дБ.
% Calculate ROC curves snrdB = [6 8 10 12]; % SNR (dB) [Pd,Pfa] = rocsnr(snrdB,'MaxPfa',1e-3,'MinPfa',1e-10,'NumPoints',10);
Используйте расчетные кривые ROC в качестве входных параметров к toccgh
функция, чтобы сгенерировать связанные кривые TOC. Используйте тот же порог подтверждения и пропустите последовательность роста, ранее сгенерированную.
% Generate TOC curves tic toccgh(Pd,Pfa,'ConfirmationThreshold',[M N],'GateGrowthSequence',gs); elapsedTime = toc; helperUpdate('Common Gate History',elapsedTime);
Common Gate History calculation completed. Total computation time is 0.9590 seconds.
% Requirement 1: Probability of false alarms must be less than 1e-6 hAxesROC = subplot(2,1,1); xlim([1e-10 1e-2]) ylim([0 1]) reqPfa = 1e-6; helperColorZonesReqPfa(hAxesROC,reqPfa) legend(hAxesROC,'Location','eastoutside') % Requirement 2: Probability of target track must be equal to 0.9 or above hAxesTOC = subplot(2,1,2); xlim([1e-14 1e-4]) ylim([0 1]) reqPdt = 0.9; helperColorZonesReqPdt(hAxesTOC,reqPdt)
Требование 1 указывает, что только точки 1 - 6 на кривых ROC могут быть включены для последующего анализа, поскольку они удовлетворяют вероятности ниже, чем . Точки 7 - 10 не удовлетворяют это требование.
Относительно требования 2 кривая ROC, соответствующая ОСШ на 6 дБ, не удовлетворяет второе требование ни в какой точке. Единственные кривые, чтобы продолжить рассматривать являются 8, 10, и кривые на 12 дБ. Требованию 2 соответствуют только для точки 10 на кривой на 8 дБ, точек 9 и 10 на кривой на 10 дБ и точек 5 - 10 на кривой на 12 дБ.
При объединении требований 1 и 2 только две аналитических точки удовлетворяют обоим требованиям точки 5 и 6 на кривой на 12 дБ. Точка 5 соответствует вероятности целевой дорожки 0,90 и вероятности ложной дорожки , который соответствует вероятности обнаружения 0,68 и вероятности ложного предупреждения . Точно так же точка 6 соответствует вероятности целевой дорожки 0,96, вероятности ложной дорожки , вероятность обнаружения 0,80 и вероятность ложного предупреждения . Выберите точку 6, которая представляет компромисс улучшенной вероятности целевой дорожки за счет немного более высокой, но разумной вероятности ложной дорожки.
Алгоритм CGH разрешает оценку ожидаемого количества ложных дорожек на основе количества целей, ожидаемых в среде и количестве ячеек в радарных данных. Ожидаемое количество ложных дорожек вычисляется как
,
где вероятность ложной дорожки в отсутствие целей, количество ячеек, вероятность ложной дорожки в присутствии целей, и количество целей.
Рассмотрите среду, где количество целей, как ожидают, будет равно 10, и количество ячеек равно
% Calculate expected number of false tracks using toccgh numCells = 1e5; % Number of cells in radar data numTargets = 10; % Number of targets in scenario selectedPd = Pd(6,4) ; % Selected probability of detection selectedPfa = Pfa(6); % Selected probability of false alarm [Pdt,Pft,Eft] = toccgh(selectedPd,selectedPfa, ... 'ConfirmationThreshold',[M N],'GateGrowthSequence',gs, ... 'NumCells',numCells,'NumTargets',10); % Output results helperPrintTrackProbabilities(Pdt,Pft,Eft);
Probability of Target Track in Presence of False Alarms = 0.9581 Probability of False Track in the Presence of Targets = 1.6410e-12 Expected Number of False Tracks = 5
Таким образом, на основе системных параметров, можно ожидать приблизительно пять ложных дорожек.
Рассмотрите тот же автомобильный радарный случай проекта, но исследуйте эффект порогов подтверждения 2/4, 3/4, и 4/4. Примите следующее:
Требование 1 Вероятность ложного предупреждения должна быть меньше
Требование 2 Вероятность целевой дорожки должна быть равна 0,9 или выше
Во-первых, вычислите кривую ROC с помощью rocpfa
функция.
% Calculate ROC curve assuming a probability of false alarm of 1e-6 Pfa = 1e-6; numPoints = 20; [Pd,snrdB] = rocpfa(Pfa,'NumPoints',numPoints,'MaxSNR',15);
Обновите последовательность роста логического элемента из-за большего количества наблюдений.
% Update the gate growth sequence N = 4; trkfilt = trackingKF('MotionModel','Custom', ... 'StateCovariance', [0 0; 0 0], ... 'StateTransitionModel',A, ... 'ProcessNoise',Q, ... 'MeasurementNoise',0, ... 'MeasurementModel',[1 0]); gs = helperCalculateGateSize(N,trkfilt,res)
gs = 1×4
1 51 124 225
Вычислите TOC, учитывая кривые ROC как входные параметры и пороги подтверждения, равные 2/4, 3/4, и 4/4.
% Calculate TOC cp = [2 4; 3 4; 4 4]; numCp = size(cp,1); PdtMat = zeros(numPoints,numCp); PftMat = zeros(numPoints,numCp); EftMat = zeros(numPoints,numCp); for ii = 1:numCp [PdtMat(:,ii),PftMat(:,ii),EftMat(:,ii)] = toccgh(Pd.',Pfa, ... 'ConfirmationThreshold',cp(ii,:),'GateGrowthSequence',gs, ... 'NumCells',numCells,'NumTargets',10); end % Plot ROC and TOC reqPdt = 0.9; helperPlotROCTOC(reqPdt,Pfa,Pd,snrdB,PdtMat,cp);
helperPrintReqValues(reqPdt,Pd,snrdB,PdtMat,EftMat,cp);
Confirmation Threshold = 2/4 Required Probability of Detection = 0.55 Required SNR (dB) = 10.76 Expected Number of False Tracks = 18 Confirmation Threshold = 3/4 Required Probability of Detection = 0.81 Required SNR (dB) = 12.03 Expected Number of False Tracks = 1 Confirmation Threshold = 4/4 Required Probability of Detection = 0.97 Required SNR (dB) = 13.37 Expected Number of False Tracks = 1
Рассматривая результаты, вы видите что чем более строгий порог подтверждения, тем выше необходимый ОСШ. Однако более строгие пороги подтверждения приводят к улучшенным количествам ложных дорожек.
В оценке эффективности средства отслеживания часто вычисляются четыре типа вероятностей:
Вероятность единой цели отслеживает в отсутствие ложных предупреждений
Вероятность одной ложной дорожки в отсутствие целей
Вероятность единой цели отслеживает в присутствии ложных предупреждений
Вероятность одной ложной дорожки в присутствии целей
Для вычисления 1, могут использоваться Бернуллиевые суммы. Однако, чтобы получить другие вероятности, различный метод должен использоваться. Анализ Монте-Карло может использоваться для расчета последних трех типов вероятностей, но вычислительные ресурсы и требуемое время могут стать ненадежными, который особенно верен для событий с низкой вероятностью. Алгоритм общей истории логического элемента (CGH) может использоваться, чтобы вычислить все четыре количества и значительно уменьшает вычислительные необходимые ресурсы.
Алгоритм CGH может использоваться, чтобы сгенерировать рабочую характеристику средства отслеживания (TOC). TOC хвалит рабочую характеристику приемника (ROC) и обеспечивает средние значения, чтобы оценить полную производительность системы. TOC и кривые ROC могут использоваться различными способами, такие как определение:
Необходимое целевое отношение сигнал-шум (SNR)
Порог подтверждения средства отслеживания
Наконец, алгоритм CGH разрешает вычисление ожидаемого количества ложных дорожек, которое предлагает понимание системной способности. Ожидаемое количество ложных дорожек может использоваться, чтобы установить вычислительную загрузку и помочь с решениями, связанными с оборудованием и обработкой.
Панель шалом, Y., и др. "От Рабочей характеристики Приемника до Системной Рабочей характеристики: Оценка Системы Формирования Дорожки". Транзакции IEEE на Автоматическом управлении, издании 35, № 2, февраль 1990, стр 172-79. DOI.org (Crossref), doi:10.1109/9.45173.
Панель шалом, Яаков, и др. Отслеживание и Fusion Данных: Руководство Алгоритмов. YBS Publishing, 2011.
function Pcnf = helperBernoulliSum(Pd,Mc,Nc) % Calculate simple Bernoulli sum. Use the start TOC logic, which assumes % that there is already one hit that initializes the track. % Update M and N for probability of deletion Nd = Nc - 1; % Need one hit to start counting. Assume first hit initializes track. Md = Nc - Mc + 1; % Need this many misses to delete % Bernoulli sum. Probability of deletion calculation. ii = Md:Nd; C = arrayfun(@(k) nchoosek(Nd,k),ii); P = (1 - Pd); Pdel = sum(C.*P(:).^ii.*(1 - P(:)).^(Nd - ii),2); % Probability of confirmation Pcnf = 1 - Pdel; end function helperUpdate(calculationType,elapsedTime) % Output elapsed time fprintf('%s calculation completed. Total computation time is %.4f seconds.\n', ... calculationType,elapsedTime); end function varargout = helperPlot(x,y,displayName,xAxisName,yAxisName,titleName,varargin) % Create a plot with logarithmic scaling on the x-axis % Create a figure figure('Name',titleName) hAxes = gca; % Plot data plot(hAxes,x,y,'LineWidth',2,'DisplayName',displayName,varargin{:}) hold(hAxes,'on') grid(hAxes,'on') % Update axes hAxes.Title.String = titleName; hAxes.XLabel.String = xAxisName; hAxes.YLabel.String = yAxisName; % Make sure legend is on and in best location legend(hAxes,'Location','Best') % Set axes as optional output if nargout == 1 varargout{1} = hAxes; end end function varargout = helperPlotLog(x,y,displayName,xAxisName,yAxisName,titleName,varargin) % Create a plot with logarithmic scaling on the x-axis % Create a figure figure('Name',titleName) hAxes = gca; % Plot data numCol = size(y,2); for ii = 1:numCol idxX = min(ii,size(x,2)); hLine = semilogx(hAxes,x(:,idxX),y(:,ii),'LineWidth',2,varargin{:}); if ischar(displayName) hLine.DisplayName = displayName; else hLine.DisplayName = sprintf('SNR (dB) = %.2f',displayName(ii)); end hold on end grid on % Update axes hAxes.Title.String = titleName; hAxes.XLabel.String = xAxisName; hAxes.YLabel.String = yAxisName; % Make sure legend is on and in best location legend(hAxes,'Location','Best') % Set axes as optional output if nargout == 1 varargout{1} = hAxes; end end function helperAddPlotLog(hAxes,x,y,displayName,varargin) % Add an additional plot to the axes hAxes with logarithmic scaling on the % x-axis % Plot data hold on hLine = semilogx(hAxes,x,y,'LineWidth',2,varargin{:}); hLine.DisplayName = displayName; end function gs = helperCalculateGateSize(N,trkfilt,res) % Calculate a gate growth sequence in bins % Initialize tracker gate growth sequence gs = zeros(1,N); % Gate growth sequence % Calculate gate growth sequence by projecting state uncertainty using % linear approximations. areaBin = prod(res(:),1); for n = 1:N [~,Ppred] = predict(trkfilt); % Predict % Calculate the products of the 1-sigma values E = eig(Ppred); E(E<0) = 0; % Remove negative values sigma1Prod = sqrt(prod(E(:),1)); % Calculate error ellipse area areaErrorEllipse = pi*sigma1Prod; % Area of ellipse = pi*a*b % Translate to bins gs(n) = max(ceil(areaErrorEllipse/areaBin),1); end end function helperColorZonesReqPfa(hAxes,req) % Plot color zones for requirement type 1 % Vertical requirement line xline(req,'--','DisplayName','Requirement',... 'HitTest','off'); % Get axes limits xlims = get(hAxes,'XLim'); ylims = get(hAxes,'YLim'); % Green box pos = [xlims(1) ylims(1) req ylims(2)]; x = [pos(1) pos(1) pos(3) pos(3) pos(1)]; y = [pos(1) pos(4) pos(4) pos(1) pos(1)]; hP = patch(hAxes,x,y,[0.4660 0.6740 0.1880], ... 'FaceAlpha',0.3,'EdgeColor','none','DisplayName','Requirement Met'); uistack(hP,'bottom'); % Red box pos = [req ylims(1) xlims(2) ylims(2)]; x = [pos(1) pos(1) pos(3) pos(3) pos(1)]; y = [pos(1) pos(4) pos(4) pos(1) pos(1)]; hP = patch(hAxes,x,y,[0.6350 0.0780 0.1840], ... 'FaceAlpha',0.3,'EdgeColor','none','DisplayName','Requirement Not Met',... 'HitTest','off'); uistack(hP,'bottom'); end function helperColorZonesReqPdt(hAxes,req) % Plot color zones for requirement type 2 % Horizontal requirement line yline(req,'--','DisplayName','Requirement',... 'HitTest','off') % Get axes limits xlims = get(hAxes,'XLim'); ylims = get(hAxes,'YLim'); % Green box pos = [xlims(1) req xlims(2) ylims(2)]; x = [pos(1) pos(1) pos(3) pos(3) pos(1)]; y = [pos(1) pos(4) pos(4) pos(1) pos(1)]; hP = patch(hAxes,x,y,[0.4660 0.6740 0.1880], ... 'FaceAlpha',0.3,'EdgeColor','none','DisplayName','Requirement Met',... 'HitTest','off'); uistack(hP,'bottom'); % Red box pos = [xlims(1) req xlims(2) req]; x = [pos(1) pos(1) pos(3) pos(3) pos(1)]; y = [pos(1) pos(4) pos(4) pos(1) pos(1)]; hP = patch(hAxes,x,y,[0.6350 0.0780 0.1840], ... 'FaceAlpha',0.3,'EdgeColor','none','DisplayName','Requirement Not Met',... 'HitTest','off'); uistack(hP,'bottom'); end function helperPrintTrackProbabilities(Pdt,Pft,Eft) % Print out results fprintf('Probability of Target Track in Presence of False Alarms = %.4f\n',Pdt) fprintf('Probability of False Track in the Presence of Targets = %.4e\n',Pft) fprintf('Expected Number of False Tracks = %d\n',Eft) end function helperPlotROCTOC(reqPdt,Pfa,Pd,snrdB,PdtMat,cp) % Plot ROC/TOC % Plot ROC curves figure hAxesROC = subplot(2,1,1); plot(hAxesROC,snrdB,Pd,'-o') title(hAxesROC,'Receiver Operating Characteristic (ROC)') xlabel(hAxesROC,'SNR (dB)') ylabel(hAxesROC,'P_D') grid(hAxesROC,'on') legend(hAxesROC,sprintf('%.1e',Pfa),'Location','Best') % Plot SNR versus probability of target track hAxesTOC = subplot(2,1,2); numCp = size(cp,1); for ii = 1:numCp plot(hAxesTOC,snrdB,PdtMat(:,ii),'-o', ... 'DisplayName',sprintf('%d/%d',cp(ii,1),cp(ii,2))) hold(hAxesTOC,'on') end title(hAxesTOC,'SNR versus P_{DT}') xlabel(hAxesTOC,'SNR (dB)') ylabel(hAxesTOC,'P_{DT}') grid(hAxesTOC,'on') legend(hAxesTOC,'Location','Best') % Label points colorVec = get(hAxesROC,'ColorOrder'); numSnr = numel(snrdB); textArray = arrayfun(@(x) sprintf(' %d',x),1:numSnr,'UniformOutput',false).'; xPosROC = snrdB; colorFont = brighten(colorVec,-0.75); numColors = size(colorVec,1); idxC = mod(1:numCp,numColors); % Use only available default colors idxC(idxC == 0) = numColors; % Do not let color index equal 0 % Label points ROC yPosROC = Pd; text(hAxesROC,xPosROC,yPosROC,textArray,'FontSize',6,'Color',colorFont(1,:),'Clipping','on') % Label points TOC xPosTOC = snrdB; for ii = 1:numCp yPosTOC = PdtMat(:,ii); text(hAxesTOC,xPosTOC,yPosTOC,textArray,'FontSize',6,'Color',colorFont(idxC(ii),:),'Clipping','on') end % Add requirement zone color blocks helperColorZonesReqPdt(hAxesTOC,reqPdt); end function helperPrintReqValues(reqPdt,Pd,snrdB,PdtMat,EftMat,cp) % Output information about required values given a required probability of % target track requirement % Get values numCp = size(PdtMat,2); reqPd = zeros(1,numCp); reqSNRdB = zeros(1,numCp); expEft = zeros(1,numCp); for ii = 1:numCp reqPd(ii) = interp1(PdtMat(:,ii),Pd,reqPdt); reqSNRdB(ii) = interp1(PdtMat(:,ii),snrdB,reqPdt); expEft(ii) = interp1(PdtMat(:,ii),EftMat(:,ii),reqPdt); end % Display required probability of detection, SNR, and expected false % tracks for ii = 1:numCp fprintf('Confirmation Threshold = %d/%d\n',cp(ii,1),cp(ii,2)); fprintf('Required Probability of Detection = %.2f\n',reqPd(ii)); fprintf('Required SNR (dB) = %.2f\n',reqSNRdB(ii)); fprintf('Expected Number of False Tracks = %d\n\n',expEft(ii)); end end