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