exponenta event banner

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 является необязательным.

Входные аргументы

развернуть все

Источник входных данных, указанный как матрица, массив ячеек, расписание, signalDatastore(Панель инструментов обработки сигналов) или audioDatastore (Звуковая панель инструментов). 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'   }

Создайте хранилище данных сигнала, указывающее на указанную папку. Задайте имя переменной частоты выборки как 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.

Определения меток, указанные как вектор 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 кГц.

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

Значения времени выборки, указанные как положительный скаляр, вектор, 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

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

Источник данных маркированного набора сигналов, указанный как матрица, расписание, массив ячеек или хранилище аудиоданных.

  • Если 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')

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 (Signal Processing Toolbox) объект для каждой песни китов и использовать его для визуализации и маркировки различных областей. Для лучшей визуализации измените значения меток с логических на категориальные.

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'   }

Создайте хранилище данных сигнала, указывающее на указанную папку. Задайте имя переменной частоты выборки как 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

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