Этот пример представляет утилиту, которая может использоваться, чтобы анализировать производительность синхронизации алгоритмов обработки сигналов, разработанных для приложений потоковой передачи в реальном времени.
Способность моделировать алгоритм обработки звукового сигнала в режиме реального времени с помощью 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);
Все выполнения цикла теперь в пределах бюджета. Заметьте, что максимальные и общие времена цикла решительно уменьшались по сравнению с отчетом премьеры, за счет более высокого времени инициализации.