exponenta event banner

Создание ускоренного кода MEX для реверберации с использованием классов MATLAB ®

В этом примере показано, как ускорить выполнение алгоритма MATLAB, использующего классы MATLAB. Классы создают эффект реверберации, то есть «эхо», которое вы слышите в большой пустой комнате.

Реализация простого эффекта реверберации

Существует множество способов реализации эффекта реверберации с различными признаками. По качеству звука это не является продвинутым эффектом, но показывает возможности использования классов MATLAB с Coder™ MATLAB.

Этот эффект реверберации реализуется на основе следующей блок-схемы:

На диаграмме показана только первая линия задержки. Представьте, что еще семь линий задержки повторяются на диаграмме, но каждая линия задержки имеет индивидуальный блок задержки и связанного с ним усиления обратной связи. Отражение Домохозяина (т. е. hhreflect функция) по существу является смешиванием/перестановкой сигналов без изменения энергии полного сигнала. Поэтому мы по существу дублируем входящий сигнал и возвращаем его обратно с небольшими временными смещениями. Результатом является эффект реверберации.

Используемые файлы

  • reverb_test.m: Проверка эффекта реверберации в основном файле

  • do_reverb.mАбстракция функций класса Reverb

  • Reverb.mРеализация эффекта в виде класса MATLAB

  • Delay.mЭффект задержки для Reverb.m реализован как класс MATLAB

  • hhreflect.m: Отражение домохозяина для Reverb.m

  • get_prime.m: Функция для вычисления простых чисел (для Reverb.m)

  • speech_dft.mat: Тестировать файл образца

Создание функции MEX

codegen do_reverb
Code generation successful.

Выполнение функции MEX

При этом обрабатывается образец файла (speech_dft.mat), применяет эффект реверберации и выводит результат на аудиовыход компьютера.

reverb_test;
Running time = 16 milliseconds

Создание более быстрой функции MEX

Деактивируйте проверки целостности (например, проверки вне границ для матриц), чтобы получить более быструю, но потенциально небезопасную функцию MEX.

cfg = coder.config;
cfg.IntegrityChecks = false;
codegen -config cfg do_reverb
Code generation successful.

Повторить функцию MEX

reverb_test;
Running time = 8 milliseconds