labeledSignalSet

Создайте маркированный набор сигналов

Описание

Использование labeledSignalSet для хранения маркированных сигналов вместе с определениями меток. Создайте определения меток сигналов с помощью signalLabelDefinition.

Создание

Описание

lss = labeledSignalSet создает пустой набор маркированных сигналов. Использовать addMembers для добавления сигналов к аппарату. Использовать 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 опционально.

Входные параметры

расширить все

Входные данные, заданный как матрица, массив ячеек, timetable, a signalDatastore объект, или audioDatastore (Audio Toolbox) объект. src неявно задает количество представителей набора, количество сигналов в каждом представителе и данные в каждом сигнале.

Пример: {randn(10,3),randn(17,9)} имеет два представителей. Первый представитель содержит три сигнала с 10 выборками. Второй представитель содержит девять 17-выборочных сигналов.

Пример: {{randn(10,1)},{randn(17,1),randn(27,1)}} имеет два представителей. Первый представитель содержит один сигнал 10 дискретизации. Второй представитель содержит сигнал 17 выборки и сигнал 27 выборки.

Пример: {{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 секунд.

Пример: 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.

Определения меток, заданные как вектор signalLabelDefinition объекты.

Представитель имена, заданные как вектор символов, строковый скаляр, массив ячеек с векторами символов или строковыми массивами.

Пример: labeledSignalSet({randn(100,1) randn(10,1)},'MemberNames',{'llama' 'alpaca'}) задает набор случайных сигналов с двумя представителями, 'llama' и 'alpaca'.

Свойства

расширить все

Описание маркированного набора сигналов, заданное как вектор символов или строковый скаляр.

Пример: 'Description','Sleep test patients by sex and age'

Типы данных: char | string

Это свойство доступно только для чтения.

Значения частоты дискретизации, заданные как положительная скалярная величина или вектор. Это свойство допустимо только, когда источник данных не содержит неотъемлемой информации о времени.

  • Задайте SampleRate для положительного числового скаляра, чтобы задать ту же скорость дискретизации для всех сигналов в маркированном наборе.

  • Задайте SampleRate вектор, чтобы указать, что каждый представитель маркированного набора имеет сигналы, дискретизированные с той же скоростью, но скорости дискретизации отличаются от представителя к представителю. Вектор должен иметь количество элементов, равное количеству представителей множества. Если у представитель набора есть сигналы с различными скоростями дискретизации, задайте скорости дискретизации с помощью расписаний.

Пример: 'SampleRate',[1e2 1e3] определяет, что сигналы в первом представителе набора дискретизируются со скоростью 100 Гц, а сигналы во втором представителе дискретизируются со скоростью 1 кГц.

Это свойство доступно только для чтения.

Шаги расчета значения, заданные как положительная скалярная величина, вектор, a duration скаляр, или duration вектор. Это свойство допустимо только, когда источник данных не содержит неотъемлемой информации о времени.

  • Задайте SampleTime в число или duration скаляр для задания того же шага расчета для всех сигналов в маркированном наборе.

  • Задайте SampleTime в число или duration вектор, чтобы указать, что каждый представитель маркированного набора имеет сигналы с одинаковым временным интервалом между выборками, но интервалы отличаются от представителя к представителю. Вектор должен иметь количество элементов, равное количеству представителей множества. Если у представитель набора есть сигналы с различными шагами расчета, задайте шаги расчета с помощью расписаний.

Пример: 'SampleTime',seconds([1e-2 1e-3]) задает, что сигналы в первом представителе набора имеют 0,01 секунды между выборками, и сигналы во втором представителе имеют 1 миллисекунду между выборками.

Это свойство доступно только для чтения.

Значения времени, заданные как вектор, 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 секунд.

Это свойство доступно только для чтения.

Количество представителей в наборе, заданное как положительное целое число.

Это свойство доступно только для чтения.

Таблица меток, заданная как MATLAB® таблица. Каждая переменная Labels соответствует метке, определенной для набора. Каждая строка Labels соответствует представителю источника данных. Имена строк Labels являются именами представителей.

Типы данных: table

Информация о времени источника, заданная как одно из следующего:

  • 'none' - Сигналы в источнике не имеют информации о времени.

  • 'sampleRate' - Сигналы в источнике дискретизируются с заданной скоростью.

  • 'sampleTime' - Сигналы в источнике имеют заданный временной интервал между выборками.

  • 'timeValues - Сигналы в источнике имеют значение времени, соответствующее каждой выборке.

  • 'inherent' - Сигналы в источнике содержат неотъемлемую информацию о времени. Расписания MATLAB являются примером таких сигналов.

Типы данных: char | string

Это свойство доступно только для чтения.

Источник данных маркированного набора сигналов, заданный как матрица, расписание, массив ячеек или 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')

Figure contains 2 axes. Axes 1 contains an object of type line. Axes 2 contains an object of type line.

Области стона являются устойчивыми низкочастотными створками.

  • 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

Figure contains 2 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line.

Визуализация меток точек

Пометьте три пика для каждой области треля. Для меток точек необходимо задать местоположения точек и значения меток. В этом примере местоположения точек указаны в секундах.

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

Figure contains 2 axes. Axes 1 contains 4 objects of type line. Axes 2 contains 4 objects of type line.

Исследуйте значения меток

Исследуйте значения меток с помощью 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

Figure contains 6 axes. Axes 1 contains 4 objects of type line. Axes 2 contains 4 objects of type line. Axes 3 contains 4 objects of type line. Axes 4 contains 4 objects of type line. Axes 5 contains 4 objects of type line. Axes 6 contains 4 objects of type line.

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

См. также

Приложения

Объекты

Введенный в R2018b