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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

тест Ларсена

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

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

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

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

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

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

  • Приложение обратной связи Dr. Rick O'Rang — это приложение для 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 стандартных отклонения.