Оценка эффективности с рабочей характеристикой средства отслеживания

В этом примере показано, как оценить:

  • Вероятность целевой дорожки: целевая вероятность обнаружения дорожки для единой цели с и без присутствия ложных предупреждений

  • Вероятность ложной дорожки: Ложная вероятность дорожки из-за ложных предупреждений в окружении единой цели

Этот пример обсуждает различные методы, чтобы выполнить эти вычисления с различными уровнями точности и время вычисления.

В оценке эффективности средства отслеживания часто вычисляются четыре типа вероятностей:

  1. Вероятность единой цели отслеживает в отсутствие ложных предупреждений (вероятность ложного предупреждения =Pfa=0)

  2. Вероятность одной ложной дорожки в отсутствие целей (вероятность обнаружения =Pd=0)

  3. Вероятность единой цели отслеживает в присутствии ложных предупреждений

  4. Вероятность одной ложной дорожки в присутствии целей

Этот пример сначала вычисляет вероятность дорожки единой цели в отсутствие ложных предупреждений с помощью Бернуллиевой суммы. Затем это обсуждает алгоритм общей истории логического элемента (CGH), который может использоваться, чтобы вычислить все 4 типа вероятностей и вводит концепцию рабочей характеристики средства отслеживания (TOC), которая похожа в форме на рабочую характеристику приемника (ROC). Алгоритм CGH обеспечивает оценку системной способности и предлагает средние значения, чтобы оценить эффективность комплексной системы. Наконец, пример представляет алгоритм CGH в применении к автомобильному радарному сценарию проекта и помогает пользователям в выборе:

  • Необходимое целевое отношение сигнал-шум (SNR)

  • Количество ложных дорожек

  • Порог подтверждения средства отслеживания

Вычислите вероятность дорожки единой цели в отсутствие ложных предупреждений

Бернуллиевая сумма

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

Tw=NT,

где T является основным периодом выборки, и N представляет количество возможностей для обнаружения.

Для пороговой логики подтверждения M-of-N, целевой вероятности дорожки Pdt задан как

Pdt=i=MNC(N,i)Pdi(1-Pd)(N-i),

где

C(N,i)=N!(N-i)!i!.

Пороговая логика подтверждения, обозначенная как 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}'); 

Figure Bernoulli Sum Probability of Target Track in the Absence of False Alarms contains an axes object. The axes object with title Bernoulli Sum Probability of Target Track in the Absence of False Alarms contains 2 objects of type line, constantline. These objects represent M/N = 2/3, Desired P_{DT}.

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

Вычислите вероятности для целей в помехе

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

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

  • Мисс: Никакое обнаружение

  • Хит: Ложное предупреждение

  • Хит: Целевое обнаружение

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

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

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

Другой подход должен использовать анализ типов Монте-Карло. Вместо того, чтобы генерировать полную Цепь Маркова, симуляция Монте-Карло вручную генерирует случайные последовательности событий N. Порог подтверждения применяется к каждой последовательности, и статистические данные агрегированы. Метод Монте-Карло основан на законе больших чисел, таким образом, эффективность улучшается как количество увеличений итераций. Анализ Монте-Карло предоставляет себя хорошо распараллеливанию, но в случае маленьких вероятностей ложного предупреждения, количество итераций может стать ненадежным. Таким образом альтернативные методы, чтобы быстро вычислить меры по вероятности дорожки необходимы.

Общий алгоритм истории логического элемента

Алгоритм общей истории логического элемента (CGH) значительно уменьшает время вычисления и требования к памяти. Алгоритм избегает потребности в ручной генерации последовательностей, как в случае анализа Монте-Карло, который может быть дорогостоящим для событий низкой вероятности.

Алгоритм начинается путем создания предположения, что существует три типа дорожек, которые могут содержать:

  1. Обнаружения от целей

  2. Обнаружения от целей и ложных предупреждений

  3. Обнаружения от ложных предупреждений только

Целевая дорожка задана как любая дорожка, которая содержит по крайней мере одно целевое обнаружение и удовлетворяет порогу подтверждения M/N. Таким образом отследите типы 1 и 2, считаются целевыми дорожками, тогда как 3 считается ложной дорожкой.

Учитывая ранее заданные типы дорожки и с пороговой логикой подтверждения M/N, уникальное состояние дорожки задано как

ω=[ωl,ωlt,λ],

где ωl количество временных шагов начиная с последнего обнаружения (целевое или ложное предупреждение), ωltколичество временных шагов начиная с последнего целевого обнаружения, и λ общее количество обнаружений (цели или ложные предупреждения). В то время как алгоритм продолжает, вектор состояния дорожки развивается согласно Цепи Маркова.

Алгоритм принимает, что дорожка может быть запущена, учитывая только два типа событий:

  • Целевое обнаружение

  • Ложное предупреждение

Если дорожка инициируется, следующие четыре типа событий продолжают дорожку:

  • Никакое обнаружение

  • Целевое обнаружение

  • Ложное предупреждение

  • Целевое обнаружение и ложное предупреждение

Вероятность дорожки во взгляде m умножается на вероятность события, которое продолжает дорожку во взгляде m+1. Дорожки затем смешаны путем добавления вероятностей дорожки файлов дорожки с общим вектором истории логического элемента. Это смешивание сохраняет количество состояний дорожки в Цепи Маркова в разумных пределах.

Предположения об алгоритме CGH следующие:

  • Вероятность больше чем одного ложного предупреждения в логическом элементе является низкой, который верен, когда вероятность ложного предупреждения является низкой (10-3 или меньше)

  • Местоположение цели в логическом элементе имеет универсальное пространственное распределение

  • Алгоритм разделения дорожки используется

Алгоритм CGH может использоваться, чтобы вычислить все четыре типа вероятности:

  • Вероятность единой цели отслеживает в отсутствие ложных предупреждений (Pfa=0)

  • Вероятность одной ложной дорожки в отсутствие целей(Pd=0)

  • Вероятность единой цели отслеживает в присутствии ложных предупреждений

  • Вероятность одной ложной дорожки в присутствии целей

Вероятность целевой дорожки и вероятность ложной дорожки формируют базис рабочей характеристики средства отслеживания (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');

Figure Receiver Operating Characteristic contains an axes object. The axes object with title Receiver Operating Characteristic contains an object of type line. This object represents SNR (dB) = 8.00.

% 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');

Figure Tracker Operating Characteristic (TOC) Curve contains an axes object. The axes object with title Tracker Operating Characteristic (TOC) Curve contains an object of type line. This object represents CGH.

Алгоритм CGH разрешает оценку эффективности средства отслеживания, похожей на анализ Монте-Карло, но с приемлемым временем вычисления несмотря на события низкой вероятности. Алгоритм CGH таким образом разрешает высокоуровневое расследование и выбор опций до более интенсивных, подробных симуляций.

Используя CGH с пользовательскими средствами отслеживания

Рассмотрите средство отслеживания для автомобильного приложения. Задайте пользовательское, одномерное, средство отслеживания почти постоянной скорости (NCV) с помощью trackingKF. Примите что частота обновления Δt 1 секунда. Примите, что матрица переходов имеет форму

A=[1Δt01]

и шум процесса имеет форму

Q=[Δt44Δt32Δt32Δt2]q,

где q настраивающийся фактор, заданный как

q=amax2Δt.

Вход amax2максимальное целевое ожидаемое ускорение. Примите что максимальное ускорение 4 м/с2 ожидается для транспортных средств.

% 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-σ значения ошибочного эллипса вычисляются как квадратный корень из собственных значений λ из предсказанной ковариации состояния Pk+1|k:

[λ1,λ2]=eig(Pk+1|k).

Область ошибочного эллипса затем вычисляется как

ErrorEllipseArea=πλ1λ2.

Область интервалов вычисляется как

BinArea=(ΔRange)(ΔRangeRate).

Наконец, размер логического элемента в интервалах

GateSize=ErrorEllipseAreaBinArea.

Размер логического элемента таким образом зависит от средства отслеживания, последовательности события и разрешения интервалов. Вычислите последовательность роста логического элемента, приняв порог подтверждения 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');

Figure Tracker Operating Characteristic (TOC) Curve contains an axes object. The axes object with title Tracker Operating Characteristic (TOC) Curve contains 2 objects of type line. These objects represent CGH, CGH with Custom Gate Growth Sequence.

Оценка эффективности средства отслеживания для автомобильной радиолокационной системы

Вероятность ложного предупреждения и вероятность целевых требований дорожки

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

  • Требование 1 - Вероятность ложного предупреждения должна быть меньше 10-6

  • Требование 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)

Figure Operating Characteristics contains 2 axes objects. Axes object 1 with title Receiver Operating Characteristic (ROC) Curve contains 47 objects of type patch, line, text, constantline. These objects represent Requirement Not Met, Requirement Met, ROC 1, ROC 2, ROC 3, ROC 4, Requirement. Axes object 2 with title Tracker Operating Characteristic (TOC) Curve contains 47 objects of type patch, line, text, constantline. These objects represent Requirement Not Met, Requirement Met, Requirement.

Требование 1 указывает, что только точки 1 - 6 на кривых ROC могут быть включены для последующего анализа, поскольку они удовлетворяют вероятности ниже, чем 10-6. Точки 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 и вероятности ложной дорожки 1.27×10-13, который соответствует вероятности обнаружения 0,68 и вероятности ложного предупреждения 1.29×10-7. Точно так же точка 6 соответствует вероятности целевой дорожки 0,96, вероятности ложной дорожки 1.64×10-12, вероятность обнаружения 0,80 и вероятность ложного предупреждения 7.74×10-7. Выберите точку 6, которая представляет компромисс улучшенной вероятности целевой дорожки за счет немного более высокой, но разумной вероятности ложной дорожки.

Алгоритм CGH разрешает оценку ожидаемого количества ложных дорожек на основе количества целей, ожидаемых в среде и количестве ячеек в радарных данных. Ожидаемое количество ложных дорожек Eft вычисляется как

Eft=Pft,ntNc+PftNt,

где Pft,nt вероятность ложной дорожки в отсутствие целей, Nc количество ячеек, Pft вероятность ложной дорожки в присутствии целей, и Nt количество целей.

Рассмотрите среду, где количество целей, как ожидают, будет равно 10, и количество ячеек равно

NumberofCells=(NumberofRangeCells)×(NumberofRangeRateCells)=1000×100=105.

% 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 - Вероятность ложного предупреждения должна быть меньше 10-6

  • Требование 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);

Figure contains 2 axes objects. Axes object 1 with title Receiver Operating Characteristic (ROC) contains 21 objects of type line, text. This object represents 1.0e-06. Axes object 2 with title S N R blank v e r s u s blank P indexOf D T baseline contains 66 objects of type patch, line, text, constantline. These objects represent Requirement Not Met, Requirement Met, 2/4, 3/4, 4/4, Requirement.

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. Вероятность единой цели отслеживает в отсутствие ложных предупреждений (Pfa=0)

  2. Вероятность одной ложной дорожки в отсутствие целей(Pd=0)

  3. Вероятность единой цели отслеживает в присутствии ложных предупреждений

  4. Вероятность одной ложной дорожки в присутствии целей

Для вычисления 1, могут использоваться Бернуллиевые суммы. Однако, чтобы получить другие вероятности, различный метод должен использоваться. Анализ Монте-Карло может использоваться для расчета последних трех типов вероятностей, но вычислительные ресурсы и требуемое время могут стать ненадежными, который особенно верен для событий с низкой вероятностью. Алгоритм общей истории логического элемента (CGH) может использоваться, чтобы вычислить все четыре количества и значительно уменьшает вычислительные необходимые ресурсы.

Алгоритм CGH может использоваться, чтобы сгенерировать рабочую характеристику средства отслеживания (TOC). TOC хвалит рабочую характеристику приемника (ROC) и обеспечивает средние значения, чтобы оценить полную производительность системы. TOC и кривые ROC могут использоваться различными способами, такие как определение:

  • Необходимое целевое отношение сигнал-шум (SNR)

  • Порог подтверждения средства отслеживания

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

Ссылки

  1. Панель шалом, Y., и др. "От Рабочей характеристики Приемника до Системной Рабочей характеристики: Оценка Системы Формирования Дорожки". Транзакции IEEE на Автоматическом управлении, издании 35, № 2, февраль 1990, стр 172-79. DOI.org (Crossref), doi:10.1109/9.45173.

  2. Панель шалом, Яаков, и др. Отслеживание и 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