Измерение задержки звука

На этой странице описаны распространенные методы измерения входной и выходной задержки.

Измерение задержки вывода

Существует несколько методов измерения выходной задержки с разной степенью точности и простоты использования, описанных ниже. Также см. Схема тестирования для примера тестовой среды.

Проверка светодиодов и осциллографа

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

Если вы не можете установить светодиод ни на серийное, ни на прототипное устройство, попробуйте следующие обходные пути:

  • Используйте контакт ввода-вывода общего назначения (GPIO) для той же цели.
  • Используйте JTAG или другой порт отладки.
  • Используйте подсветку экрана. Это может быть рискованно, так как подсветка может иметь незначительную задержку и может способствовать неточным показаниям задержки.

Чтобы провести этот тест:

  1. Запустите приложение, которое периодически мигает светодиодом одновременно с выводом звука.

    Примечание. Чтобы получить полезные результаты, крайне важно использовать правильные API-интерфейсы в тестовом приложении, чтобы вы использовали быстрый путь вывода звука. См. « Дизайн для уменьшения задержки» для фона.

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

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

Измерение задержки туда и обратно

Задержка приема-передачи представляет собой сумму задержки вывода и задержки ввода.

тест Ларсена

Одним из самых простых тестов задержки является тест звуковой обратной связи (эффект Ларсена). Это обеспечивает грубую меру комбинированной задержки вывода и ввода путем синхронизации контура импульсной характеристики. Этот тест сам по себе не очень полезен для подробного анализа из-за характера теста, но он может быть полезен для калибровки других тестов и для установления верхней границы.

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

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

Чтобы провести этот тест:

  1. Запустите приложение, которое записывает звук с микрофона и сразу же воспроизводит записанные данные через динамик.
  2. Создайте внешний звук, например постукивание карандашом по микрофону. Этот шум создает петлю обратной связи. В качестве альтернативы можно ввести импульс в контур с помощью программного обеспечения.
  3. Измерьте время между импульсами обратной связи, чтобы получить сумму выходной задержки, входной задержки и накладных расходов приложения.

Вот некоторые ресурсы для получения приложения для теста Ларсена:

  • Приложение Dr. Rick O'Rang loopback — это Android-приложение для тестирования звуковой обратной связи. Вы можете загрузить приложение из Google Play или получить исходный код с GitHub .
  • Мы также опубликовали пример реализации на slesTestFeedback.cpp . Это приложение командной строки, созданное с использованием среды сборки платформы; однако должно быть просто адаптировать код для других сред. Вам также понадобится неблокирующий код FIFO, расположенный в библиотеке audio_utils .

Аудио петлевой ключ

Шлейфовый звуковой ключ Dr. Rick O'Rang удобен для измерения задержки в оба конца через разъем гарнитуры. Изображение ниже демонстрирует результат однократной подачи импульса в петлю, а затем позволяет петле обратной связи колебаться. Период колебаний - это задержка приема-передачи. Конкретное устройство, версия программного обеспечения и условия тестирования здесь не указаны. Показанные результаты не следует экстраполировать.

круговое измерение

Рис. 1. Измерение кругового пути

Возможно, вам придется отключить USB-кабель, чтобы уменьшить шум, и отрегулировать уровень громкости, чтобы получить стабильные колебания.

Измерение задержки ввода

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

Один из подходов заключается в том, чтобы сначала определить выходную задержку с помощью светодиода и метода осциллографа, а затем использовать тест звуковой обратной связи (Ларсен) для определения суммы выходной и входной задержек. Разница между этими двумя измерениями заключается во входной задержке.

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

Уменьшение задержки

Чтобы добиться низкой задержки звука, уделите особое внимание во всей системе планированию, обработке прерываний, управлению питанием и разработке драйверов устройств. Ваша цель — предотвратить блокировку аудиопотока SCHED_FIFO какой-либо частью платформы более чем на пару миллисекунд. Применяя такой систематический подход, вы можете уменьшить задержку звука и получить дополнительное преимущество в виде более предсказуемой производительности в целом.

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

При тестировании на опустошение:

  • Настройте любой DSP после процессора приложения, чтобы он добавлял минимальную задержку.
  • Запустите тесты в различных условиях, таких как включенный или выключенный экран, подключенный или отключенный USB, включенный или выключенный Wi-Fi, включенный или выключенный Bluetooth, а также включенные или выключенные радиотелефония и передача данных.
  • Выберите относительно тихую музыку, с которой вы хорошо знакомы и в которой легко услышать проигрыш.
  • Используйте проводные наушники для дополнительной чувствительности.
  • Делайте себе перерывы, чтобы не испытывать «ушной усталости».

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

Инструменты

systrace — отличный инструмент общего назначения для диагностики сбоев производительности на уровне системы.

Выходные dumpsys media.audio_flinger также содержат полезный раздел под названием «простая статистика перемещения». В нем содержится сводка изменчивости прошедшего времени для каждого аудиомикса и цикла ввода-вывода. В идеале все измерения времени должны быть примерно равны среднему или номинальному времени цикла. Если вы видите очень низкий минимум или высокий максимум, это указывает на проблему, вероятно, большую задержку планирования или время отключения прерывания. Хвостовая часть выходных данных особенно полезна, поскольку она подчеркивает изменчивость за пределами +/- 3 стандартных отклонения.