Создайте маркированный набор сигналов
Использование labeledSignalSet
для хранения маркированных сигналов вместе с определениями меток. Создайте определения меток сигналов с помощью signalLabelDefinition
.
создает пустой набор маркированных сигналов. Использовать lss
= labeledSignalSetaddMembers
для добавления сигналов к аппарату. Использовать addLabelDefinitions
для добавления определений меток к набору.
создает маркированный набор сигналов для источника входных данных lss
= labeledSignalSet(src
)src
. Использовать addLabelDefinitions
для добавления определений меток к набору.
создает маркированный набор сигналов для источника входных данных lss
= labeledSignalSet(src
,lbldefs
)src
использование определений меток сигналов lbldefs
. Использование signalLabelDefinition
для создания определений меток сигналов.
создает маркированный набор сигналов для источника входных данных lss
= labeledSignalSet(src
,lbldefs
,'MemberNames',mnames
)src
и задает имена для представителей набора. Использовать setMemberNames
для изменения имен представителей. lbldefs
опционально.
устанавливает свойства с помощью пар "имя-значение". Можно задать несколько пары "имя-значение". Заключайте каждое имя свойства в кавычки. lss
= labeledSignalSet(src
,lbldefs
,Name,Value
)lbldefs
опционально.
src
- Входной источник данныхsignalDatastore
| объекта audioDatastore
объектВходные данные, заданный как матрица, массив ячеек, timetable, a signalDatastore
объект, или audioDatastore
(Audio Toolbox) объект. src
неявно задает количество представителей набора, количество сигналов в каждом представителе и данные в каждом сигнале.
Пример: {
имеет два представителей. Первый представитель содержит три сигнала с 10 выборками. Второй представитель содержит девять 17-выборочных сигналов.randn
(10,3),randn
(17,9)}
Пример: {{
имеет два представителей. Первый представитель содержит один сигнал 10 дискретизации. Второй представитель содержит сигнал 17 выборки и сигнал 27 выборки.randn
(10,1)},{randn
(17,1),randn
(27,1)}}
Пример: {{
имеет два представителей. Первый представитель содержит три сигнала, дискретизированных с частотой дискретизации 1 Гц в течение 10 секунд, и два сигнала, дискретизированных с частотой дискретизации 1 Гц в течение 7 секунд. Второй представитель содержит один сигнал, дискретизированный с частотой дискретизации 1 Гц в течение 3 секунд.timetable
(seconds
(1:10)',randn
(10,3)),timetable
(seconds
(1:7)',randn
(7,2))},{timetable
(seconds
(1:3)',randn
(3,1))}}
signalDatastore
Объект, указывающий на файлыУкажите путь к набору выборочных звуковых сигналов, включенных в 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
, который отличается от других файлов тем, что сигнальная переменная не вызывается y
.
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sdss = subset(sds,~strcmp(nms,"mtlb.mat"));
Используйте datastore подмножества в качестве источника для labeledSignalSet
объект.
lss = labeledSignalSet(sdss)
lss = labeledSignalSet with properties: Source: [1x1 signalDatastore] NumMembers: 6 TimeInformation: "inherent" Labels: [6x0 table] Description: "" Use labelDefinitionsHierarchy to see a list of labels and sublabels. Use setLabelValue to add data to the set.
lbldefs
- Определения метокsignalLabelDefinition
объектыОпределения меток, заданные как вектор signalLabelDefinition
объекты.
mnames
- Имена представителейПредставитель имена, заданные как вектор символов, строковый скаляр, массив ячеек с векторами символов или строковыми массивами.
Пример: labeledSignalSet({randn(100,1) randn(10,1)},'MemberNames',{'llama' 'alpaca'})
задает набор случайных сигналов с двумя представителями, 'llama'
и 'alpaca'
.
Description
- Описание маркированного набора сигналовОписание маркированного набора сигналов, заданное как вектор символов или строковый скаляр.
Пример: 'Description','Sleep test patients by sex and age'
Типы данных: char
| string
SampleRate
- Выборочные значения скоростиЭто свойство доступно только для чтения.
Значения частоты дискретизации, заданные как положительная скалярная величина или вектор. Это свойство допустимо только, когда источник данных не содержит неотъемлемой информации о времени.
Задайте SampleRate
для положительного числового скаляра, чтобы задать ту же скорость дискретизации для всех сигналов в маркированном наборе.
Задайте SampleRate
вектор, чтобы указать, что каждый представитель маркированного набора имеет сигналы, дискретизированные с той же скоростью, но скорости дискретизации отличаются от представителя к представителю. Вектор должен иметь количество элементов, равное количеству представителей множества. Если у представитель набора есть сигналы с различными скоростями дискретизации, задайте скорости дискретизации с помощью расписаний.
Пример: 'SampleRate',[1e2 1e3]
определяет, что сигналы в первом представителе набора дискретизируются со скоростью 100 Гц, а сигналы во втором представителе дискретизируются со скоростью 1 кГц.
SampleTime
- Шаг расчетаduration
скалярные | duration
векторЭто свойство доступно только для чтения.
Шаги расчета значения, заданные как положительная скалярная величина, вектор, a duration
скаляр, или duration
вектор. Это свойство допустимо только, когда источник данных не содержит неотъемлемой информации о времени.
Задайте SampleTime
в число или duration
скаляр для задания того же шага расчета для всех сигналов в маркированном наборе.
Задайте SampleTime
в число или duration
вектор, чтобы указать, что каждый представитель маркированного набора имеет сигналы с одинаковым временным интервалом между выборками, но интервалы отличаются от представителя к представителю. Вектор должен иметь количество элементов, равное количеству представителей множества. Если у представитель набора есть сигналы с различными шагами расчета, задайте шаги расчета с помощью расписаний.
Пример: 'SampleTime',seconds([1e-2 1e-3])
задает, что сигналы в первом представителе набора имеют 0,01 секунды между выборками, и сигналы во втором представителе имеют 1 миллисекунду между выборками.
TimeValues
- Значения времениduration
вектор | матрица | массив ячеекЭто свойство доступно только для чтения.
Значения времени, заданные как вектор, a duration
вектор, матрица или массив ячеек. Это свойство допустимо только, когда источник данных не содержит неотъемлемой информации о времени. Значения времени должны быть уникальными и увеличиваться.
Задайте TimeValues
в число или duration
вектор для задания одинаковых значений времени для всех сигналов в маркированном наборе. Вектор должен иметь ту же длину, что и все сигналы в наборе.
Задайте TimeValues
в число или duration
матрица или массив ячеек, чтобы задать, что каждый представитель маркированного набора имеет сигналы с одинаковыми значениями времени, но значения времени различаются от представителя к представителю.
Если TimeValues
является матрицей, тогда она должна иметь количество столбцов, равное количеству представителей множества. Все сигналы в наборе должны иметь длину, равную количеству строк матрицы.
Если TimeValues
- массив ячеек, тогда он должен содержать количество векторов, равное количеству представителей множества. Все сигналы в представителя должны иметь длину, равную количеству элементов соответствующего вектора в массиве ячеек.
Если у представитель набора есть сигналы с различными значениями времени, задайте значения времени с помощью расписаний.
Пример: 'TimeValues',[1:1000;0:1/500:2-1/500]'
указывает, что сигналы в первом представителе набора дискретизируются 1 Гц в течение 1000 секунд. Сигналы во втором представителе дискретизируются на частоте 500 Гц в течение 2 секунд.
Пример: 'TimeValues',seconds([1:1000;0:1/500:2-1/500]')
указывает, что сигналы в первом представителе набора дискретизируются 1 Гц в течение 1000 секунд. Сигналы во втором представителе дискретизируются на частоте 500 Гц в течение 2 секунд.
Пример: 'TimeValues',{1:1000,0:1/500:2-1/500}
указывает, что сигналы в первом представителе набора дискретизируются 1 Гц в течение 1000 секунд. Сигналы во втором представителе дискретизируются на частоте 500 Гц в течение 2 секунд.
Пример: 'TimeValues',{seconds(1:1000),seconds(0:1/500:2-1/500)}
указывает, что сигналы в первом представителе набора дискретизируются 1 Гц в течение 1000 секунд. Сигналы во втором представителе дискретизируются на частоте 500 Гц в течение 2 секунд.
NumMembers
- Количество представителей в набореЭто свойство доступно только для чтения.
Количество представителей в наборе, заданное как положительное целое число.
Labels
- Таблица метокЭто свойство доступно только для чтения.
Таблица меток, заданная как MATLAB® таблица. Каждая переменная Labels
соответствует метке, определенной для набора. Каждая строка Labels
соответствует представителю источника данных. Имена строк Labels
являются именами представителей.
Типы данных: table
TimeInformation
- Информация о времени источника'none'
| 'sampleRate'
| 'sampleTime'
| 'timeValues'
| 'inherent'
Информация о времени источника, заданная как одно из следующего:
'none'
- Сигналы в источнике не имеют информации о времени.
'sampleRate'
- Сигналы в источнике дискретизируются с заданной скоростью.
'sampleTime'
- Сигналы в источнике имеют заданный временной интервал между выборками.
'timeValues
- Сигналы в источнике имеют значение времени, соответствующее каждой выборке.
'inherent'
- Сигналы в источнике содержат неотъемлемую информацию о времени. Расписания MATLAB являются примером таких сигналов.
Типы данных: char
| string
Source
- Источник данных маркированного набора сигналовЭто свойство доступно только для чтения.
Источник данных маркированного набора сигналов, заданный как матрица, расписание, массив ячеек или audio datastore.
Если Source
является числовой матрицей, тогда маркированный набор сигналов имеет один представителя, который содержит количество сигналов, равное количеству матричных столбцов.
Пример:
labeledSignalSet(randn(10,3))
имеет один представителя, который содержит три сигнала с 10 выборками.
Если Source
является массивом ячеек матриц, тогда маркированный набор сигналов имеет количество представителей, равное количеству матриц в массиве ячеек. Каждый представитель содержит количество сигналов, равное количеству столбцов соответствующей матрицы.
Пример:
labeledSignalSet({randn(10,3),randn(17,9)})
имеет два представителей. Первый представитель содержит три сигнала с 10 выборками. Второй представитель содержит девять 17-выборочных сигналов.
Если Source
является массивом ячеек, и каждый элемент массива ячеек является массивом ячеек из числовых векторов, тогда маркированный набор сигналов имеет количество представителей, равное количеству элементов массива ячеек. Каждый сигнал в представителя может иметь любую длину.
Пример:
labeledSignalSet({{randn(10,1)},{randn(17,1),randn(27,1)}})
имеет два представителей. Первый представитель содержит один сигнал с 10 дискретизацией. Второй представитель содержит сигнал 17 выборки и сигнал 27 выборки.
Если Source
является расписанием с переменными, содержащими числовые значения, тогда маркированный набор сигналов имеет один представителя, который содержит количество сигналов, равное количеству переменных. Временные значения расписания должны иметь тип duration
, уникальный, и увеличение.
Пример:
labeledSignalSet(timetable(seconds(1:10)',randn(10,3)))
имеет один представителя, который содержит три сигнала, дискретизированных с частотой дискретизации 1 Гц в течение 10 секунд.
Если Source
является массивом ячеек из расписаний, и каждое расписание имеет произвольное количество переменных с числовыми значениями, тогда маркированный набор сигналов имеет количество представителей, равное количеству расписаний. Каждый представитель содержит количество сигналов, равное количеству переменных в соответствующем расписании.
Пример:
labeledSignalSet({timetable(seconds(1:10)',randn(10,3)),timetable(seconds(1:5)',randn(5,13))})
имеет два представителей. Первый представитель содержит три сигнала, дискретизированных с частотой дискретизации 1 Гц в течение 10 секунд. Второй представитель содержит 13 сигналов, дискретизированных с частотой дискретизации 1 Гц в течение 5 секунд.
Если Source
является массивом ячеек, и каждый элемент массива ячеек является массивом ячеек с расписаниями, тогда маркированный набор сигналов имеет количество представителей, равное количеству элементов массива ячеек. Каждый представитель может иметь любое количество расписаний, и каждое расписание в представитель может иметь любое количество переменных.
Пример:
labeledSignalSet({{timetable(seconds(1:10)',randn(10,3)),timetable(seconds(1:7)',randn(7,2))},{timetable(seconds(1:3)',randn(3,1))}})
имеет два представителей. Первый представитель содержит три сигнала, дискретизированных с частотой дискретизации 1 Гц в течение 10 секунд, и два сигнала, дискретизированных с частотой дискретизации 1 Гц в течение 7 секунд. Второй представитель содержит один сигнал, дискретизированный с частотой дискретизации 1 Гц в течение 3 секунд.
Если источник входных данных, src
, является audio datastore, тогда маркированный набор сигналов имеет количество представителей, равное количеству файлов, на которые указывает datastore. The Source
свойство содержит массив ячеек из векторов символов с именами файлов. Каждый представитель содержит все сигналы, возвращенные чтением соответствующего файла datastore.
addLabelDefinitions | Добавьте определения меток к маркированному набору сигналов |
addMembers | Добавьте представители в маркированный набор сигналов |
countLabelValues | Счетчик значений меток |
createDatastores | Создайте хранилища данных, указывающие на сигнал и данные о метках |
editLabelDefinition | Редактировать свойства определения метки |
getLabelDefinitions | Получите определения меток в маркированном наборе сигналов |
getLabeledSignal | Получите маркированные сигналы из маркированного набора сигналов |
getLabelNames | Получите имена меток в маркированном наборе сигналов |
getLabelValues | Получите значения меток из маркированного набора сигналов |
getMemberNames | Получите имена представителей в маркированном наборе сигналов |
getSignal | Получите сигналы от маркированного набора сигналов |
head | Получение верхних строк таблицы меток |
labelDefinitionsHierarchy | Получите иерархический список имен меток и подметок |
labelDefinitionsSummary | Получите сводную таблицу определений меток сигналов |
merge | Объедините два или более маркированных набора сигналов |
removeLabelDefinition | Удалите определение метки из маркированного набора сигналов |
removeMembers | Удалите представители из маркированного набора сигналов |
removePointValue | Удалите строку из метки точки |
removeRegionValue | Удаление строки из метки информация только для чтения |
resetLabelValues | Сбросьте метки в значения по умолчанию |
setLabelValue | Установите значение метки в маркированном наборе сигналов |
setMemberNames | Установите имена представителей в маркированном наборе сигналов |
subset | Получите новый маркированный набор сигналов с подмножеством представителей |
Рассмотрим набор звуковых записей китов. Зарегистрированные звуки китов состоят из трелей и стонов. Трели звучат как серия нажатий кнопки. Стоны являются низкочастотными криками, похожими на звук, издаваемый судовым рогом. Вы хотите посмотреть на каждый сигнал и пометить его, чтобы идентифицировать тип кита, области треля и области стона. Для каждой области трейла также необходимо пометить 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.