Создайте определение метки сигнала
Использование signalLabelDefinition
для создания определений меток сигналов для наборов данных. Метки могут соответствовать атрибутам, областям или точкам интереса. Используйте вектор signalLabelDefinition
объекты для создания labeledSignalSet
.
устанавливает свойства с помощью пар "имя-значение". Можно задать несколько пары "имя-значение". Заключайте каждое имя свойства в кавычки.sld
= signalLabelDefinition(name
,Name,Value
)
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'
функция проверяет, что вход является одним из значений, заданных с помощью Categories. Функция принимает вход значение и возвраты true
если значение верно и false
если значение недопустимо.
Пример: '
LabelDataType
',' summeric ',' DefaultValue
', 1', ValidationFunction
', @ (x) x < 2
Типы данных: function_handle
DefaultValue
- Значение по умолчанию метки[]
(по умолчанию) | LabelDataType
значениеЗначение по умолчанию метки, заданное как значение типа, заданного с помощью LabelDataType. Если для LabelDataType задано значение 'categorical'
, тогда DefaultValue должен быть одним из значений, заданных с помощью Categories.
Пример: '
LabelDataType
',' категориальный ',' Categories
', [«яблоко», «оранжевый»],' DefaultValue
Apple
Типы данных: char
| double
| logical
| string
| table
Description
- Описание меткиОписание метки, заданное как вектор символов или строковый скаляр.
Пример: 'Description','Patient is asleep'
Типы данных: char
| string
Tag
- Идентификатор тега меткиИдентификатор тега метки, заданный как вектор символов или строковый скаляр. Используйте это свойство для идентификации той же метки в большей схеме маркировки или в общем наборе маркировки.
Пример: '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) метку, чтобы захватить стоновые области. Задайте другую метку информация только для чтения для захвата областей trill.
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 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
объект для каждой песни кита и использовать его для визуализации и маркировки различных областей. Для лучшей визуализации измените значения меток с логических на категориальные.
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' }
Создайте сигнальный 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
Создайте два хранилища данных с данными в маркированном наборе сигналов:
The signalDatastore
sd объекта
содержит данные сигнала.
The 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
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.