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 Объект (Deep Learning Toolbox).

    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' – Генерирует mel спектрограммы с помощью 128 mel полос.

    • 'mel256' – Генерирует mel спектрограммы с помощью 256 mel полос.

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

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

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

    свернуть все

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

    Когда вы задаете 'SpectrumType' как один из них:

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

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

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

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

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

    Ссылки

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

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

    Генерация кода C/C++
    Генерация кода C и C++ с помощью MATLAB® Coder™.

    Введенный в R2021a