Измерьте задержку звука

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

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

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

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

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

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

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

Для проведения этого теста:

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

    Примечание: Чтобы получить полезные результаты, крайне важно использовать правильные API в тестовом приложении, чтобы вы тренировали быстрый путь вывода звука. См. Design for Reduced Latency for Background.

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

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

Измерение задержки в обоих направлениях

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

тест Ларсена

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

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

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

Для проведения этого теста:

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

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

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

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

Аудио-адаптер Dr. Rick O'Rang loopback удобен для измерения задержки в обоих направлениях через разъем гарнитуры. На рисунке ниже показан результат однократной подачи импульса в контур с последующим колебанием контура обратной связи. Период колебаний — это задержка в обоих направлениях. Конкретное устройство, версия программного обеспечения и условия тестирования здесь не указаны. Приведенные результаты не следует экстраполировать.

измерение в обоих направлениях

Рисунок 1. Измерение в обоих направлениях

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

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

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

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

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

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

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

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

При тестировании на недогрузку:

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

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

Инструменты

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

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