exponenta event banner

openl3Preprocess

Предварительная обработка звука для извлечения OpenL3 функций

    Описание

    пример

    features = openl3Preprocess(audioIn,fs) генерирует спектрограммы из audioIn который может подаваться в OpenL3 предварительно обученную сеть.

    features = openl3Preprocess(audioIn,fs,Name,Value) указывает параметры, использующие один или несколько Name,Value аргументы. Например, features = openl3Preprocess(audioIn,fs,'OverlapPercentage',75) применяет 75% перекрытие между последовательными кадрами, используемыми для генерации спектрограмм.

    Примеры

    свернуть все

    Загрузите и распакуйте модель Audio Toolbox™ для OpenL3.

    Напечатать openl3 в окне команд. Если модель Audio Toolbox для OpenL3 не установлена, функция предоставляет ссылку на расположение весов сети. Чтобы загрузить модель, щелкните ссылку. Распакуйте файл в папку по пути MATLAB.

    Либо выполните эти команды для загрузки и распаковки модели OpenL3 во временную папку.

    downloadFolder = fullfile(tempdir,'OpenL3Download');
    loc = websave(downloadFolder,'https://ssd.mathworks.com/supportfiles/audio/openl3.zip');
    OpenL3Location = tempdir;
    unzip(loc,OpenL3Location)
    addpath(fullfile(OpenL3Location,'openl3'))

    Убедитесь, что установка выполнена успешно, введя openl3 в окне команд. Если сеть установлена, то функция возвращает DAGNetwork(Панель инструментов глубокого обучения).

    openl3
    ans = 
      DAGNetwork with properties:
    
             Layers: [30×1 nnet.cnn.layer.Layer]
        Connections: [29×2 table]
         InputNames: {'in'}
        OutputNames: {'out'}
    
    

    Использовать openl3Preprocess для извлечения встраиваемых данных из звукового сигнала.

    Считывание звукового сигнала.

    [audioIn,fs] = audioread('Counting-16-44p1-mono-15secs.wav');

    Чтобы извлечь спектрограммы из звука, вызовите openl3Preprocess функция с частотой звука и дискретизации. Используйте 50% перекрытие и установите тип спектра линейным. openl3Preprocess функция возвращает массив из 30 спектрограмм, полученных с использованием длины БПФ 512.

    features = openl3Preprocess(audioIn,fs,'OverlapPercentage',50,'SpectrumType','linear');
    [posFFTbinsOvLap50,numHopsOvLap50,~,numSpectOvLap50] = size(features)
    posFFTbinsOvLap50 = 257
    
    numHopsOvLap50 = 197
    
    numSpectOvLap50 = 30
    

    Звонить openl3Preprocess опять же, на этот раз с использованием перекрытия по умолчанию 90%. openl3Preprocess функция теперь возвращает массив из 146 спектрограмм.

    features = openl3Preprocess(audioIn,fs,'SpectrumType','linear');
    [posFFTbinsOvLap90,numHopsOvLap90,~,numSpectOvLap90] = size(features)
    posFFTbinsOvLap90 = 257
    
    numHopsOvLap90 = 197
    
    numSpectOvLap90 = 146
    

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

    randSpect = randi(numSpectOvLap90);
    viewRandSpect = features(:,:,:,randSpect);
    N = size(viewRandSpect,2); 
    binsToHz = (0:N-1)*fs/N;
    nyquistBin = round(N/2);
    semilogx(binsToHz(1:nyquistBin),mag2db(abs(viewRandSpect(1:nyquistBin))))
    xlabel('Frequency (Hz)')
    ylabel('Power (dB)');
    title([num2str(randSpect),'th Spectrogram'])
    axis tight
    grid on

    Создание сети OpenL3 (для этого требуется инструментарий Deep Learning Toolbox) с использованием того же самого 'SpectrumType'.

    net = openl3('SpectrumType','linear');

    Извлеките и визуализируйте аудиозаписи.

    embeddings = predict(net,features);
    surf(embeddings,'EdgeColor','none')
    view([90,-90])
    axis([1 numSpectOvLap90 1 numSpectOvLap90])
    xlabel('Embedding Length')
    ylabel('Spectrum Number')
    title('OpenL3 Feature Embeddings')
    axis tight

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

    свернуть все

    Входной сигнал, заданный как вектор столбца или матрица. Если указать матрицу, openl3Preprocess обрабатывает столбцы матрицы как отдельные аудиоканалы.

    Типы данных: single | double

    Частота дискретизации входного сигнала в Гц, заданная как положительный скаляр.

    Типы данных: single | double

    Аргументы пары «имя-значение»

    Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

    Пример: openl3Preprocess(audioIn,fs,'SpectrumType','mel256')

    Процентное перекрытие между последовательными спектрограммами, заданными как скаляр в диапазоне [0,100).

    Типы данных: single | double

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

    • 'mel128' - Генерирует спектрограммы с использованием 128 мел-полос.

    • 'mel256' - Генерирует спектрограммы с использованием 256 мел-полос.

    • 'linear' - Генерирует положительные односторонние спектрограммы с использованием длины БПФ 512.

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

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

    свернуть все

    Спектрограммы, полученные из audioIn, возвращено в виде массива N-by-M-by-1-by-K.

    При указании 'SpectrumType' как одно из следующих:

    • 'mel128' - Размеры: 128около-199около-1-по-К, где 128 - количество полос mel и 199 - количество скачков времени.

    • 'mel256' - Размеры: 256около-199около-1-по-К, где 256 - количество полос mel и 199 - количество скачков времени.

    • 'linear' - Размеры: 257около-197около-1-по-К, где 257 - положительная односторонняя длина БПФ и 197 - количество скачков времени.

    • K представляет количество спектрограмм и зависит от длины audioIn, количество каналов в audioInА также OverlapPercentage.

    Типы данных: single

    Ссылки

    [1] Крамер, Джейсон, и др. «Смотрите, слушайте и узнайте больше: варианты дизайна для глубоких аудиозаписей». В ICASSP 2019 Международная конференция IEEE по аустике, обработке речи и сигналов (ICASSP), IEEE, 2019, стр. 3852-56. DOI.org (Crossref), doi:/10.1109/ICASSP.2019.8682475.

    Расширенные возможности

    Создание кода C/C + +
    Создайте код C и C++ с помощью MATLAB ® Coder™

    .
    Представлен в R2021a