createDatastores

Создайте хранилища данных, указывающие на сигнал, и пометьте данные

    Описание

    пример

    [sigdata,lbldata] = createDatastores(lss,lblnames) создает datastore, sigdata, содержа данные члена сигнала, и datastore, lbldata, содержание данных о метке из меток задано в массиве строк lblnames. createDatastores не применяется к подметкам. Установите lblnames к одному или нескольким родительским элементам помечают имена, чтобы получить родительские метки и соответствующие значения подметки.

    Примеры

    свернуть все

    Загрузите помеченный набор сигнала, содержащий записи песен кита.

    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.
    
    

    Отобразите метки для первого члена набора.

    lss.Labels(1,:)
    ans=1×3 table
                     WhaleType    MoanRegions    TrillRegions
                     _________    ___________    ____________
    
        Member{1}      blue       {3x2 table}    {1x3 table} 
    
    

    Получите имена меток в наборе. Создайте datastore сигнала с информацией сигнала и datastore массивов с информацией о метке.

    lbls = getLabelNames(lss);
    [sgd,lbd] = createDatastores(lss,lbls)
    sgd = 
      signalDatastore with properties:
    
        MemberNames:{
                    'Member{1}';
                    'Member{2}'
                    }
           Members: {2x1 cell}
          ReadSize: 1
        SampleRate: 4000
    
    
    lbd = 
      ArrayDatastore with properties:
    
                  ReadSize: 1
        IterationDimension: 1
                OutputType: "cell"
    
    

    Отобразите метки для первого члена набора.

    lbls = read(lbd);
    lbls{:}
    ans=1×3 table
        WhaleType    MoanRegions    TrillRegions
        _________    ___________    ____________
    
          blue       {3x2 table}    {1x3 table} 
    
    

    Задайте путь к набору звуковых сигналов, включенных как 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('')
        
        xline(lbls{:}.Maximum{:}.Location, ...
            'LineWidth',2,'Color','#EDB120')
        
        if lbls{:}.Voice{:}
            ylabel('VOICED','Color','#D95319')
        end
    
    end

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

    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

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

    свернуть все

    Данные сигнала, возвращенные как signalDatastore возразите или audioDatastore Объект (Audio Toolbox).

    Пометьте данные, возвращенные как arrayDatastore объект.

    Введенный в R2021a
    Для просмотра документации необходимо авторизоваться на сайте