Обрезать ветви дорожки с низкой вероятностью
[
возвращает логический флаг, toPrune
,globalProbability
] = pruneTrackBranches(branchHistory
,scores
,hypotheses
)toPrune
, что указывает, какие ветви должны быть сокращены на основе истории ветви, счетов ветвей и гипотез. pruneTrackBranches
также возвращает глобальные вероятности ветви, globalProbability
.
[
использует пары "имя-значение", чтобы изменить способ обрезки ветвей.toPrune
,globalProbability
] = pruneTrackBranches(branchHistory
,scores
,hypotheses
,Name,Value
)
[
возвращает дополнительную информацию, toPrune
,globalProbability
,info
] = pruneTrackBranches(___)info
, о обрезанных ветвях.
Создайте матрицу истории ветвей для одного датчика с 20 ветвями. В данном примере глубина истории равняется 4, поэтому матрица имеет 7 столбцов.
history = [ 8 14 14 0 0 2 0 1 23 23 0 0 2 1 2 24 24 0 0 1 2 9 25 25 0 1 0 0 10 26 26 0 2 0 0 1 28 28 0 1 0 1 4 33 33 0 1 2 1 1 34 34 0 1 2 1 2 35 35 0 2 1 2 11 0 36 1 0 0 0 12 0 37 2 0 0 0 8 14 38 2 0 2 0 1 23 39 2 0 2 1 2 24 40 1 0 1 2 9 25 41 2 1 0 0 10 26 42 1 2 0 0 1 28 43 2 1 0 1 4 33 44 2 1 2 1 1 34 45 2 1 2 1 2 35 46 1 2 1 2];
Получите список кластеров и список несовместимых ветвей. The clusters
матрица имеет два столбца, поэтому существует два кластера.
[clusters,incompBranches] = clusterTrackBranches(history);
Задайте вектор-столбец 20 на 1, содержащие счета ветви.
scores = [4.5 44.9 47.4 6.8 6.8 43.5 50.5 61.9 64.7 9.1 9.1 19 61.7 ...
63.5 21.2 20.5 60.7 67.3 79.2 81.5]';
Получите матрицу гипотез.
hypotheses = compatibleTrackBranches(clusters,incompBranches,scores,10);
Обрезайте ветви дорожки, используя аргументы пары "имя-значение", чтобы задать один датчик и 'Hypothesis'
способ обрезки N-образного сканирования. Верните флаг обрезки, глобальную вероятность и информацию о обрезке каждой ветви. Чтобы упростить сравнение информации, преобразуйте информацию из struct в таблицу.
I-е значение toPrune
является true
если любой из 'PrunedByProbability
PrunedByNScan
', или' PrunedByNumBranches
'являются true
в i-й строке информационной таблицы.
[toPrune,probs,info] = pruneTrackBranches(history,scores,hypotheses, ... 'NumSensors',1,'NScanPruning','Hypothesis'); infoTable = struct2table(info)
infoTable=20×6 table
BranchID PriorProbability GlobalProbability PrunedByProbability PrunedByNScan PrunedByNumBranches
________ ________________ _________________ ___________________ _____________ ___________________
14 0.98901 0.098901 false false false
23 1 0.1 false false true
24 1 0.1 false false true
25 0.99889 0.099889 false false false
26 0.99889 0.099889 false false false
28 1 0 true true false
33 1 0 true false false
34 1 0.2 false false false
35 1 0.2 false false false
36 0.99989 0.19998 false false false
37 0.99989 0.19998 false false false
38 1 0 true false false
39 1 0.1 false false false
40 1 0.1 false false false
41 1 0.1 false false false
42 1 0.1 false false false
⋮
branchHistory
- История ветвиИстория ветви, заданная как матрица целых чисел. Каждая строка branchHistory
представляет уникальную ветвь дорожки. branchHistory
должно иметь 3 + (D × S) столбцы, где D - количество поддерживаемых сканов (историческая глубина) и S - максимальное количество поддерживаемых датчиков. Для получения дополнительной информации смотрите history
выход trackBranchHistory
системный объект.
scores
- счета ветвиСчета ветви, заданные как M -by 1 числовой вектор или M -by 2 числовая матрица.
Примечание
Если вы задаете scores
в качестве M -by 2 числовой матрицы, затем в первом столбце указывается текущий счет каждой ветви, а во втором - максимальный счет. pruneTrackBranches
игнорирует второй столбец.
Типы данных: single
| double
hypotheses
- ГипотезыГипотезы, возвращенные как M -by H логическая матрица, где M - количество ветвей и H - количество глобальных гипотез. Вы можете использоватьclusterTrackBranches
чтобы вычислить кластеры из матрицы истории ветвей, используйте compatibleTrackBranches
для вычисления гипотез из кластеров.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[toPrune,probs] = pruneTrackBranches(branchHistory,scores,hypotheses,'MinBranchProbability',2e-3);
'MinBranchProbability'
- Минимальная вероятность ветви1e-3
(по умолчанию) | число в области значений [0,1)Минимальный порог вероятности ветви, заданный как разделенная разделенными запятой парами, состоящая из 'MinBranchProbability'
и число в области значений [0,1). Типичные значения находятся между 1e-3 и 5e-3. The pruneTrackBranches
функция обрезает ветви с глобальной вероятностью меньше порога.
'MaxNumTrackBranches'
- Максимальное количество ветвей3
(по умолчанию) | положительное целое числоМаксимальное количество ветвей для каждого трека, заданное как разделенная разделенными запятой парами, состоящая из 'MaxNumTrackBranches'
и положительное целое число. Типичные значения находятся между 2 и 6. Если у дорожки больше этого количества ветвей, то pruneTrackBrances
обрезает ветви с наименьшим начальным счетом.
'NScanPruning'
- Метод обрезки N-сканирования'None'
(по умолчанию) | 'Hypothesis'
Метод обрезки N-сканирования, заданный как разделенная разделенными запятой парами, состоящая из 'NScanPruning'
и 'None'
или 'Hypothesis'
. Если вы задаете 'Hypothesis'
, затем pruneTrackBrances
обрезает ветви, которые несовместимы с текущей наиболее вероятной ветвью в самых последних < reservedrangesplaceholder1 > сканах. По умолчанию pruneTrackBrances
не использует обрезку N-сканирования.
'NumSensors'
- Количество датчиков20
(по умолчанию) | положительное целое числоКоличество датчиков в истории, заданное как разделенная разделенными запятой парами, состоящая из 'NumSensors'
и положительное целое число.
toPrune
- Ветви для обрезкиВетви для обрезки, возвращенные как M -by 1 логический вектор. Значение true
указывает, что ветвь должна быть обрезана.
Типы данных: logical
globalProbability
- Глобальные вероятности ветвиГлобальные вероятности ветви, возвращенные как M -by 1 числовой вектор.
info
- Информация о обрезкеОбрезка информации о каждой ветви, возвращаемая как struct со следующими полями.
BranchID
- M -by 1 числовой вектор. Каждое значение задает идентификатор ветви дорожки. Идентификаторы получены из третьего столбца branchHistory
.
PriorProbability
- M -by 1 числовой вектор. Каждое значение задает предыдущую вероятность ветви из счета ветви.
GlobalProbability
- M -by 1 числовой вектор. Каждое значение задает глобальную вероятность ветви, которая рассматривает гипотезы, которые содержат ветвь и их счета.
PrunedByProbability
- M -by 1 логический вектор. Значение true
указывает, что ветвь обрезается по MinBranchProbability
.
PrunedByNScan
- M -by 1 логический вектор. Значение true
указывает, что ветвь обрезается по NScanPruning
.
PrunedByNumBranches
- M -by 1 логический вектор. Значение true
указывает, что ветвь обрезается по MaxNumTrackBranches
.
[1] Werthmann, John R. «Пошаговое описание вычислительно эффективной версии отслеживания нескольких гипотез». В трудах SPIE Vol. 1698, Сигнал и обработка малых целей. 1992, стр 288–300. doi: 10.1117/12.139379.
[2] Блэкман, Сэмюэль и Роберт Пополи. «Проект и анализ современных систем слежения». Дом Артека, 1999.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.