Создайте определение метки сигнала
Используйте 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'
категориальный
Числовой
Строка
Таблица
, или 'timetable'
. Используйте свойство Categories задать массив категорий, когда это свойство будет установлено в 'categorical'
.
Типы данных: char |
string
Categories
— Имена категории метокКатегория меток называет в виде массива строк или массива ячеек из символьных векторов. Массив должен иметь уникальные элементы. Это свойство применяется только, когда свойство LabelDataType установлено в 'categorical'
.
Пример: 'LabelDataType','categorical','Categories',["apple","orange"]
Типы данных: char |
string
ROILimitsDataType
— Тип данных пределов ROI'double'
(значение по умолчанию) | 'duration'
Тип данных ROI ограничивает в виде любого 'double'
или 'duration'
. Это свойство применяется только, когда LabelType установлен в 'roi'
.
Типы данных: char |
string
PointLocationsDataType
— Тип данных местоположений точки'double'
(значение по умолчанию) | 'duration'
Тип данных местоположений точки в виде любого 'double'
или 'duration'
. Это свойство применяется только, когда LabelType установлен в 'point'
.
Типы данных: char |
string
ValidationFunction
— Функция валидацииФункция валидации в виде указателя на функцию и используемый при устанавливании значений метки в labeledSignalSet
объект. Это свойство применяется только, когда LabelDataType установлен в 'categorical'
логический
Числовой
Таблица
, или 'timetable'
. Если не заданный, функция проверяет только, что ее входные значения имеют правильный тип данных. Если LabelDataType установлен в 'categorical'
, функция проверяет, что вход является одним из значений, заданных с помощью Категорий. Функция берет входное значение и возвращает true
если значение допустимо и false
если значение недопустимо.
Пример: '
LabelDataType
', 'числовой', 'DefaultValue
', 1, 'ValidationFunction
',@ (x) x <2
Типы данных: function_handle
DefaultValue
— Значение по умолчанию метки[]
(значение по умолчанию) | LabelDataType
значениеЗначение по умолчанию метки в виде значения типа, заданного с помощью LabelDataType. Если LabelDataType установлен в 'categorical'
, затем DefaultValue должен быть одним из значений, заданных с помощью Категорий.
Пример: '
LabelDataType
', 'категориальный', 'Categories
', ["яблоко", "оранжевое"], 'DefaultValue
', "яблоко"
Типы данных: char |
double
| logical
| string
| table
Description
— Пометьте описаниеПометьте описание в виде вектора символов или строкового скаляра.
Пример: 'Description','Patient is asleep'
Типы данных: char |
string
Tag
— Идентификатор тега labelИдентификатор тега label в виде вектора символов или строкового скаляра. Используйте это свойство идентифицировать ту же метку в большей схеме маркировки или общедоступном наборе маркировки.
Пример: 'Tag','Peak1'
Типы данных: char |
string
Sublabels
— Массив подметокМассив подметок в виде объекта определения метки сигнала. Чтобы задать больше чем одну подметку, установите это свойство на вектор из объектов определения метки сигнала. Используйте это свойство создать отношение между родительской меткой и ее дочерними элементами.
Примечание
Подметки не могут иметь подметок.
Пример: '
Sublabels
', [signalLabelDefinition ("отрицательный"), signalLabelDefinition ("положительный")]
labelDefinitionsHierarchy | Получите иерархический список метки и подпометьте имена |
labelDefinitionsSummary | Получите сводную таблицу определений метки сигнала |
Рассмотрите набор аудиозаписей кита. Записанные звуки кита состоят из трелей и стонов. Трели походят на серию нажатий кнопки. Стоны являются низкочастотными криками, похожими на звук, сделанный рогом поставки. Вы хотите посмотреть на каждый сигнал и пометить его, чтобы идентифицировать тип кита, области трели и области стона. Для каждой области трели вы также хотите пометить peaks сигнала выше, чем определенный порог.
Определения метки сигнала
Задайте метку атрибута, чтобы сохранить типы кита. Возможные категории являются голубым китом, горбатым китом и белухой.
dWhaleType = signalLabelDefinition('WhaleType',... 'LabelType','attribute',... 'LabelDataType','categorical',... 'Categories',{'blue','humpback','white'},... 'Description','Whale type');
Задайте метку видимой области (ROI), чтобы получить области стона. Задайте другую метку 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');
Наконец, задайте метку точки, чтобы получить peaks трели. Установите эту метку как подметку dTrills
определение.
dTrillPeaks = signalLabelDefinition('TrillPeaks',... 'LabelType','point',... 'LabelDataType','numeric',... 'Description','Trill peaks'); dTrills.Sublabels = dTrillPeaks;
Помеченный набор сигнала
Создайте labeledSignalSet
с китом сигнализирует и определения метки. Добавьте значения метки, чтобы идентифицировать тип кита, стон и области трели и peaks трелей.
load labelwhalesignals lbldefs = [dWhaleType dMoans dTrills]; lss = labeledSignalSet({whale1 whale2},lbldefs,'MemberNames',{'Whale1','Whale2'}, ... 'SampleRate',Fs,'Description','Characterize whale 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 секунд.
Добавьте области стона в помеченный набор. Задайте пределы ROI в секундах и значениях метки.
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
Визуализируйте метки точки
Пометьте три peaks для каждой области трели. Для меток точки вы задаете местоположения точки и значения метки. В этом примере местоположения точки находятся в секундах.
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' }
Создайте datastore сигнала, который указывает на заданную папку. Определите имя переменной частоты дискретизации к Fs
, который характерен для всех файлов. Сгенерируйте подмножество datastore, который исключает файл mtlb.mat
. Используйте datastore подмножества в качестве источника для 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
Объект (Signal Processing Toolbox) sd
содержит данные сигнала.
arrayDatastore
объект ld
содержит информацию о маркировке. Укажите, что вы хотите включать информацию, соответствующую всем меткам, которые вы создали.
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
Используйте информацию в хранилищах данных, чтобы построить сигналы и отобразить их метки.
Используйте signalMask
Объект (Signal Processing Toolbox) подсветить необходимые области синего цвета.
Постройте желтые графики, чтобы отметить местоположения максимумов.
Добавьте красную подпись по осям в сигналы, которые содержат человеческую речь.
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('') xline(lbls{:}.Maximum{:}.Location, ... 'LineWidth',2,'Color','#EDB120') 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
(Signal Processing Toolbox)У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.