exponenta event banner

trackerJPDA

Совместный вероятностный трекер ассоциации данных

Описание

trackerJPDA Система object™ представляет собой трекер, способный обрабатывать обнаружения множества целей от множества датчиков. Трекер использует совместную вероятностную ассоциацию данных для назначения обнаружений каждой дорожке. Трекер применяет мягкое назначение, где множественные обнаружения могут способствовать каждой дорожке. Трекер инициализирует, подтверждает, корректирует, прогнозирует (выполняет накрутку) и удаляет дорожки. Входами в трекер являются отчеты об обнаружении, генерируемые objectDetection, fusionRadarSensor, irSensor, или sonarSensor объекты. Трекер оценивает вектор состояния и ковариационную матрицу ошибки оценки состояния для каждой дорожки. Каждое обнаружение назначается, по меньшей мере, одной дорожке. Если обнаружение не может быть назначено какой-либо существующей дорожке, трекер создает новую дорожку.

Любой новый трек начинается в предварительном состоянии. Если предварительной дорожке назначено достаточно обнаружений, ее статус изменяется на подтвержденный (см. ConfirmationThreshold свойство). Если обнаружение уже имеет известную классификацию (т.е. ObjectClassID поле возвращаемой дорожки ненулевое), что соответствующая дорожка подтверждается немедленно. Когда дорожка подтверждена, трекер считает, что дорожка представляет физический объект. Если обнаружения не назначены дорожке в пределах заданного количества обновлений, дорожка удаляется.

Для отслеживания целей с помощью этого объекта:

  1. Создать trackerJPDA и задайте его свойства.

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

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

tracker = trackerJPDA создает trackerJPDA Системный объект со значениями свойств по умолчанию.

пример

tracker = trackerJPDA(Name,Value) задает свойства для трекера, используя одну или несколько пар имя-значение. Например, trackerJPDA('FilterInitializationFcn',@initcvukf,'MaxNumTracks',100) создает многообъектный трекер, использующий фильтр Калмана с постоянной скоростью и допускающий максимум 100 дорожек. Заключите каждое имя свойства в кавычки.

Свойства

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

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

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

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

Пример: 1

Функция инициализации фильтра, заданная как дескриптор функции или как символьный вектор, содержащий имя допустимой функции инициализации фильтра. Трекер использует функцию инициализации фильтра при создании новых дорожек.

Sensor Fusion and Tracking Toolbox™ предоставляет множество функций инициализации, которые можно использовать для определения FilterInitializationFcn для trackerJPDA объект.

Функция инициализацииОпределение функции
initcvkfИнициализируйте линейный фильтр Калмана с постоянной скоростью.
initcakfИнициализация линейного фильтра Калмана с постоянным ускорением.
initcvabfИнициализация фильтра альфа-бета с постоянной скоростью
initcaabfИнициализация альфа-бета-фильтра с постоянным ускорением
initcvekfИнициализируйте расширенный фильтр Калмана с постоянной скоростью.
initcaekfИнициализация расширенного фильтра Калмана с постоянным ускорением.
initrpekfИнициализация постоянного диапазона скоростей - параметризованный расширенный фильтр Калмана.
initapekfИнициализируйте постоянный угол скорости-параметризованный расширенный фильтр Калмана.
initctekf Инициализация расширенного фильтра Калмана с постоянной скоростью поворота.
initcackfИнициализация кубического фильтра с постоянным ускорением.
initctckfИнициализация кубатурного фильтра с постоянной скоростью поворота.
initcvckfИнициализация кубатурного фильтра постоянной скорости.
initcvukfИнициализация неописанного фильтра Калмана с постоянной скоростью.
initcaukf Инициализация неописанного фильтра Калмана с постоянным ускорением.
initctukfИнициализация неописанного фильтра Калмана с постоянной скоростью поворота.
initcvmscekfИнициализируйте расширенный фильтр Калмана с постоянной скоростью в измененных сферических координатах.
initekfimmИнициализация фильтра IMM отслеживания.

Можно также написать собственную функцию инициализации, используя следующий синтаксис:

filter = filterInitializationFcn(detection)
Входными данными для этой функции являются отчеты об обнаружении, подобные созданным objectDetection. Вывод этой функции должен быть объектом фильтра: trackingKF, trackingEKF, trackingUKF, trackingCKF, trackingGSF, trackingIMM, trackingMSCEKF, или trackingABF.

Для получения рекомендаций по написанию этой функции используйте type для проверки подробной информации о встроенных функциях MATLAB ®. Например:

type initcvekf

Примечание

trackerJPDA не принимает все функции инициализации фильтра в панели инструментов Sensor Fusion и Tracking. Полный список функций инициализации фильтра, доступных в Sensor Fusion и Tracking Toolbox, приведен в разделе Initialization (Инициализация) окна Estimation Filters (Фильтры оценки).

Типы данных: function_handle | char

Значение k для k-best JPDA, указанное как положительное целое число. Это свойство определяет максимальное количество возможных совместных событий для ассоциации отслеживания и обнаружения каждого кластера. Установка для этого свойства конечного значения позволяет запускать k-best JPDA-трекер, который генерирует максимум k событий на кластер.

Типы данных: single | double

Функция генерации возможных совместных событий, заданная как дескриптор функции или как символьный вектор, содержащий имя функции генерации возможных совместных событий. Функция генерации генерирует возможные матрицы совместных событий из допустимых событий (обычно задаваемых матрицей проверки действительности или матрицей правдоподобия) сценария. Для получения более подробной информации см. jpadEvents.

Также можно написать собственную функцию генерации.

  • Если MaxNumEvents свойство имеет значение Inf, функция должна иметь следующий синтаксис:

    FJE = myfunction(ValidationMatrix)
    Входные и выходные данные этой функции должны точно соответствовать форматам, используемым в jpdaEvents.

  • Если MaxNumEvents свойство имеет конечное значение, функция должна иметь следующий синтаксис:

    [FJE,FJEProbs] = myfunction(likelihoodMatrix,k)
    Входные и выходные данные этой функции должны точно соответствовать форматам, используемым в jpdaEvents.

Для получения рекомендаций по написанию этой функции используйте type для проверки деталей jpdaEvents:

type jpdaEvents

Пример: @myfunction или 'myfunction'

Типы данных: function_handle | char

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

Типы данных: single | double

Максимальное количество датчиков, которые могут быть подключены к трекеру, указанное как положительное целое число. MaxNumSensors должно быть больше или равно наибольшему значению SensorIndex найдено во всех обнаружениях, использованных для обновления трекера. SensorIndex является свойством objectDetection объект. MaxNumSensors свойство определяет, сколько наборов ObjectAttributes каждая дорожка может иметь.

Типы данных: single | double

Обрабатывать измерения вне последовательности (OOSM), указанные как 'Terminate' или 'Neglect'. Каждое обнаружение имеет связанную с ним временную метку td, и трекер имеет собственную временную метку tt, которая обновляется в каждом вызове. Трекер рассматривает измерение как OOSM, если td < tt.

Когда свойство указано как

  • 'Terminate' - Трекер прекращает работу, когда он сталкивается с какими-либо неупорядоченными измерениями.

  • 'Neglect' - Трекер игнорирует любые измерения вне последовательности и продолжает работать.

Примечание

Для трекера требуются все обнаруженные входные данные, которые являются общими SensorIndex имеют свои Time различия, ограниченные свойством TimeTolerance. При установке OOSMHandling свойство для 'Neglect', при запуске трекера необходимо убедиться в том, что при обнаружениях с нарушением последовательности метки времени строго меньше предыдущей метки времени.

Настраиваемый: Да

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

Например, можно использовать следующую структуру для определения прямоугольной опорной рамки, исходная позиция которой находится в [10 10 0] м и чья исходная скорость составляет [2-2 0] м/с относительно кадра сценария.

Имя поляСтоимость
Frame"Rectangular"
Position[10 10 0]
Velocity[2 -2 0]

Настраиваемый: Да

Типы данных: struct

Порог назначения обнаружения (или порог стробирования), заданный как положительный скаляр или вектор 1 на 2 для [C1, C2], где C1C2. Если указано как скаляр, указанное значение, val, расширяется до [val ,Inf].

Первоначально трекер выполняет грубую оценку для нормализованного расстояния между всеми дорожками и обнаружениями. Трекер вычисляет только точное нормированное расстояние для комбинаций, грубое нормированное расстояние которых меньше C2. Кроме того, трекер может назначать обнаружение дорожке только в том случае, если точное нормализованное расстояние между ними меньше C1. См. раздел distance функция, используемая с фильтрами слежения (например, trackingCKF и trackingEKF) для пояснения расчета расстояния.

Совет:

  • Увеличьте значение C2, если существуют комбинации отслеживания и обнаружения, которые должны вычисляться для назначения, но не являются таковыми. Уменьшите это значение, если расчет затрат занимает слишком много времени.

  • Увеличьте значение C1, если есть обнаружения, которые должны быть назначены дорожкам, но не. Уменьшите это значение, если есть обнаружения, которые назначены дорожкам, которым они не должны быть назначены (слишком далеко).

Вероятность обнаружения, заданная как скаляр в диапазоне [0,1]. Это свойство используется при вычислениях предельных задних вероятностей ассоциации и вероятности существования трека при инициализации и обновлении трека.

Пример: 0.85

Типы данных: single | double

Порог вероятности для инициализации новой дорожки, заданный как скаляр в диапазоне [0,1]. Если вероятности ассоциирования обнаружения с любой из существующих дорожек меньше, чем InitializationThreshold, обнаружение будет использоваться для инициализации новой дорожки. Это позволяет обнаружениям, которые находятся в пределах вентиля проверки подлинности дорожки, но имеют вероятность ассоциации ниже порога инициализации, порождать новую дорожку.

Пример: 0.1

Типы данных: single | double

Логический тип подтверждения и удаления, указанный как:

  • 'History' - Подтверждение и удаление трека основано на количестве назначений трека обнаружению в последних обновлениях трекера.

  • 'Integrated' - Подтверждение и удаление трека основано на вероятности существования трека, которая интегрирована в функцию присвоения.

Порог подтверждения дорожки, заданный как скаляр или вектор 1 на 2. Пороговое значение зависит от типа логики подтверждения и удаления дорожки, установленной с помощью TrackLogic свойство:

  • 'History' - Укажите порог подтверждения как вектор 1 на 2 [M N]. Дорожка подтверждается, если она записала по меньшей мере М попаданий в последние N обновлений. trackerJPDA регистрирует попадание в логику истории трека согласно HitMissThrehold. Значение по умолчанию: [2 3].

  • 'Integrated' - укажите порог подтверждения как скаляр. Дорожка подтверждается, если ее вероятность существования больше или равна порогу подтверждения. Значение по умолчанию: 0.95.

Типы данных: single | double

Порог удаления дорожки, заданный как скаляр или действительный вектор 1 на 2. Пороговое значение зависит от типа логики подтверждения и удаления дорожки, установленной с помощью TrackLogic свойство:

  • 'History' - Укажите порог подтверждения как [P R]. Если, в P последнего R трекер обновляет, подтвержденная дорожка не назначается никакому обнаружению, которое имеет вероятность больше, чем HitMissThreshold свойство, то эта дорожка удаляется. Значение по умолчанию: [5,5].

  • 'Integrated' - укажите порог удаления как скаляр. Дорожка удаляется, если ее вероятность существования падает ниже порогового значения. Значение по умолчанию: 0.1.

Пример: 0.2 или [5,6]

Типы данных: single | double

Порог для регистрации попадания или промаха, заданный как скаляр в диапазоне [0,1]. Логика истории дорожек регистрирует промах, и дорожка будет покрыта, если сумма предельных вероятностей назначений ниже HitMissThreshold. В противном случае логика истории дорожек регистрирует попадание.

Пример: 0.3

Зависимости

Чтобы включить этот аргумент, установите TrackLogic свойство для 'History'.

Типы данных: single | double

Пространственная плотность измерений загромождения, заданная как положительный скаляр. Плотность беспорядка описывает ожидаемое количество ложноположительных обнаружений на единицу объема. Используется в качестве параметра модели захламления Пуассона. Когда TrackLogic имеет значение 'Integrated', ClutterDensity также используется при вычислении начальной вероятности существования пути.

Пример: 1e-5

Типы данных: single | double

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

Пример: 1e-3

Зависимости

Чтобы включить этот аргумент, установите TrackLogic свойство для 'Integrated'.

Типы данных: single | double

Временная скорость целевых смертей, заданная как скаляр в диапазоне [0,1]. DeathRate описывает вероятность исчезновения истинных целей. Он связан с распространением вероятности существования дорожки (PTE):

PTE (t + δt) = (1 DeatRate) δtPTE (t)

где δt - интервал времени с момента предыдущего обновления t.

Зависимости

Чтобы включить этот аргумент, установите TrackLogic свойство для 'Integrated'.

Типы данных: single | double

Это свойство доступно только для чтения.

Начальная вероятность существования дорожки, заданная как скаляр в диапазоне [0,1] и вычисленная как InitialExistenceProbability = NewTargetDensity*DetectionProbability/(ClutterDensity + NewTargetDensity*DetectionProbability).

Зависимости

Чтобы включить это свойство, установите значение TrackLogic свойство для 'Integrated'. Когда TrackLogic свойство имеет значение 'History', это свойство недоступно.

Типы данных: single | double

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

Типы данных: logical

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

Типы данных: logical

Это свойство доступно только для чтения.

Количество дорожек, поддерживаемых трекером, возвращаемых как неотрицательное целое число.

Типы данных: single | double

Это свойство доступно только для чтения.

Количество подтвержденных дорожек, возвращаемых как неотрицательное целое число. Если IsConfirmed поле выходной структуры пути true, трасса подтверждена.

Типы данных: single | double

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

Типы данных: double

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

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

Описание

confirmedTracks = tracker(detections,time) возвращает список подтвержденных дорожек, которые обновляются из списка обнаружений во время обновления. Подтвержденные треки корректируются и прогнозируются до времени обновления, time.

confirmedTracks = tracker(detections,time,costMatrix) также указывает матрицу затрат.

Чтобы включить этот синтаксис, установите HasCostMatrixInput свойство для true.

confirmedTracks = tracker(___,detectableTrackIDs) также указывает список ожидаемых обнаруживаемых дорожек, заданных detectableTrackIDs. Этот аргумент можно использовать с любым из предыдущих входных синтаксисов.

Чтобы включить этот синтаксис, установите HasDetectableTrackIDsInput свойство для true.

[confirmedTracks,tentativeTracks,allTracks] = tracker(___) также возвращает список предварительных дорожек и список всех дорожек. Можно использовать любой из входных аргументов в предыдущих синтаксисах.

[confirmedTracks,tentativeTracks,allTracks,analysisInformation] = tracker(___) также возвращает информацию анализа, которая может использоваться для анализа дорожек. Можно использовать любой из входных аргументов в предыдущих синтаксисах.

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

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

Список обнаружения, указанный как массив ячеек objectDetection объекты. Time значение свойства каждого objectDetection объект должен быть меньше или равен текущему времени обновления, timeи больше предыдущего значения времени, использованного для обновления трекера. Также, Time различия между различными objectDetection объекты в массиве ячеек не обязательно должны быть равными.

Время обновления, указанное как скаляр. Трекер обновляет все дорожки до этого времени. Единицы измерения в секундах.

time должно быть больше или равно наибольшему Time значение свойства objectDetection объекты на входе detections список. time должен увеличиваться с каждым обновлением трекера.

Типы данных: single | double

Матрица затрат, заданная как действительная матрица M-by-N, где M - количество существующих дорожек в предыдущем обновлении, а N - количество текущих обнаружений. Строки матрицы затрат должны находиться в том же порядке, что и список дорожек, а столбцы должны находиться в том же порядке, что и список обнаружений. Получить правильный порядок списка дорожек из третьего выходного аргумента, allTracks, при обновлении трекера.

При первом обновлении трекера или когда у трекера нет предыдущих треков, укажите матрицу затрат, которая должна быть пустой с размером [0,numDetections]. Следует отметить, что стоимость должна быть предоставлена так, чтобы более низкие затраты указывали на более высокую вероятность назначения обнаружения дорожке. Чтобы предотвратить присвоение определенных обнаружений определенным дорожкам, можно установить для соответствующей записи матрицы затрат значение Inf.

Зависимости

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

Типы данных: double | single

Обнаруживаемые идентификаторы дорожек, заданные как действительный вектор M-by-1 или матрица M-by-2. Обнаруживаемые дорожки - это дорожки, которые датчики ожидают обнаружить. Первый столбец матрицы содержит список идентификаторов дорожек, которые датчики сообщают как обнаруживаемые. Дополнительный второй столбец позволяет добавить вероятность обнаружения для каждой дорожки.

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

Зависимости

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

Типы данных: single | double

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

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

Подтвержденные дорожки, возвращенные в виде массива objectTrack объекты в MATLAB и возвращенные в виде массива структур при создании кода. При создании кода имена полей возвращаемой структуры совпадают с именами свойств objectTrack.

Дорожка подтверждается, если она удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold собственность. В этом случае IsConfirmed свойство объекта или поля структуры true.

Типы данных: struct | object

Предварительные треки, возвращенные в виде массива objectTrack объекты в MATLAB и возвращенные в виде массива структур при создании кода. При создании кода имена полей возвращаемой структуры совпадают с именами свойств objectTrack.

Дорожка является предварительной, если она не удовлетворяет порогу подтверждения, указанному в ConfirmationThreshold собственность. В этом случае IsConfirmed свойство объекта или поля структуры false.

Типы данных: struct | object

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

Типы данных: struct | object

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

ОбластьОписание
TrackIDsAtStepBeginning

Отслеживать идентификаторы при начале шага.

CostMatrix

Матрица затрат для присвоения.

UnassingedTracks

Идентификаторы неназначенных дорожек.

UnassingedDetections

Индексы неназначенных обнаружений в detections вход.

Clusters

Массив ячеек отчетов кластера.

InitiatedTrackIDs

Идентификаторы дорожек, инициированных во время шага.

DeletedTrackIDs

Идентификаторы дорожек, удаленных во время шага.

TrackIDsAtStepEnd

Отслеживать идентификаторы по завершении шага.

Clusters может включать несколько кластерных отчетов. Каждый кластерный отчет представляет собой структуру, содержащую:

ОбластьОписание
DetectionIndices

Индексы кластеризованных обнаружений.

TrackIDs

Отслеживать идентификаторы кластеризованных дорожек.

ValidationMatrixМатрица проверки кластера. Посмотрите jpadEvents для получения дополнительной информации.
SensorIndex

Индекс исходного датчика кластеризованных обнаружений.

TimeStampСредняя метка времени кластеризованных обнаружений.
MarginalProbabilitiesМатрица вероятностей ассоциации краевого заднего сустава.

Типы данных: struct

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

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

predictTracksToTimeПрогнозировать состояние дорожки
getTrackFilterPropertiesПолучение свойств фильтра дорожки
setTrackFilterPropertiesЗадать свойства фильтра дорожки
initializeTrackИнициализировать новую дорожку
deleteTrackУдалить существующую дорожку
stepЗапустить алгоритм объекта System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
isLockedОпределить, используется ли объект System
cloneСоздать повторяющийся объект System
resetСброс внутренних состояний объекта System

Примеры

свернуть все

Создайте объект trackerJPDA с постоянной скоростью по умолчанию Расширенный фильтр Калмана и логика отслеживания «История». Установите значение AssignureThreshold равным 100, чтобы разрешить совместное связывание дорожек.

tracker = trackerJPDA('TrackLogic','History', 'AssignmentThreshold',100,...
    'ConfirmationThreshold', [4 5], ...
    'DeletionThreshold', [10 10]);

Укажите истинные начальные положения и скорости двух объектов.

pos_true = [0 0 ; 40 -40 ; 0 0];
V_true = 5*[cosd(-30) cosd(30)  ; sind(-30) sind(30) ;0 0];

Создание графика кинотеатра для визуализации дорожек и обнаружений.

tp = theaterPlot('XLimits',[-1 150],'YLimits',[-50 50]);
trackP = trackPlotter(tp,'DisplayName','Tracks','MarkerFaceColor','g','HistoryDepth',0);
detectionP = detectionPlotter(tp,'DisplayName','Detections','MarkerFaceColor','r');

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Tracks, Detections.

Чтобы получить положение и скорость, создайте селекторы положения и скорости.

positionSelector = [1 0 0 0 0 0; 0 0 1 0 0 0; 0 0 0 0 0 0]; % [x, y, 0]
velocitySelector = [0 1 0 0 0 0; 0 0 0 1 0 0; 0 0 0 0 0 0 ]; % [vx, vy, 0]

Обновление трекера с обнаружением, отображением стоимости и предельной вероятности информации о связях, а также визуализация дорожек с обнаружениями.

dt = 0.2;
for time = 0:dt:30
    % Update the true positions of objects.
    pos_true = pos_true + V_true*dt;
    
    % Create detections of the two objects with noise.
    detection(1) = objectDetection(time,pos_true(:,1)+1*randn(3,1));
    detection(2) = objectDetection(time,pos_true(:,2)+1*randn(3,1));
    
    % Step the tracker through time with the detections.
    [confirmed,tentative,alltracks,info] = tracker(detection,time);
    
    % Extract position, velocity and label info.
    [pos,cov] = getTrackPositions(confirmed,positionSelector);
    vel = getTrackVelocities(confirmed,velocitySelector);
    meas = cat(2,detection.Measurement);
    measCov = cat(3,detection.MeasurementNoise);
    
    % Update the plot if there are any tracks.
    if numel(confirmed)>0
        labels = arrayfun(@(x)num2str([x.TrackID]),confirmed,'UniformOutput',false);
        trackP.plotTrack(pos,vel,cov,labels);
    end
    detectionP.plotDetection(meas',measCov);
    drawnow;
    
    % Display the cost and marginal probability of distribution every eight
    % seconds.
    if time>0 && mod(time,8) == 0
        disp(['At time t = ' num2str(time) ' seconds,']);
        disp('The cost of assignment was: ')
        disp(info.CostMatrix);
        disp(['Number of clusters: ' num2str(numel(info.Clusters))]);
        if numel(info.Clusters) == 1
            
            disp('The two tracks were in the same cluster.')
            disp('Marginal probabilities of association:')
            disp(info.Clusters{1}.MarginalProbabilities)
        end
        disp('-----------------------------')
    end
end
At time t = 8 seconds,
The cost of assignment was: 
   1.0e+03 *

    0.0020    1.1523
    1.2277    0.0053
Number of clusters: 2
-----------------------------
At time t = 16 seconds,
The cost of assignment was: 
    1.3968    4.5123
    2.0747    1.9558
Number of clusters: 1
The two tracks were in the same cluster.
Marginal probabilities of association:
    0.8344    0.1656
    0.1656    0.8344
    0.0000    0.0000
-----------------------------
At time t = 24 seconds,
The cost of assignment was: 
   1.0e+03 *

    0.0018    1.2962
    1.2664    0.0013
Number of clusters: 2
-----------------------------

Figure contains an axes. The axes contains 6 objects of type line, patch, text. These objects represent Tracks, Detections.

Алгоритмы

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

Ссылки

[1] Фортманн, Т., Я. Бар-Шалом и М. Шеффе. «Сонарное отслеживание нескольких целей с использованием совместной вероятностной ассоциации данных». IEEE Journal of Ocean Engineering. Том 8, номер 3, 1983, стр. 173-184.

[2] Мусицки, Д. и Р. Эванс. «Совместная ассоциация комплексных вероятностных данных: JIPDA». Сделки IEEE по аэрокосмическим и электронным системам. Том 40, номер 3, 2004, стр. 1093-1099.

Расширенные возможности

.
Представлен в R2019a