Создать определение метки сигнала
Использовать signalLabelDefinition для создания определений меток сигналов для наборов данных. Метки могут соответствовать атрибутам, областям или точкам, представляющим интерес. Использовать вектор signalLabelDefinition объекты для создания labeledSignalSet.
name - Название меткиИмя метки, указанное как вектор символа или скаляр строки.
Типы данных: char | string
Name - Наименование этикеткиИмя метки, указанное как вектор символа или скаляр строки.
Типы данных: char | string
LabelType - Тип этикетки'attribute' (по умолчанию) | 'roi' | 'point'Тип метки, указанный как одно из следующих значений:
'attribute' - Определение характеристик сигнала.
'roi' - Определение характеристик сигнала по интересующим регионам.
'point' - Определение характеристик сигнала по интересующим точкам.
Типы данных: char | string
LabelDataType - Тип данных метки'logical' (по умолчанию) | 'categorical' | 'numeric' | 'string' | 'table' | 'timetable'Тип данных метки, указанный как 'logical', 'categorical', 'numeric', 'string', 'table', или 'timetable'. Используйте свойство Categories, чтобы указать массив категорий, если для этого свойства установлено значение 'categorical'.
Типы данных: char | string
Categories - Имена категорий метокИмена категорий меток, указанные как строковый массив или массив ячеек символьных векторов. Массив должен иметь уникальные элементы. Это свойство применяется, только если свойство LabelDataType имеет значение 'categorical'.
Пример: 'LabelDataType','categorical','Categories',["apple","orange"]
Типы данных: char | string
ROILimitsDataType - Тип данных пределов окупаемости инвестиций'double' (по умолчанию) | 'duration'Тип данных пределов окупаемости инвестиций, указанный как 'double' или 'duration'. Это свойство применяется только в том случае, если для LabelType установлено значение 'roi'.
Типы данных: char | string
PointLocationsDataType - Тип данных расположения точек'double' (по умолчанию) | 'duration'Тип данных расположения точек, указанный как 'double' или 'duration'. Это свойство применяется только в том случае, если для LabelType установлено значение 'point'.
Типы данных: char | string
ValidationFunction - Функция проверкиФункция проверки, заданная как дескриптор функции и используемая при установке значений меток в labeledSignalSet объект. Это свойство применяется только в том случае, если для LabelDataType установлено значение 'categorical', 'logical', 'numeric', 'table', или 'timetable'. Если не указано, функция проверяет только то, что ее входные значения имеют правильный тип данных. Если для LabelDataType установлено значение 'categorical'функция проверяет, является ли введенное значение одним из значений, указанных с помощью Категории. Функция принимает входное значение и возвращает true если значение является допустимым и false если значение недопустимо.
Пример: 'LabelDataType','numeric','DefaultValue',1,'ValidationFunction',@(x)x<2
Типы данных: function_handle
DefaultValue - Значение метки по умолчанию[] (по умолчанию) | LabelDataType стоимостьЗначение метки по умолчанию, указанное как значение типа, заданного с помощью LabelDataType. Если для LabelDataType установлено значение 'categorical', тогда DefityValue должен быть одним из значений, указанных с помощью Categories.
Пример: 'LabelDataType','categorical','Categories',["apple","orange"],'DefaultValue',"apple"
Типы данных: char | double | logical | string | table
Description - Описание этикеткиОписание метки, указанное как вектор символа или скаляр строки.
Пример: 'Description','Patient is asleep'
Типы данных: char | string
Tag - Идентификатор тега меткиИдентификатор тега метки, заданный как вектор символа или скаляр строки. Это свойство используется для идентификации одной и той же метки в схеме маркировки большего размера или в общедоступном наборе меток.
Пример: 'Tag','Peak1'
Типы данных: char | string
Sublabels - Массив суббнаковМассив подметок, указанный как объект определения метки сигнала. Чтобы задать несколько суббнаков, задайте для этого свойства вектор объектов определения метки сигнала. Это свойство используется для создания связи между родительской меткой и ее потомками.
Примечание
Поднакладки не могут иметь поднакладок.
Пример: 'Sublabels',[signalLabelDefinition("negative"),signalLabelDefinition("positive")]
labelDefinitionsHierarchy | Получение иерархического списка имен меток и субкниг |
labelDefinitionsSummary | Получение сводной таблицы определений меток сигналов |
Рассмотрим набор звукозаписей китов. Записанные китовые звуки состоят из трелей и стонов. Трели звучат как серия кликов. Стоны - низкочастотные крики, похожие на звук, издаваемый корабельным рогом. Вы хотите посмотреть на каждый сигнал и маркировать его, чтобы определить тип кита, области треля и области стона. Для каждой области треля также требуется пометить пики сигнала выше определенного порога.
Определения меток сигналов
Определите метку атрибута для хранения типов китов. Возможные категории - синий кит, горбатый кит и белый кит.
dWhaleType = signalLabelDefinition('WhaleType',... 'LabelType','attribute',... 'LabelDataType','categorical',... 'Categories', ["blue" "humpback" "white"],... 'Description','Whale type');
Определение метки области интересов (ROI) для захвата областей стоуна. Определите другую метку окупаемости инвестиций для захвата областей треля.
dMoans = signalLabelDefinition('MoanRegions',... 'LabelType','roi',... 'LabelDataType','logical',... 'Description','Regions where moans occur'); dTrills = signalLabelDefinition('TrillRegions',... 'LabelType','roi',... 'LabelDataType','logical',... 'Description','Regions where trills occur');
Наконец, определите метку точки для захвата пиков треля. Установка этой метки в качестве подмаркировки dTrills определение.
dTrillPeaks = signalLabelDefinition('TrillPeaks',... 'LabelType','point',... 'LabelDataType','numeric',... 'Description','Trill peaks'); dTrills.Sublabels = dTrillPeaks;
Набор маркированных сигналов
Создать labeledSignalSet с китовыми сигналами и определениями меток. Добавьте значения меток для определения типа кита, областей стона и треля, а также пиков трелей.
load labelwhalesignals lbldefs = [dWhaleType dMoans dTrills]; lss = labeledSignalSet({whale1 whale2},lbldefs,'MemberNames',{'Whale1' 'Whale2'}, ... 'SampleRate',Fs,'Description','Characterize wave song regions');
Визуализация иерархии меток и свойств меток с помощью labelDefinitionsHierarchy и labelDefinitionsSummary.
labelDefinitionsHierarchy(lss)
ans =
'WhaleType
Sublabels: []
MoanRegions
Sublabels: []
TrillRegions
Sublabels: TrillPeaks
'
labelDefinitionsSummary(lss)
ans=3×9 table
LabelName LabelType LabelDataType Categories ValidationFunction DefaultValue Sublabels Tag Description
______________ ___________ _____________ ____________ __________________ ____________ ___________________________ ___ ____________________________
"WhaleType" "attribute" "categorical" {3x1 string} {["N/A" ]} {0x0 double} {0x0 double } "" "Whale type"
"MoanRegions" "roi" "logical" {["N/A" ]} {0x0 double} {0x0 double} {0x0 double } "" "Regions where moans occur"
"TrillRegions" "roi" "logical" {["N/A" ]} {0x0 double} {0x0 double} {1x1 signalLabelDefinition} "" "Regions where trills occur"
Сигналы в загруженных данных соответствуют песням двух синих китов. Установите 'WhaleType' значения для обоих сигналов.
setLabelValue(lss,1,'WhaleType','blue'); setLabelValue(lss,2,'WhaleType','blue');
Визуализация 'Labels' собственность. Таблица содержит только что добавленные 'WhaleType' значения для обоих сигналов.
lss.Labels
ans=2×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
Whale1 blue {0x2 table} {0x3 table}
Whale2 blue {0x2 table} {0x3 table}
Визуализация меток областей
Визуализируйте песни китов, чтобы определить области треля и стона.
subplot(2,1,1) plot((0:length(whale1)-1)/Fs,whale1) ylabel('Whale 1') subplot(2,1,2) plot((0:length(whale2)-1)/Fs,whale2) ylabel('Whale 2')

Стоновые районы являются устойчивыми низкочастотными путями.
whale1 имеет стоны, центрированные примерно через 7 секунд, 12 секунд и 17 секунд.
whale2 имеет стоны, центрированные примерно через 3 секунды, 7 секунд и 16 секунд.
Добавьте стоновые области в маркированный набор. Укажите пределы окупаемости инвестиций в секундах и значения меток.
moanRegionsWhale1 = [6.1 7.7; 11.4 13.1; 16.5 18.1]; mrsz1 = [size(moanRegionsWhale1,1) 1]; setLabelValue(lss,1,'MoanRegions',moanRegionsWhale1,true(mrsz1)); moanRegionsWhale2 = [2.5 3.5; 5.8 8; 15.4 16.7]; mrsz2 = [size(moanRegionsWhale2,1) 1]; setLabelValue(lss,2,'MoanRegions',moanRegionsWhale2,true(mrsz2));
Области треля имеют отчетливые всплески звука, пунктуированные молчанием.
whale1 имеет трель с центром примерно в 2 секунды.
whale2 имеет трель с центром примерно в 12 секунд.
Добавьте области гибки в набор меток.
trillRegionWhale1 = [1.4 3.1]; trsz1 = [size(trillRegionWhale1,1) 1]; setLabelValue(lss,1,'TrillRegions',trillRegionWhale1,true(trsz1)); trillRegionWhale2 = [11.1 13]; trsz2 = [size(trillRegionWhale1,1) 1]; setLabelValue(lss,2,'TrillRegions',trillRegionWhale2,true(trsz2));
Создать signalMask (Signal Processing Toolbox) объект для каждой песни китов и использовать его для визуализации и маркировки различных областей. Для лучшей визуализации измените значения меток с логических на категориальные.
mr1 = getLabelValues(lss,1,'MoanRegions'); mr1.Value = categorical(repmat("moan",mrsz1)); tr1 = getLabelValues(lss,1,'TrillRegions'); tr1.Value = categorical(repmat("trill",trsz1)); msk1 = signalMask([mr1;tr1],'SampleRate',Fs); subplot(2,1,1) plotsigroi(msk1,whale1) ylabel('Whale 1') hold on mr2 = getLabelValues(lss,2,'MoanRegions'); mr2.Value = categorical(repmat("moan",mrsz2)); tr2 = getLabelValues(lss,2,'TrillRegions'); tr2.Value = categorical(repmat("trill",trsz2)); msk2 = signalMask([mr2;tr2],'SampleRate',Fs); subplot(2,1,2) plotsigroi(msk2,whale2) ylabel('Whale 2') hold on

Визуализация меток точек
Отметьте три пика для каждой области треля. Для меток точек задаются местоположения точек и значения меток. В этом примере расположение точек в секундах.
peakLocsWhale1 = [1.553 1.626 1.7]; peakValsWhale1 = [0.211 0.254 0.211]; setLabelValue(lss,1,["TrillRegions" "TrillPeaks"],... peakLocsWhale1,peakValsWhale1,'LabelRowIndex',1); subplot(2,1,1) plot(peakLocsWhale1,peakValsWhale1,'v') hold off peakLocsWhale2 = [11.214 11.288 11.437]; peakValsWhale2 = [0.119 0.14 0.15]; setLabelValue(lss,2,["TrillRegions" "TrillPeaks"],... peakLocsWhale2,peakValsWhale2,'LabelRowIndex',1); subplot(2,1,2) plot(peakLocsWhale2,peakValsWhale2,'v') hold off

Просмотр значений меток
Изучение значений меток с помощью getLabelValues.
getLabelValues(lss)
ans=2×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
Whale1 blue {3x2 table} {1x3 table}
Whale2 blue {3x2 table} {1x3 table}
Извлеките области стояния для первого элемента маркированного набора.
getLabelValues(lss,1,'MoanRegions')ans=3×2 table
ROILimits Value
____________ _____
6.1 7.7 {[1]}
11.4 13.1 {[1]}
16.5 18.1 {[1]}
Используйте второй выходной аргумент для вывода списка суббнаков метки.
[value,valueWithSublabel] = getLabelValues(lss,1,'TrillRegions')value=1×2 table
ROILimits Value
__________ _____
1.4 3.1 {[1]}
valueWithSublabel=1×3 table
ROILimits Value Sublabels
TrillPeaks
__________ _____ ___________
1.4 3.1 {[1]} {3x2 table}
Чтобы получить значения в подметке, выразите имя метки как двухэлементный массив.
getLabelValues(lss,1,["TrillRegions" "TrillPeaks"])
ans=3×2 table
Location Value
________ __________
1.553 {[0.2110]}
1.626 {[0.2540]}
1.7 {[0.2110]}
Найдите значение третьего пика треля, соответствующего второму элементу набора.
getLabelValues(lss,2,["TrillRegions" "TrillPeaks"], ... 'LabelRowIndex',1,'SublabelRowIndex',3)
ans=1×2 table
Location Value
________ __________
11.437 {[0.1500]}
Укажите путь к набору аудиосигналов, входящих в состав MAT-файлов с MATLAB ®. Каждый файл содержит переменную сигнала и частоту дискретизации. Перечислите имена файлов .
folder = fullfile(matlabroot,"toolbox","matlab","audiovideo"); lst = dir(append(folder,"/*.mat")); nms = {lst(:).name}'
nms = 7x1 cell
{'chirp.mat' }
{'gong.mat' }
{'handel.mat' }
{'laughter.mat'}
{'mtlb.mat' }
{'splat.mat' }
{'train.mat' }
Создайте хранилище данных сигнала, указывающее на указанную папку. Задайте имя переменной частоты выборки как Fs, что является общим для всех файлов. Создание подмножества хранилища данных, исключающего файл mtlb.mat. Использовать хранилище данных подмножества в качестве источника для labeledSignalSet(Панель инструментов обработки сигналов).
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sds = subset(sds,~strcmp(nms,"mtlb.mat")); lss = labeledSignalSet(sds);
Создайте три определения меток для маркировки сигналов:
Определите логическую метку атрибута, которая является истинной для сигналов, содержащих человеческие голоса.
Определите числовую метку точки, которая отмечает местоположение и амплитуду максимума каждого сигнала.
Определите категориальную метку области интересов (ROI) для выбора неперекрывающихся случайных областей одинаковой длины каждого сигнала.
Добавьте определения меток сигналов в набор маркированных сигналов.
vc = signalLabelDefinition("Voice",'LabelType','attribute', ... 'LabelDataType','logical','DefaultValue',false); mx = signalLabelDefinition("Maximum",'LabelType','point', ... 'LabelDataType','numeric'); rs = signalLabelDefinition("RanROI",'LabelType','ROI', ... 'LabelDataType','categorical','Categories',["ROI" "other"]); addLabelDefinitions(lss,[vc mx rs])
Маркировать сигналы:
Этикетка 'handel.mat' и 'laughter.mat' как имеющие человеческий голос.
Используйте islocalmax для поиска максимума каждого сигнала. Пометьте его местоположение и значение.
Используйте randROI функция для генерирования такого количества областей длины N/10 выборок, которое может поместиться в сигнал длины N, при условии минимального разделения N/6 выборок между областями. Пометить их местоположения и назначить их ROI категория.
При маркировке точек и областей преобразуйте значения образца в значения времени. Вычесть 1 для учета индексации массива MATLAB ® и разделить на частоту выборки.
kj = 1; while hasdata(sds) [sig,info] = read(sds); fs = info.SampleRate; [~,fn] = fileparts(info.FileName); if fn=="handel" || fn=="laughter" setLabelValue(lss,kj,"Voice",true) end xm = find(islocalmax(sig,'MaxNumExtrema',1)); setLabelValue(lss,kj,"Maximum",(xm-1)/fs,sig(xm)) N = length(sig); rois = randROI(N,round(N/10),round(N/6)); setLabelValue(lss,kj,"RanROI",(rois-1)/fs,repelem("ROI",size(rois,1))) kj = kj+1; end
Убедитесь, что только два сигнала содержат голоса.
countLabelValues(lss,"Voice")ans=2×3 table
Voice Count Percent
_____ _____ _______
false 4 66.667
true 2 33.333
Убедитесь, что два сигнала имеют максимальную амплитуду 1.
countLabelValues(lss,"Maximum")ans=5×4 table
Maximum Count Percent MemberCount
______________________ _____ _______ ___________
0.80000000000000004441 1 16.667 1
0.89113331915798421612 1 16.667 1
0.94730769230769229505 1 16.667 1
1 2 33.333 2
1.0575668990330560071 1 16.667 1
Убедитесь, что каждый сигнал имеет четыре неперекрывающиеся случайные области, представляющие интерес.
countLabelValues(lss,"RanROI")ans=2×4 table
RanROI Count Percent MemberCount
______ _____ _______ ___________
ROI 24 100 6
other 0 0 0
Создайте два хранилища данных с данными в наборе маркированных сигналов:
signalDatastore(Панель инструментов обработки сигналов) sd содержит данные сигнала.
arrayDatastore объект ld содержит информацию о маркировке. Укажите, что требуется включить информацию, соответствующую всем созданным меткам.
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
Используйте информацию в хранилищах данных для печати сигналов и отображения их меток.
Использовать signalMask(Панель инструментов обработки сигналов), чтобы выделить области, представляющие интерес синим цветом.
Постройте график желтых линий для обозначения расположения максимумов.
Добавьте красную метку оси к сигналам, содержащим человеческие голоса.
tiledlayout flow while hasdata(sd) [sg,nf] = read(sd); lbls = read(ld); nexttile msk = signalMask(lbls{:}.RanROI{:},'SampleRate',nf.SampleRate); plotsigroi(msk,sg) colorbar off xlabel('') [X,Y] = meshgrid(lbls{:}.Maximum{:}.Location,ylim); hold on plot(X,Y,'LineWidth',2,'Color','#EDB120') hold off if lbls{:}.Voice{:} ylabel('VOICED','Color','#D95319') end end

function roilims = randROI(N,wid,sep) num = floor((N+sep)/(wid+sep)); hq = histcounts(randi(num+1,1,N-num*wid-(num-1)*sep),(1:num+2)-1/2); roilims = (1 + (0:num-1)*(wid+sep) + cumsum(hq(1:num)))' + [0 wid-1]; end
labeledSignalSet | signalMask (панель инструментов обработки сигналов)Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.