В этом примере представлена утилита, которую можно использовать для анализа временных характеристик алгоритмов обработки сигналов, разработанных для потоковых приложений реального времени.
Возможность прототипировать алгоритм обработки аудиосигналов в реальном времени с помощью MATLAB зависит в первую очередь от его производительности исполнения. На производительность влияет ряд факторов, таких как сложность алгоритма, частота дискретизации и размер входного кадра. В конечном счете, алгоритм должен быть достаточно быстрым, чтобы гарантировать, что он всегда может выполняться в пределах доступного бюджета времени и не сбрасывать какие-либо кадры. Кадры отбрасываются всякий раз, когда очередь ввода звука переполняется новыми выборками (недостаточно быстро читается) или очередь вывода звука не загружается (недостаточно быстро записывается). Отброшенные кадры приводят к нежелательным артефактам в выходном аудиосигнале.
В этом примере представлена утилита для профилирования производительности выполнения алгоритма обработки аудиосигналов в MATLAB и сравнения его с доступным бюджетом времени.
Результаты в этом примере были получены на машине с процессором Intel (R) Xeon (R) с тактовой частотой 3,50 ГГц и 64 ГБ оперативной памяти. Результаты зависят от спецификаций системы.
В этом примере измеряется производительность фильтра пробок восьмого порядка, реализованного с помощью dsp.BiquadFilter.
helperAudioLoopTimerExample определяет и создает экземпляры переменных, используемых в алгоритме. Входные данные считываются из файла с помощью dsp.AudioFileReader объект, а затем поток через фильтр выемок в цикле обработки.
audioexample.AudioLoopTimer - это объект утилиты, используемый для профилирования производительности выполнения и отображения сводки результатов. Утилита использует простые команды tic/toc для регистрации синхронизации различных этапов моделирования. Время инициализации (которое требуется для создания экземпляра и настройки переменных и объектов до начала цикла моделирования) измеряется с помощью ticInit и tocInit методы. Индивидуальное время цикла моделирования измеряется с помощью ticLoop и tocLoop методы. После завершения цикла моделирования создается отчет о производительности с использованием объекта generateReport способ.
Выполнить helperAudioLoopTimerExample для выполнения моделирования и просмотра отчета о производительности:
helperAudioLoopTimerExample;

На рисунке отчета о производительности отображается гистограмма времени выполнения цикла на верхнем графике. Красная строка представляет максимально допустимое время выполнения цикла или бюджет, над которым будут отброшены выборки. Бюджет на цикл моделирования равен L/F, где L - размер входного кадра, а Fs - частота дискретизации. В этом примере L = 512, Fs = 44100 Гц, и бюджет на цикл составляет около 11,6 миллисекунд. Отчет о производительности также отображает время выполнения отдельных циклов моделирования на нижнем графике. Опять же, красная строка представляет разрешенный бюджет за цикл.
Обратите внимание, что, хотя медианное время цикла находится в пределах бюджета, максимальное время цикла превышает бюджет. Из нижнего графика видно, что бюджет превышен при самом первом прохождении цикла и что последующие прогоны цикла находятся в пределах бюджета. Относительная низкая производительность первого цикла моделирования обусловлена штрафом, понесенным при первом вызове пошагового метода на dsp.BiquadFilter и dsp.AudioFileReader объекты. Первый вызов step запускает выполнение одноразовых задач, которые не зависят от входных данных шага, таких как выделение аппаратных ресурсов и инициализация состояния. Эта проблема может быть устранена путем выполнения одноразовых задач перед циклом моделирования. Одноразовые задачи можно выполнить путем вызова setup метод на объектах моделирования на этапе инициализации. Выполнить helperAudioLoopTimerExample(true) для повторного запуска моделирования с включенной предконтурной настройкой.
helperAudioLoopTimerExample(true);

Все циклы теперь находятся в рамках бюджета. Обратите внимание, что максимальное и общее время цикла значительно сократилось по сравнению с первым отчетом о производительности за счет более высокого времени инициализации.