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

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

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

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

Этот эффект реверберации реализован на основе следующего блока:

Схема показывает только первую линию задержки. Представьте, что еще семь линий задержки повторяются в схеме, но каждая линия задержки имеет отдельный блок задержки и связанный с ним блок усиления обратной связи. Размышление о домохозяине (т.е. 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
Для просмотра документации необходимо авторизоваться на сайте