Измерьте уровень потоковой передачи аудио алгоритмов в реальном времени

Этот пример представляет утилиту, которая может использоваться, чтобы анализировать производительность синхронизации алгоритмов обработки сигналов, разработанных для приложений потоковой передачи в реальном времени.

Введение

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

Этот пример представляет утилиту, чтобы профилировать производительность выполнения алгоритма обработки звукового сигнала в MATLAB и сравнить его с доступным бюджетом времени.

Результаты в этом примере были получены на машине, запускающей центральный процессор Intel (R) Xeon (R) с тактовой частотой 3,50 ГГц и 64 Гбайт RAM. Результаты отличаются в зависимости от системных спецификаций.

Измерьте уровень приложения фильтра метки

В этом примере вы измеряете уровень фильтра метки восьмого порядка, реализованное использование dsp.BiquadFilter.

helperAudioLoopTimerExample задает и инстанцирует переменных, используемых в алгоритме. Вход читается из файла с помощью объекта dsp.AudioFileReader, и затем передается потоком через метку, просачиваются цикл обработки.

audioexample. AudioLoopTimer является вспомогательным объектом, используемым, чтобы профилировать производительность выполнения и отобразить сводные данные результатов. Утилита использует простые tic/toc команды, чтобы регистрировать синхронизацию различных этапов симуляции. Время инициализации (который является временем, которое требуется, чтобы инстанцировать и настроить переменные и объекты перед, цикл симуляции начинается) измеряется с помощью методов tocInit и ticInit. Отдельные времена цикла симуляции измеряются с помощью методов tocLoop и ticLoop. После того, как цикл симуляции сделан, отчет об исполнении сгенерирован с помощью метода generateReport объекта.

Выполните helperAudioLoopTimerExample, чтобы запустить симуляцию и просмотреть отчет об исполнении:

helperAudioLoopTimerExample;

Фигура отчета об исполнении отображает гистограмму времен выполнения цикла в главном графике. Красная линия представляет максимальное позволенное время выполнения цикла или бюджет, выше которого будут пропущены выборки. Бюджет на цикл симуляции равен L/Fs, где L является входным форматом кадра, и Фс является уровнем выборки. В этом примере, L = 512, Фс = 44 100 Гц и бюджет на цикл приблизительно 11,6 миллисекунд. Отчет об исполнении также отображает время выполнения отдельных циклов симуляции в нижнем графике. Снова, красная линия представляет позволенный бюджет на цикл.

Заметьте, что несмотря на то, что среднее время цикла хорошо в пределах бюджета, максимальное время цикла превышает бюджет. Из нижнего графика очевидно, что бюджет превышен на самой первой передаче цикла, и что последующие выполнения цикла в пределах бюджета. Относительная медленная производительность первого цикла симуляции происходит из-за штрафа, подвергся в первый раз, когда метод шага называется на объектах dsp.AudioFileReader и dsp.BiquadFilter. Первый вызов step инициировал выполнение одноразовых задач, которые не зависят от входных параметров, чтобы продвинуться, такие как выделение аппаратного ресурса и инициализация состояния. Эта проблема может быть облегчена путем выполнения одноразовых задач перед циклом симуляции. Можно выполнить одноразовые задачи путем вызова метода setup на объектах симуляции на этапе инициализации. Выполните helperAudioLoopTimerExample(true), чтобы повторно выполнить симуляцию с включенной настройкой перед циклом.

helperAudioLoopTimerExample(true);

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