Этот пример показывает, как ускорить аудиоприложение в реальном времени с помощью генерации кода C с MATLAB® Coder™. Необходимо было установить программное обеспечение MATLAB Coder™, чтобы запустить этот пример.
Заменение частей вашего кода MATLAB с автоматически сгенерированным исполняемым файлом MATLAB (MEX-функция) может ускорить симуляцию. Используя MATLAB Coder, можно сгенерировать читаемый и портативный код С и скомпилировать его в MEX-функцию, которая заменяет эквивалентный раздел алгоритма MATLAB.
Этот пример демонстрирует генерацию кода, использующую аудио приложение фильтрации метки.
Фильтр метки используется, чтобы устранить определенную частоту из сигнала. Типичные параметры проекта фильтра для фильтров метки являются частотой центра метки и пропускной способностью на 3 дБ. Центральная частота является частотой, на которой фильтр имеет линейное усиление нуля. Пропускная способность на 3 дБ измеряет ширину частоты метки фильтра, вычисленного в точке затухания на 3 дБ или на уровне половинной мощности.
Функция помощника, используемая в этом примере, является helperAudioToneRemoval. Функция читает звуковой сигнал, поврежденный синусоидальным тоном на 250 Гц из файла. helperAudioToneRemoval использует фильтр метки, чтобы удалить вмешивающийся тон и пишет отфильтрованный сигнал в файл.
Можно визуализировать поврежденный звуковой сигнал с помощью спектра анализатор.
scope = dsp.SpectrumAnalyzer('SampleRate',44.1e3,... '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'); reader = dsp.AudioFileReader('guitar_plus_tone.ogg'); while ~isDone(reader) audio = reader(); scope(audio(:,1)); end
Измерьте время, которое требуется, чтобы считать звуковой файл, отфильтровать вмешивающийся тон и записать отфильтрованный вывод с помощью кода MATLAB. Поскольку helperAudioToneRemoval записывает звуковой файл вывод, у вас должно быть разрешение записи в текущем каталоге. Чтобы гарантировать доступ для записи, измените директорию на временную папку своей системы.
mydir = pwd; addpath(mydir); cd(tempdir);
tic;
helperAudioToneRemoval;
t1 = toc;
fprintf('MATLAB Simulation Time: %d\n',t1);
MATLAB Simulation Time: 3.941983e+00
Затем, сгенерируйте MEX-функцию от helperAudioToneRemoval
с помощью функции MATLAB Coder, codegen.
codegen helperAudioToneRemoval
Измерьте время, которое требуется, чтобы выполнить MEX-функцию и вычислить усиление ускорения со скомпилированной функцией.
tic;
helperAudioToneRemoval_mex
t2 = toc;
fprintf('Code Generation Simulation Time: %d\n',t2);
Code Generation Simulation Time: 2.138478e+00
fprintf('Speedup factor: %6.2f\n',t1/t2);
Speedup factor: 1.84
cd(mydir);