Реверберация Используя классы MATLAB

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

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

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

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

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

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

  • reverb_test.m: Основной файл, тестирующий эффект реверберации

  • do_reverb.m: Функциональная абстракция класса Реверберации

  • Reverb.m: реализация Эффекта, реализованная как класс MATLAB

  • Delay.m: Задержите эффект для Reverb.m, реализованного как класс MATLAB

  • hhreflect.m: отражение Домовладельца для Reverb.m

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

  • speech_dft.mat: Протестируйте файл примера

Сгенерируйте MEX-функцию

codegen do_reverb

Запустите MEX-функцию

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

reverb_test;
Running time = 18 milliseconds

Сгенерируйте более быструю MEX-функцию

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

cfg = coder.config;
cfg.IntegrityChecks = false;
codegen -config cfg do_reverb

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

reverb_test;
Running time = 6 milliseconds