exponenta event banner

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

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

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

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

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

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

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

Конфигурация

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

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

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

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

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

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

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

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

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

Конфигурация

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

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

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

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

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

Синхронизация звука с устройством

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

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

Конфигурация

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

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

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

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

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

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

Сбросы сигнала

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Увеличьте частоту выборки.

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

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

См. также

| | | | | | | | | |

Связанные темы