countLabelValues

Считайте значения метки

    Описание

    пример

    cnt = countLabelValues(lss,lblname) считает значения метки под названием lblname и возвращает результаты в таблицу cnt. cnt содержит количества значения метки и проценты. Когда lblname ROI или метка точки, 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     
    
    

    Создайте два хранилища данных с данными в помеченном наборе сигнала:

    • 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

    Figure contains 6 axes. Axes 1 contains 4 objects of type line. Axes 2 contains 4 objects of type line. Axes 3 contains 4 objects of type line. Axes 4 contains 4 objects of type line. Axes 5 contains 4 objects of type line. Axes 6 contains 4 objects of type line.

    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

    Входные параметры

    свернуть все

    Помеченный набор сигнала в виде labeledSignalSet объект.

    Пример: labeledSignalSet({randn (100,1) randn (10,1)}, signalLabelDefinition ('розетка')) задает набор 2D члена случайных сигналов, содержащих атрибут 'female'.

    Пометьте имя в виде вектора символов или строкового скаляра.

    Типы данных: char | string

    Выходные аргументы

    свернуть все

    Таблица результатов, возвращенная как таблица со следующими переменными:

    • Count — Количество значений метки для конкретной категории.

    • Percent — Количество значений метки для конкретной категории как процент всех значений метки.

    • MemberCount — Число членов по крайней мере с одним значением конкретной категории. Эта переменная возвращена только для ROI или метки точки.

    Введенный в R2021a