Настольное аудио ускорение в реальном времени с MATLAB Coder

В этом примере показано, как ускорить аудиоприложение в реальном времени с помощью генерации кода C с MATLAB® Coder™. Необходимо было установить программное обеспечение MATLAB Coder™, чтобы запустить этот пример.

Введение

Заменение частей вашего кода MATLAB с автоматически сгенерированным исполняемым файлом MATLAB (MEX-функция) может ускорить симуляцию. Используя MATLAB Coder, можно сгенерировать читаемый и портативный код С и скомпилировать его в MEX-функцию, которая заменяет эквивалентный раздел алгоритма MATLAB.

Этот пример демонстрирует генерацию кода, использующую аудио приложение фильтрации метки.

Отметьте фильтрацию

Фильтр метки используется, чтобы устранить определенную частоту из сигнала. Типичные параметры создания фильтра для фильтров метки являются частотой центра метки и пропускной способностью на 3 дБ. Центральная частота является частотой, на которой фильтр имеет линейное усиление нуля. Пропускная способность на 3 дБ измеряет ширину частоты метки фильтра, вычисленного в точке затухания на 3 дБ или на уровне половинной мощности.

Функцией помощника, используемой в этом примере, является helperAudioToneRemoval. Функция читает звуковой сигнал, поврежденный синусоидальным тоном на 250 Гц из файла. helperAudioToneRemoval использует фильтр метки, чтобы удалить вмешивающийся тон и пишет отфильтрованный сигнал в файл.

Можно визуализировать поврежденный звуковой сигнал с помощью спектра анализатор.

reader = dsp.AudioFileReader('guitar_plus_tone.ogg');

scope = dsp.SpectrumAnalyzer('SampleRate',reader.SampleRate, ...
    'RBWSource','Property','RBW',5, ...
    'PlotAsTwoSidedSpectrum',false, ...
    'SpectralAverages',10, ...
    'FrequencySpan','Start and stop frequencies', ...
    'StartFrequency',20, ...
    'StopFrequency',1000, ...
    'Title','Audio signal corrupted by 250 Hz tone');

while ~isDone(reader)
    audio = reader();
    scope(audio(:,1));
end

Ускорение генерации кода C

Измерьте время, которое требуется, чтобы считать звуковой файл, отфильтровать вмешивающийся тон и записать отфильтрованный выход с помощью кода MATLAB.

tic
helperAudioToneRemoval
t1 = toc;

fprintf('MATLAB Simulation Time: %d\n',t1)
MATLAB Simulation Time: 3.701829e+00

Затем сгенерируйте MEX-функцию от helperAudioToneRemoval с помощью функции MATLAB Coder, codegen.

codegen helperAudioToneRemoval

Измерьте время, которое требуется, чтобы выполнить MEX-функцию и вычислить усиление ускорения со скомпилированной функцией.

tic
helperAudioToneRemoval_mex
t2 = toc;

fprintf('Code Generation Simulation Time: %d\n',t2)
Code Generation Simulation Time: 2.167587e+00
fprintf('Speedup factor: %6.2f\n',t1/t2)
Speedup factor:   1.71

Похожие темы