Аудио ввод-вывод: Буферизация, Задержка и Пропускная способность

Audio Toolbox™ оптимизирован для потоковой обработки в реальном времени. Ее Системные объекты ввода и вывода эффективны, низкая задержка, и они управляют всеми необходимыми параметрами так, чтобы можно было обменять между пропускной способностью и задержкой.

Этот пример описывает, как MATLAB реализует потоковую обработку в реальном времени. Пример представляет ключевую терминологию и основные методы для оптимизации вашего обрабатывающего поток алгоритма. Для более подробных технических описаний и концепций, см. документацию для аудио Системных объектов ввода-вывода, используемых в этом примере.

Концепции, представленные в этом примере, описаны в терминах Системных объектов в среде MATLAB. Те же концепции могут быть применены к соответствующим блокам в среде Simulink®.

Введите аудиопоток

Чтобы получить аудиопоток из файла, используйте dsp.AudioFileReader Система object™. Чтобы получить аудиопоток от устройства, используйте audioDeviceReader Системный объект.

Эта схема и описание, которое следует, указывают на поток данных при получении сигнала моноканала с audioDeviceReader Системный объект.

Настройка

  • Свойства вашего audioDeviceReader задайте драйвер, устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между входными каналами и столбцами вашего устройства выход от вашего audioDeviceReader объект. Ваш объект передает эти спецификации к драйверу однажды в setup.

Цикл обработки в режиме реального времени

  1. Микрофон берет звук и отправляет непрерывный электрический сигнал в вашу звуковую карту.

  2. Звуковая карта выполняет аналого-цифровое преобразование на уровне частоты дискретизации, buffer size и битовой глубины, заданной во время настройки.

  3. Аналого-цифровой конвертер пишет аудиосэмплы в буфер звуковой карты. Если буфер полон, новые выборки пропущены. Эти выборки упоминаются как overruns.

  4. audioDeviceReader использует драйвер, чтобы вытянуть самую старую систему координат от буфера звуковой карты итеративно.

Выведите аудиопоток

Чтобы отправить аудиопоток в файл, используйте dsp.AudioFileWriter Системный объект. Чтобы отправить аудиопоток в устройство, используйте audioDeviceWriter Системный объект.

Эта схема и описание, которое следует, указывают на поток данных при проигрывании сигнала моноканала с audioDeviceWriter Системный объект.

Настройка

  • Свойства вашего audioDeviceWriter задайте драйвер, устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между выходным входом каналов и столбцов вашего устройства к вашему audioDeviceWriter объект. Ваш объект передает эти спецификации к драйверу однажды в setup.

Цикл обработки в режиме реального времени

  1. Этап обработки передает кадр переменной длины до audioDeviceWriter Системный объект.

  2. audioDeviceWriter передает кадр к буферу звуковой карты.

  3. Звуковая карта вытягивает самую старую систему координат от буфера и выполняет цифро-аналоговое преобразование. Звуковая карта отправляет аналоговый фрагмент динамику. Если буфер пуст, когда звуковая карта пытается вытянуть от него, звуковая карта выводит область тишины. Это упоминается как underrun.

Синхронизируйте аудио с и от устройства

Чтобы одновременно читать из и записать в одно аудио устройство, используют audioPlayerRecorder Системный объект.

Эта схема и описание, которое следует, указывают на поток данных при проигрывании и записи сигналов моноканала с audioPlayerRecorder Системный объект.

Настройка

  • Свойства вашего audioPlayerRecorder задайте устройство (звуковая карта), частота дискретизации, битовая глубина, buffer size и отображение канала между вашим устройством и объектом. Ваш объект передает эти спецификации к драйверу однажды в setup.

Цикл обработки в режиме реального времени

  1. Микрофон берет звук и отправляет непрерывный электрический сигнал в вашу звуковую карту. Одновременно, докладчик проигрывает аналоговый фрагмент, полученный от звуковой карты.

  2. Звуковая карта выполняет аналого-цифровое преобразование полученного звукового сигнала и пишет цифровой фрагмент во входной буфер. Если входной буфер полон, новые выборки пропущены. Одновременно, звуковая карта вытягивает самую старую систему координат от буфера вывода и выполняет цифро-аналоговое преобразование следующего аудио фрагмента, который будет проигрываться. Если буфер вывода пуст, когда звуковая карта пытается получить данные, звуковая карта выводит область тишины.

  3. audioPlayerRecorder объект возвращает полученный звуковой сигнал в среду MATLAB для обработки. Одновременно, аудио, которое будет проигрываться, задано в качестве аргумента audioPlayerRecorder для воспроизведения в следующем цикле ввода-вывода.

Терминология и методы, чтобы оптимизировать производительность

Отбрасывания сигнала

  • Underrun относится к тишине выходного сигнала. Тишина выходного сигнала происходит, если буфер устройства пуст, когда время для цифро-аналогового преобразования. Это заканчивается, когда цикл обработки в MATLAB не предоставляет выборки на уровне требования звуковой карты. Количество демонстрационной недогрузки возвращено, когда вы вызываете свой audioPlayerRecorder или audioDeviceWriter объект.

  • Overrun относится к отбрасываниям входного сигнала. Отбрасывания входного сигнала происходят, когда этап обработки не идет в ногу с приобретением выборок. Количество превышенных выборок возвращено, когда вы вызываете свой audioPlayerRecorder или audioDeviceReader объект.

Если вы сталкиваетесь превышенный или недогрузка, попытайтесь улучшить свою систему ввода-вывода одним или несколькими следующих способов:

  1. Идентифицируйте, когда переполнение или недогрузка произойдут. Если это происходит в первых нескольких итерациях, считайте вызов setup на ваших Системных объектах перед циклом, где обработка в режиме реального времени требуется. Можно также запустить систему ввода-вывода с фиктивными данными для нескольких систем координат прежде, чем запустить действительную обработку. Для получения дополнительной информации смотрите, Измеряют Уровень Потоковой передачи Аудио Алгоритмов В реальном времени.

  2. Если вы используете драйвер DirectSound на платформе Windows®, рассматриваете переключение на WASAPI или драйвер ASIO™. Драйверы ASIO имеют наименее служебное. Если вы используете драйвер ASIO, убедитесь, что совпадали с форматом кадра в MATLAB к buffer size ASIO. Можно использовать asiosettings открыть настройки ASIO пользовательский интерфейс из MATLAB.

  3. Если можно позволить себе добавить больше задержки в приложение, рассмотрите увеличение buffer size объекта. По умолчанию buffer size является форматом кадра данных, обработанных аудио объектом.

  4. Если можно позволить себе уменьшить разрешение сигнала, рассмотрите уменьшение частоты дискретизации.

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

  6. Чтобы максимизировать производительность, удалите весь графический вывод и визуализацию от вашего цикла в реальном времени. Если вы требуете, чтобы визуализация обновилась в вашем цикле обработки, используйте осциллограф DSP System Toolbox™, такой как dsp.TimeScope, dsp.SpectrumAnalyzer, или dsp.ArrayPlot. Следуйте рекомендациям, перечисленным в точке 1, чтобы установить и предварительно запустить ваши осциллографы. Если вы требуете индивидуального изображения или обрабатываете коллбэки в цикле, используйте drawnow команда и задает ограниченную частоту обновления, чтобы оптимизировать вашу очередь событий.

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

Задержка

  • Output latency измеряется как задержка между временем генерации аудио системы координат в MATLAB и время, когда аудио слышат через динамик.

  • Input latency измеряется как задержка между временем, когда аудио вводит звуковую карту и время, когда система координат выводится этапом обработки.

Если свойства и формат кадра остаются сопоставимыми, отношение input latency к output latency сопоставимо между вызовами audioPlayerRecorder объект.

Чтобы минимизировать задержку, вы можете:

  1. Оптимизируйте этап обработки. Если ваш этап обработки достиг пика алгоритмически, компилирование вашего кода MATLAB в код С с помощью MATLAB Coder может привести к более быстрому выполнению.

  2. Увеличьте частоту дискретизации.

  3. Уменьшите формат кадра.

Для примера при измерении задержки туда и обратно вашей системы смотрите Задержку Аудио Меры.

Смотрите также

| | | | | | | | | |

Похожие темы