Считайте значения метки
считает значения метки под названием cnt
= countLabelValues(lss
,lblname
)lblname
и возвращает результаты в таблицу cnt
. cnt
содержит количества значения метки и проценты. Когда lblname
ROI или метка точки, cnt
также содержит число членов по крайней мере с одним значением конкретной категории. countLabelValues
не поддерживает:
Подметки
Пометьте определения LabelDataType (Signal Processing Toolbox) набор свойств к 'table'
или 'timetable'
Метки со значениями экземпляра, которые не могут быть преобразованы в вектор с дискретным набором категорий. Должно быть возможно сгруппировать значения метки с помощью набора уникальных дискретных категорий. Примеры меток, которые не поддерживаются, включают:
Массивы ячеек расписаний
Массивы ячеек, содержащие матрицы различных размеров
Загрузите помеченный набор сигнала, содержащий записи песен кита.
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.
Получите имена меток в наборе.
getLabelNames(lss)
ans = 3x1 string
"WhaleType"
"MoanRegions"
"TrillRegions"
Проверьте, что два члена набора являются голубыми китами.
countLabelValues(lss,"WhaleType")
ans=3×3 table
WhaleType Count Percent
_________ _____ _______
blue 2 100
humpback 0 0
white 0 0
Проверьте, что у каждого члена есть три области стона.
countLabelValues(lss,"MoanRegions")
ans=2×4 table
MoanRegions Count Percent MemberCount
___________ _____ _______ ___________
false 0 0 0
true 6 100 2
Проверьте, что у каждого члена есть одна область трели.
countLabelValues(lss,"TrillRegions")
ans=2×4 table
TrillRegions Count Percent MemberCount
____________ _____ _______ ___________
false 0 0 0
true 2 100 2
Задайте путь к набору звуковых сигналов, включенных как 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'
.
lblname
— Пометьте имяПометьте имя в виде вектора символов или строкового скаляра.
Типы данных: char |
string
cnt
— Таблица результатовТаблица результатов, возвращенная как таблица со следующими переменными:
Count
— Количество значений метки для конкретной категории.
Percent
— Количество значений метки для конкретной категории как процент всех значений метки.
MemberCount
— Число членов по крайней мере с одним значением конкретной категории. Эта переменная возвращена только для ROI или метки точки.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.