Ускорение звука на рабочем столе в реальном времени с помощью MATLAB Coder

В этом примере показано, как ускорить аудио приложение в реальном времени с помощью генерации кода C с Coder™ MATLAB ®. Для запуска этого примера необходимо установить программное обеспечение 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 (MATLAB Coder).

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

Похожие темы