В этом примере показано, как ускорить создание аудиоприложений в реальном времени с помощью 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

Измерьте время, необходимое для чтения аудиофайла, фильтрации мешающего тонального сигнала и записи отфильтрованного выходного сигнала с помощью кода 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