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

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

Введение

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

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

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

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

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

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

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

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

helperAudioLoopTimerExample;

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

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

helperAudioLoopTimerExample(true);

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