Создание набора маркированных сигналов
Использовать 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 (Звуковая панель инструментов). 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' }
Создайте хранилище данных сигнала, указывающее на указанную папку. Задайте имя переменной частоты выборки как Fs, что является общим для всех файлов. Создание подмножества хранилища данных, исключающего файл mtlb.mat, который отличается от других файлов тем, что переменная сигнала не вызывается y.
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sdss = subset(sds,~strcmp(nms,"mtlb.mat"));
Использовать хранилище данных подмножества в качестве источника для 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 векторЭто свойство доступно только для чтения.
Значения времени выборки, указанные как положительный скаляр, вектор, 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 - Источник данных маркированного комплекта сигналовЭто свойство доступно только для чтения.
Источник данных маркированного набора сигналов, указанный как матрица, расписание, массив ячеек или хранилище аудиоданных.
Если 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, является хранилищем аудиоданных, то набор помеченных сигналов имеет количество элементов, равное количеству файлов, на которые указывает хранилище данных. Source содержит массив ячеек символьных векторов с именами файлов. Каждый элемент содержит все сигналы, возвращаемые при считывании соответствующего файла хранилища данных.
addLabelDefinitions | Добавление определений меток в набор маркированных сигналов |
addMembers | Добавление элементов в набор маркированных сигналов |
countLabelValues | Подсчитать значения меток |
createDatastores | Создание хранилищ данных, указывающих на данные сигнала и метки |
editLabelDefinition | Изменение свойств определения метки |
getLabelDefinitions | Получение определений меток в наборе маркированных сигналов |
getLabeledSignal | Получение маркированных сигналов из набора маркированных сигналов |
getLabelNames | Получение имен меток в наборе маркированных сигналов |
getLabelValues | Получение значений меток из набора маркированных сигналов |
getMemberNames | Получение имен элементов в наборе маркированных сигналов |
getSignal | Получение сигналов из набора маркированных сигналов |
head | Получить верхние строки таблицы меток |
labelDefinitionsHierarchy | Получение иерархического списка имен меток и субкниг |
labelDefinitionsSummary | Получение сводной таблицы определений меток сигналов |
merge | Объединение двух или более наборов маркированных сигналов |
removeLabelDefinition | Удалить определение метки из набора маркированных сигналов |
removeMembers | Удалить элементы из набора маркированных сигналов |
removePointValue | Удалить строку из метки точки |
removeRegionValue | Удалить строку из метки окупаемости инвестиций |
resetLabelValues | Восстановить значения меток по умолчанию |
setLabelValue | Установка значения метки в наборе маркированных сигналов |
setMemberNames | Установка имен элементов в наборе маркированных сигналов |
subset | Получить новый набор маркированных сигналов с подмножеством элементов |
Рассмотрим набор звукозаписей китов. Записанные китовые звуки состоят из трелей и стонов. Трели звучат как серия кликов. Стоны - низкочастотные крики, похожие на звук, издаваемый корабельным рогом. Вы хотите посмотреть на каждый сигнал и маркировать его, чтобы определить тип кита, области треля и области стона. Для каждой области треля также требуется пометить пики сигнала выше определенного порога.
Определения меток сигналов
Определите метку атрибута для хранения типов китов. Возможные категории - синий кит, горбатый кит и белый кит.
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 объект для каждой песни китов и использовать его для визуализации и маркировки различных областей. Для лучшей визуализации измените значения меток с логических на категориальные.
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
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.