Счетчик значений меток
считает значения метки с именем cnt = countLabelValues(lss,lblname)lblname и возвращает результаты в таблице cnt. cnt содержит счетчики значений меток и проценты. Когда lblname является информация только для чтения или меткой точки, cnt также содержит количество представителей с по крайней мере одним значением конкретной категории. countLabelValues не поддерживает:
Подметки
Определения меток с помощью набора свойств LabelDataType (Signal Processing Toolbox), для 'table' или 'timetable'
Метки со значениями образцов, которые нельзя преобразовать в вектор с дискретным набором категорий. Необходимо иметь возможность группировать значения меток с помощью набора уникальных дискретных категорий. Примеры меток, которые не поддерживаются, включают:
Массивы ячеек расписаний
Массивы ячеек, содержащие матрицы разных размеров
Загрузите маркированный набор сигналов, содержащий записи песен китов.
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.
Получите имена меток в наборе.
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 (Signal Processing Toolbox) объект.
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
Создайте два хранилища данных с данными в маркированном наборе сигналов:
The signalDatastore (Signal Processing Toolbox) объект sd содержит данные сигнала.
The 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('') [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'.
lblname - Имя меткиИмя метки, заданное как вектор символов или строковый скаляр.
Типы данных: char | string
cnt - Таблица результатовТаблица результатов, возвращенная как таблица со следующими переменными:
Count - Количество значений меток для конкретной категории.
Percent - Количество значений меток для конкретной категории в процентах от всех значений меток.
MemberCount - Количество представителей с по крайней мере одним значением конкретной категории. Эта переменная возвращается только для информация только для чтения или метки точки.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.