Создание хранилищ данных, указывающих на данные сигнала и метки
[ создает хранилище данных, sigdata,lbldata] = createDatastores(lss,lblnames)sigdata, содержащий данные элемента сигнала и хранилище данных, lbldata, содержащий данные метки из меток, указанных в строковом массиве lblnames. createDatastores не применяется к субкнижкам. Набор lblnames к одному или нескольким именам родительских меток, чтобы получить родительские метки и соответствующие значения подметки.
Загрузите маркированный набор сигналов, содержащий записи песен китов.
load whales
lsslss =
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}
Получение имен меток в наборе. Создайте хранилище данных сигнала с информацией о сигнале и хранилище данных массива с информацией о метке.
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' }
Создайте хранилище данных сигнала, указывающее на указанную папку. Задайте имя переменной частоты выборки как Fs, что является общим для всех файлов. Создание подмножества хранилища данных, исключающего файл mtlb.mat. Использовать хранилище данных подмножества в качестве источника для labeledSignalSet(Панель инструментов обработки сигналов).
sds = signalDatastore(folder,"SampleRateVariableName","Fs"); sds = subset(sds,~strcmp(nms,"mtlb.mat")); lss = labeledSignalSet(sds);
Создайте три определения меток для маркировки сигналов:
Определите логическую метку атрибута, которая является истинной для сигналов, содержащих человеческие голоса.
Определите числовую метку точки, которая отмечает местоположение и амплитуду максимума каждого сигнала.
Определите категориальную метку области интересов (ROI) для выбора неперекрывающихся случайных областей одинаковой длины каждого сигнала.
Добавьте определения меток сигналов в набор маркированных сигналов.
vc = signalLabelDefinition("Voice",'LabelType','attribute', ... 'LabelDataType','logical','DefaultValue',false); mx = signalLabelDefinition("Maximum",'LabelType','point', ... 'LabelDataType','numeric'); rs = signalLabelDefinition("RanROI",'LabelType','ROI', ... 'LabelDataType','categorical','Categories',["ROI" "other"]); addLabelDefinitions(lss,[vc mx rs])
Маркировать сигналы:
Этикетка 'handel.mat' и 'laughter.mat' как имеющие человеческий голос.
Используйте islocalmax для поиска максимума каждого сигнала. Пометьте его местоположение и значение.
Используйте randROI функция для генерирования такого количества областей длины N/10 выборок, которое может поместиться в сигнал длины N, при условии минимального разделения N/6 выборок между областями. Пометить их местоположения и назначить их ROI категория.
При маркировке точек и областей преобразуйте значения образца в значения времени. Вычесть 1 для учета индексации массива MATLAB ® и разделить на частоту выборки.
kj = 1; while hasdata(sds) [sig,info] = read(sds); fs = info.SampleRate; [~,fn] = fileparts(info.FileName); if fn=="handel" || fn=="laughter" setLabelValue(lss,kj,"Voice",true) end xm = find(islocalmax(sig,'MaxNumExtrema',1)); setLabelValue(lss,kj,"Maximum",(xm-1)/fs,sig(xm)) N = length(sig); rois = randROI(N,round(N/10),round(N/6)); setLabelValue(lss,kj,"RanROI",(rois-1)/fs,repelem("ROI",size(rois,1))) kj = kj+1; end
Убедитесь, что только два сигнала содержат голоса.
countLabelValues(lss,"Voice")ans=2×3 table
Voice Count Percent
_____ _____ _______
false 4 66.667
true 2 33.333
Убедитесь, что два сигнала имеют максимальную амплитуду 1.
countLabelValues(lss,"Maximum")ans=5×4 table
Maximum Count Percent MemberCount
______________________ _____ _______ ___________
0.80000000000000004441 1 16.667 1
0.89113331915798421612 1 16.667 1
0.94730769230769229505 1 16.667 1
1 2 33.333 2
1.0575668990330560071 1 16.667 1
Убедитесь, что каждый сигнал имеет четыре неперекрывающиеся случайные области, представляющие интерес.
countLabelValues(lss,"RanROI")ans=2×4 table
RanROI Count Percent MemberCount
______ _____ _______ ___________
ROI 24 100 6
other 0 0 0
Создайте два хранилища данных с данными в наборе маркированных сигналов:
signalDatastore(Панель инструментов обработки сигналов) sd содержит данные сигнала.
arrayDatastore объект ld содержит информацию о маркировке. Укажите, что требуется включить информацию, соответствующую всем созданным меткам.
[sd,ld] = createDatastores(lss,["Voice" "RanROI" "Maximum"]);
Используйте информацию в хранилищах данных для печати сигналов и отображения их меток.
Использовать signalMask(Панель инструментов обработки сигналов), чтобы выделить области, представляющие интерес синим цветом.
Постройте график желтых линий для обозначения расположения максимумов.
Добавьте красную метку оси к сигналам, содержащим человеческие голоса.
tiledlayout flow while hasdata(sd) [sg,nf] = read(sd); lbls = read(ld); nexttile msk = signalMask(lbls{:}.RanROI{:},'SampleRate',nf.SampleRate); plotsigroi(msk,sg) colorbar off xlabel('') [X,Y] = meshgrid(lbls{:}.Maximum{:}.Location,ylim); hold on plot(X,Y,'LineWidth',2,'Color','#EDB120') hold off if lbls{:}.Voice{:} ylabel('VOICED','Color','#D95319') end end

function roilims = randROI(N,wid,sep) num = floor((N+sep)/(wid+sep)); hq = histcounts(randi(num+1,1,N-num*wid-(num-1)*sep),(1:num+2)-1/2); roilims = (1 + (0:num-1)*(wid+sep) + cumsum(hq(1:num)))' + [0 wid-1]; end
lss - Набор маркированных сигналовlabeledSignalSet объектНабор маркированных сигналов, указанный как labeledSignalSet объект.
Пример: задает двухкомпонентный набор случайных сигналов, содержащих атрибут labeledSignalSet({randn(100,1) randn(10,1)},signalLabelDefinition('female'))'female'.
lblnames - Названия метокИмена меток, определяемые как вектор символов, строковый скаляр, массив ячеек из векторов символов или строковый массив.
Типы данных: char | string
sigdata - Сигнальные данныеsignalDatastore объект | audioDatastore объектДанные сигнала, возвращенные как signalDatastore(Панель инструментов обработки сигналов) объект или audioDatastore (Звуковая панель инструментов).
lbldata - Данные этикеткиarrayDatastore объектДанные метки, возвращенные как arrayDatastore объект.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.