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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

codegen do_reverb

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

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

reverb_test;
Running time = 17 milliseconds

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

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

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

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

reverb_test;
Running time = 6 milliseconds
Была ли эта тема полезной?