Реверберация Используя классы 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 = 22 milliseconds

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

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

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

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

reverb_test;
Running time = 10 milliseconds