Создайте хранилища данных, указывающие на сигнал, и пометьте данные
[
создает datastore, sigdata
,lbldata
] = createDatastores(lss
,lblnames
)sigdata
, содержа данные члена сигнала, и datastore, lbldata
, содержание данных о метке из меток задано в массиве строк lblnames
. createDatastores
не применяется к подметкам. Установите lblnames
к одному или нескольким родительским элементам помечают имена, чтобы получить родительские метки и соответствующие значения подметки.
Загрузите помеченный набор сигнала, содержащий записи песен кита.
load whales
lss
lss = labeledSignalSet with properties: Source: {2x1 cell} NumMembers: 2 TimeInformation: "sampleRate" SampleRate: 4000 Labels: [2x3 table] Description: "Characterize wave song regions" Use labelDefinitionsHierarchy to see a list of labels and sublabels. Use setLabelValue to add data to the set.
Отобразите метки для первого члена набора.
lss.Labels(1,:)
ans=1×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
Member{1} blue {3x2 table} {1x3 table}
Получите имена меток в наборе. Создайте datastore сигнала с информацией сигнала и datastore массивов с информацией о метке.
lbls = getLabelNames(lss); [sgd,lbd] = createDatastores(lss,lbls)
sgd = signalDatastore with properties: MemberNames:{ 'Member{1}'; 'Member{2}' } Members: {2x1 cell} ReadSize: 1 SampleRate: 4000
lbd = ArrayDatastore with properties: ReadSize: 1 IterationDimension: 1 OutputType: "cell"
Отобразите метки для первого члена набора.
lbls = read(lbd); lbls{:}
ans=1×3 table
WhaleType MoanRegions TrillRegions
_________ ___________ ____________
blue {3x2 table} {1x3 table}
Задайте путь к набору звуковых сигналов, включенных как 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
Объект (Signal Processing Toolbox) sd
содержит данные сигнала.
arrayDatastore
объект ld
содержит информацию о маркировке. Укажите, что вы хотите включать информацию, соответствующую всем меткам, которые вы создали.
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
Используйте информацию в хранилищах данных, чтобы построить сигналы и отобразить их метки.
Используйте signalMask
Объект (Signal Processing Toolbox) подсветить необходимые области синего цвета.
Постройте желтые графики, чтобы отметить местоположения максимумов.
Добавьте красную подпись по осям в сигналы, которые содержат человеческую речь.
tiledlayout flow while hasdata(sd) [sg,nf] = read(sd); lbls = read(ld); nexttile msk = signalMask(lbls{:}.RanROI{:},'SampleRate',nf.SampleRate); plotsigroi(msk,sg) colorbar off xlabel('') xline(lbls{:}.Maximum{:}.Location, ... 'LineWidth',2,'Color','#EDB120') if lbls{:}.Voice{:} ylabel('VOICED','Color','#D95319') end end
function roilims = randROI(N,wid,sep) num = floor((N+sep)/(wid+sep)); hq = histcounts(randi(num+1,1,N-num*wid-(num-1)*sep),(1:num+2)-1/2); roilims = (1 + (0:num-1)*(wid+sep) + cumsum(hq(1:num)))' + [0 wid-1]; end
lss
— Помеченный набор сигналаlabeledSignalSet
объектПомеченный набор сигнала в виде labeledSignalSet
объект.
Пример:
задает набор 2D члена случайных сигналов, содержащих атрибут labeledSignalSet
({randn (100,1) randn (10,1)}, signalLabelDefinition ('розетка'))'female'
.
lblnames
— Пометьте именаПометьте имена в виде вектора символов, строкового скаляра, массива ячеек из символьных векторов или массива строк.
Типы данных: char |
string
sigdata
— Данные сигналаsignalDatastore
возразите | audioDatastore
объектДанные сигнала, возвращенные как signalDatastore
Объект (Signal Processing Toolbox) или audioDatastore
Объект (Audio Toolbox).
lbldata
Данные МеткиarrayDatastore
объектПометьте данные, возвращенные как arrayDatastore
объект.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.