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