trackBranchHistory

Отслеживайте ориентированные на MHT ответвления и историю ветвей

Описание

The trackBranchHistory System object™ является ориентированным на трек, мультигипотезу отслеживающим (MHT) менеджером истории ветвей. Объект поддерживает историю ветвей дорожки (гипотез), которые основаны на результатах алгоритма назначения, такого как алгоритм, используемый assignTOMHT функция. Учитывая самый последний скан набора датчиков, результаты алгоритма назначения включают:

  • Назначения обнаружений датчиков конкретным ветвям пути

  • Неназначенные ветви пути

  • Неназначенные обнаружения

The trackBranchHistory при необходимости объект создает, обновляет и удаляет ветви дорожки и поддерживает историю ветвей дорожки для заданного количества сканов. Каждая дорожка и ветвь, сохраненные в объекте, имеют уникальный идентификатор. Чтобы просмотреть таблицу ветвей трека для текущей истории, используйте getHistory функция. Чтобы вычислить кластеры ветвей и несовместимые ветви, укажите историю ветвей дорожки в качестве входов clusterTrackBranches функция.

Чтобы создать менеджера истории ветвей и обновить историю ветвей:

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

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

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

Создание

Описание

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

пример

branchHistoryMgr = trackBranchHistory(Name,Value) устанавливает свойства для trackBranchHistory объект при помощи одной или нескольких пар "имя-значение". Для примера, branchHistoryMgr = trackBranchHistory('MaxNumTracks',250,'MaxNumTrackBranches',5) создает trackBranchHistory объект, который может поддерживать максимум 250 дорожек и 5 ветвей дорожек на дорожку. Заключайте имена свойства в кавычки. Заданные значения свойств могут быть любым типом числовых данных, но все они должны иметь совпадающий тип данных.

Свойства

расширить все

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Использование Системных объектов.

Максимальное количество датчиков в виде положительного целого числа.

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

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

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

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

Описание

пример

history = branchHistoryMgr(assignments,unassignedTracks,unassignedDetections,originatingSensor) возвращает историю ветви на основе результатов алгоритма назначения. Задайте назначения обнаружений ветвям, списки неназначенных дорожек и неназначенных обнаружений и идентификаторы датчиков, от которых произошли обнаружения. Входы могут быть любого типа числовых данных.

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

Входные параметры

расширить все

Назначение ветвей дорожки обнаружениям, заданное как матрица P-на-2 целых чисел, где P количество присвоений. В первом столбце перечислены индексы ветви дорожки. Во втором столбце перечислены индексы обнаружения. Одна и та же ветвь может быть назначена нескольким обнаружениям. То же обнаружение может быть назначено нескольким ветвям.

Для примера, если assignments = [1 1; 1 2; 2 1; 2 2], строки assignments задайте следующие назначения:

  • [1 1] - Ветвь 1 был назначаема на обнаружение 1.

  • [1 2] - Ветвь 1 был назначаема на обнаружение 2.

  • [2 1] - Ветвь 2 был назначаема на обнаружение 1.

  • [2 2] - Ветвь 2 был назначаема на обнаружение 2.

Индексы неназначенных ветвей пути, заданные как вектор Q-на-1 из целых чисел, где Q - количество неназначенных ветвей пути. Каждый элемент unassignedTracks должен соответствовать индексам ветви дорожки, хранящейся в настоящее время в trackBranchHistory Системный объект.

Индексы неназначенных обнаружений, заданные как R-на-1 вектор целых чисел, где R количество неназначенных обнаружений. Каждое неназначенное обнаружение приводит к новой ветви дорожки.

Индексы датчиков, из которых произошло каждое обнаружение, заданные как 1-байтовый L вектор целых чисел, где L количество обнаружений. The iпервый элемент originatingSensor соответствует SensorIndex значение свойства objectDetection i объекта.

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

расширить все

История ветви, возвращенная как матрица целых чисел.

Каждая строка history представляет уникальную ветвь дорожки. history имеет 3 + (D × S) столбцы, где D - количество поддерживаемых сканов (историческая глубина) и S - максимальное количество поддерживаемых датчиков. Первые три столбца представляют следующую информацию о каждой ветви дорожки:

  • TrackID - идентификатор дорожки, которая связана с ветвью. Ветви дорожки, которые, как принято, произошли от одной и той же цели, имеют один и тот же идентификатор дорожки. Если ветвь происходит от неназначенного обнаружения, эта ветвь получает новый идентификатор дорожки.

  • ParentID - идентификатор родительской ветви, то есть ветви, от которой произошла текущая ветвь. Ветви, созданные из одного родительского элемента, имеют одинаковые ParentID. A ParentID 0 указывает на новую дорожку. Эти дорожки создаются из гипотез, соответствующих неназначенным обнаружениям.

  • BranchID - Уникальный идентификатор ветви пути. Каждая ветвь, созданная в результате неназначенного обнаружения или назначения, получает новый идентификатор ветви.

Остальные D × S столбцы содержат идентификаторы обнаружений, назначенных каждой ветви. Ветвь может быть назначена, самое большее, одному обнаружению на скан и на датчик. Таблица показывает организацию этих столбцов с выборочными обнаружениями. N - количество сканов. Значение 0 означает, что датчик на этом скане не имеет назначенного ему обнаружения.

Сканы NСкан N - 1. . .Скан N - D
Датчик - 1Датчик - 2. . .Датчик - S Датчик - 1Датчик - 2. . .Датчик - S . . .Датчик - 1Датчик - 2. . .Датчик - S

1

0

...

0

1

2

...

0

...

0

0

...

0

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

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

release(obj)

расширить все

getHistoryПолучите историю ветвей поддерживаемых треков
stepЗапуск алгоритма системного объекта
releaseОтпустите ресурсы и допустите изменения в значениях свойств системного объекта и входных характеристиках
resetСброс внутренних состояний Системного объекта

Примеры

свернуть все

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

Создайте менеджера истории ветвей MHT, который является trackBranchHistory Системные object™. Установите объект, чтобы сохранить историю четырех датчиков и двух сканов.

branchHistoryMgr = trackBranchHistory('MaxNumSensors',4,'MaxNumHistoryScans',2)
branchHistoryMgr = 
  trackBranchHistory with properties:

          MaxNumSensors: 4
     MaxNumHistoryScans: 2
           MaxNumTracks: 200
    MaxNumTrackBranches: 3

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

emptyAssignment = zeros(0,2,'uint32');
emptyUnassignment = zeros(0,1,'uint32');
unassignedDetections = uint32([1;2;3]);
originatingSensor = [1 1 2];
history = branchHistoryMgr(emptyAssignment,emptyUnassignment, ...
    unassignedDetections,originatingSensor);

Просмотрите текущую историю ветвей при помощи getHistory функция. Каждое обнаружение присваивается отдельной дорожке.

getHistory(branchHistoryMgr)
ans=3×5 table
    TrackID    ParentID    BranchID                     Scan2                                       Scan1                  
                                       Sensor1    Sensor2    Sensor3    Sensor4    Sensor1    Sensor2    Sensor3    Sensor4
    _______    ________    ________    ________________________________________    ________________________________________

       1          0           1           1          0          0          0          0          0          0          0   
       2          0           2           2          0          0          0          0          0          0          0   
       3          0           3           0          3          0          0          0          0          0          0   

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

  • Присвойте ветвь 1 обнаружениям 1 и 2.

  • Присвойте ветвь 2 обнаружениям 1 и 2.

  • Рассмотрите неназначенные ветви 1 и 3 трека.

  • Учитывайте обнаружения 1, 2 и 3 неназначенные.

assignments = uint32([1 1; 1 2; 2 1; 2 2]);
unassignedTracks = uint32([1;3]);
unassignedDetections = uint32([1;2;3]);

Обновите диспетчер истории ветвей с помощью назначений и неназначенных треков и обнаружений.

history = branchHistoryMgr(assignments,unassignedTracks, ...
    unassignedDetections,originatingSensor);

Просмотр обновленной истории ветвей.

getHistory(branchHistoryMgr)
ans=9×5 table
    TrackID    ParentID    BranchID                     Scan2                                       Scan1                  
                                       Sensor1    Sensor2    Sensor3    Sensor4    Sensor1    Sensor2    Sensor3    Sensor4
    _______    ________    ________    ________________________________________    ________________________________________

       1          1            1          0          0          0          0          1          0          0          0   
       3          3            3          0          0          0          0          0          3          0          0   
       4          0            4          1          0          0          0          0          0          0          0   
       5          0            5          2          0          0          0          0          0          0          0   
       6          0            6          0          3          0          0          0          0          0          0   
       1          1            7          1          0          0          0          1          0          0          0   
       1          1            8          2          0          0          0          1          0          0          0   
       2          2            9          1          0          0          0          2          0          0          0   
       2          2           10          2          0          0          0          2          0          0          0   

Смотрите историю ветвей.

  • Последний скан - Скан 2. Предыдущий скан - Скан 1, которое было Скан 2 в предыдущем обновлении назначения. История сместила один скан вправо.

  • Ветви 1 и 3 являются ветвями для неназначенных путей.

  • Ветвь 2 больше не входит в историю, поскольку она не считается неназначенной. Его назначение обнаружениям 1 и 2 создавало ветви 9 и 10.

  • Ветви 4-6 являются ветвями, созданными для неназначенных обнаружений.

  • Ветви 7-10 являются ветвями, созданными для заданий пути.

Ссылки

[1] Werthmann, John R. «Пошаговое описание вычислительно эффективной версии отслеживания нескольких гипотез». В трудах SPIE Vol. 1698, Сигнал и обработка малых целей. 1992, стр 288–300. doi: 10.1117/12.139379.

См. также

Функции

Введенный в R2018b
Для просмотра документации необходимо авторизоваться на сайте