Преобразование частоты дискретизации

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

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

Ресемплеры используются в нескольких местах в Android. Например, MP3-файл может быть закодирован с частотой дискретизации 44,1 кГц, но его нужно воспроизвести на устройстве Android, которое поддерживает аудио с частотой 48 кГц. В этом случае ресемплер будет использоваться для повышения частоты дискретизации выходного аудио MP3 с 44,1 кГц до 48 кГц, используемой на устройстве Android.

Характеристики ресемплера можно выразить с помощью показателей, в том числе:

  • степень сохранения общей амплитуды сигнала;
  • степень сохранения полосы частот сигнала с учетом ограничений частоты дискретизации приемника;
  • общая задержка при использовании ресемплера;
  • постоянная фаза и групповая задержка относительно частоты;
  • вычислительная сложность, выраженная в циклах ЦП или энергопотреблении;
  • допустимые соотношения частот дискретизации источника и приемника
  • возможность динамически менять коэффициенты частоты дискретизации;
  • какие форматы цифровых аудиофайлов поддерживаются;

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

В Android есть несколько ресэмплеров, поэтому можно выбрать подходящий вариант в зависимости от приложения и нагрузки. Доступные ресемплеры описаны в разделе Реализация ресемплера.

Реализации ресемплера

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

  • линейный;
  • кубический;
  • Sinc с исходными коэффициентами
  • sinc с пересмотренными коэффициентами

Как правило, ресемплеры sinc лучше подходят для воспроизведения музыки высокого качества, а остальные ресемплеры следует использовать в случаях, когда качество менее важно (например, для звуков нажатия клавиш).

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