Создайте помеченный набор сигнала
Используйте 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
является дополнительным.
src
— Источник входных данныхsignalDatastore
возразите | audioDatastore
объектИсточник входных данных в виде матрицы, массива ячеек, расписания, 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
скаляр или a 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 Гц в течение 1 000 секунд. Сигналы во втором члене производятся на уровне 500 Гц в течение 2 секунд.
Пример: 'TimeValues',seconds([1:1000;0:1/500:2-1/500]')
указывает, что сигналы в первом члене набора производятся 1 Гц в течение 1 000 секунд. Сигналы во втором члене производятся на уровне 500 Гц в течение 2 секунд.
Пример: 'TimeValues',{1:1000,0:1/500:2-1/500}
указывает, что сигналы в первом члене набора производятся 1 Гц в течение 1 000 секунд. Сигналы во втором члене производятся на уровне 500 Гц в течение 2 секунд.
Пример: 'TimeValues',{seconds(1:1000),seconds(0:1/500:2-1/500)}
указывает, что сигналы в первом члене набора производятся 1 Гц в течение 1 000 секунд. Сигналы во втором члене производятся на уровне 500 Гц в течение 2 секунд.
NumMembers
— Число членов в набореЭто свойство доступно только для чтения.
Число членов в наборе в виде положительного целого числа.
Labels
— Таблица метокЭто свойство доступно только для чтения.
Таблица меток в виде MATLAB® таблица. Каждая переменная Labels
соответствует метке, заданной для набора. Каждая строка Labels
соответствует члену источника данных. Имена строки Labels
имена элемента.
Типы данных: table
TimeInformation
— Информация времени источника'none'
| 'sampleRate'
| 'sampleTime'
| 'timeValues'
| 'inherent'
Информация времени источника в виде одного из следующего:
'none'
— У сигналов в источнике нет времени информация.
'sampleRate'
— Сигналы в источнике производятся на заданном уровне.
'sampleTime'
— Сигналы в источнике имеют интервал требуемого времени между выборками.
'timeValues
— Сигналы в источнике имеют временную стоимость, соответствующую каждой выборке.
'inherent'
— Сигналы в источнике содержат свойственную информацию времени. Расписания MATLAB являются примером таких сигналов.
Типы данных: char |
string
Source
— Источник данных помеченного набора сигналаЭто свойство доступно только для чтения.
Источник данных помеченного набора сигнала в виде матрицы, расписания, массива ячеек или аудио 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
, аудио datastore, затем помеченный набор сигнала имеет много членов, равных количеству файлов, на которые указывает datastore. Source
свойство содержит массив ячеек из символьных векторов с именами файлов. Каждый член содержит все сигналы, возвращенные чтением соответствующего файла datastore.
addLabelDefinitions | Добавьте определения метки помеченному набору сигнала |
addMembers | Добавьте члены в помеченный набор сигнала |
countLabelValues | Считайте значения метки |
createDatastores | Создайте хранилища данных, указывающие на сигнал, и пометьте данные |
editLabelDefinition | Отредактируйте свойства определения метки |
getLabelDefinitions | Получите определения метки в помеченном наборе сигнала |
getLabeledSignal | Получите помеченные сигналы от помеченного набора сигнала |
getLabelNames | Получите имена метки в помеченном наборе сигнала |
getLabelValues | Получите значения метки от помеченного набора сигнала |
getMemberNames | Получите имена элемента в помеченном наборе сигнала |
getSignal | Получите сигналы от помеченного набора сигнала |
head | Получите верхние строки таблицы меток |
labelDefinitionsHierarchy | Получите иерархический список метки и подпометьте имена |
labelDefinitionsSummary | Получите сводную таблицу определений метки сигнала |
merge | Объедините два или больше помеченных набора сигнала |
removeLabelDefinition | Удалите определение метки из помеченного набора сигнала |
removeMembers | Удалите члены из помеченного набора сигнала |
removePointValue | Удалите строку из метки точки |
removeRegionValue | Удалите строку из метки ROI |
resetLabelValues | Сбросьте метки к значениям по умолчанию |
setLabelValue | Установите значение метки в помеченном наборе сигнала |
setMemberNames | Элемент множества называет в помеченном наборе сигнала |
subset | Получите новый помеченный набор сигнала с подмножеством членов |
Рассмотрите набор аудиозаписей кита. Записанные звуки кита состоят из трелей и стонов. Трели походят на серию нажатий кнопки. Стоны являются низкочастотными криками, похожими на звук, сделанный рогом поставки. Вы хотите посмотреть на каждый сигнал и пометить его, чтобы идентифицировать тип кита, области трели и области стона. Для каждой области трели вы также хотите пометить 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
объект для каждой песни кита и использования это, чтобы визуализировать и пометить различные области. Для лучшей визуализации измените значения метки от логического до категориального.
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
объект 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('') 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
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.