countLabelValues

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

    Описание

    пример

    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

    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 ('female')) задает набор случайных сигналов с двумя членами, содержащий атрибут 'female'.

    Имя метки, заданное как вектор символов или строковый скаляр.

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

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

    свернуть все

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

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

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

    • MemberCount - Количество представителей с по крайней мере одним значением конкретной категории. Эта переменная возвращается только для информация только для чтения или метки точки.

    Введенный в R2021a