Audio I/O: буферизация, задержка и пропускная способность

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

Это руководство описывает, как MATLAB® программное обеспечение реализует обработку потока в реальном времени. В руководстве представлена ключевая терминология и основные методы оптимизации алгоритма обработки потока. Более подробное техническое описание и концепции см. в документации для объектов audio Ввод-вывод System, используемых в этом руководстве.

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

Входной аудиопоток

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

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

Строение

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

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

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

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

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

  4. The 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. The audioPlayerRecorder объект возвращает полученный аудиосигнал в окружение MATLAB для обработки. Одновременно звук, который будет воспроизводиться, задается как аргумент audioPlayerRecorder для воспроизведения в следующем цикле ввода-вывода.

Терминология и методы оптимизации эффективности

Падения сигнала

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

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

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

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

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

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

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

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

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

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

Время ожидания

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

  • Вход сигнала измеряется как задержка времени между временем, когда аудио входит в звуковую карту, и временем, когда система координат выводится каскадом обработки.

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

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

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

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

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

Учебное руководство по измерению задержки округления вашей системы смотрите в Измерение Задержки Звука.

См. также

| | | | | | | | | |

Похожие темы