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