exponenta event banner

Звуковое ускорение рабочего стола в реальном времени с кодером MATLAB

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

Введение

Замена частей кода MATLAB автоматически генерируемым исполняемым файлом MATLAB (MEX-функция) может ускорить моделирование. С помощью MATLAB Coder можно создать считываемый и переносимый код C и скомпилировать его в 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, codegen (Кодер MATLAB).

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

Связанные темы