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 Объект (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 скаляр или a 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 Гц в течение 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 секунд.

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

Число членов в наборе в виде положительного целого числа.

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

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

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

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

  • 'none' — У сигналов в источнике нет времени информация.

  • 'sampleRate' — Сигналы в источнике производятся на заданном уровне.

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

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

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

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

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

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

Добавьте области стона в помеченный набор. Задайте пределы 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

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

Визуализируйте метки точки

Пометьте три 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

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     

Создайте два хранилища данных с данными в помеченном наборе сигнала:

  • 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
Для просмотра документации необходимо авторизоваться на сайте