Konwersja częstotliwości próbkowania

Z tego artykułu dowiesz się, jak w Androidzie przekształcać częstotliwość próbkowania, czyli przepróbkowywać. Terminologia związana z konwersją częstotliwości próbkowania – Terminologia.

Konwersja częstotliwości próbkowania to proces zmiany strumienia dyskretnych próbek z jednej częstotliwości próbkowania na inną. Konwerter częstotliwości próbkowania (resampler) to moduł, który implementuje konwersję częstotliwości próbkowania. W przypadku resamplera oryginalny strumień jest nazywany sygnałem źródłowym, a strumień po próbkowaniu – sygnałem docelowym.

Resamplery są używane w kilku miejscach w Androidzie. Plik MP3 może na przykład być zakodowany z częstotliwością próbkowania 44,1 kHz, ale musi być odtwarzany na urządzeniu z Androidem, które obsługuje dźwięk 48 kHz. W takim przypadku do przesamplingu wyjściowego dźwięku MP3 z częstotliwością próbkowania źródła 44, 1 kHz na potrzeby urządzenia z Androidem używana jest funkcja resamplingu.

Cechy próbkowania można wyrazić za pomocą wskaźników, takich jak:

  • stopień zachowania ogólnej amplitudy sygnału;
  • stopień zachowania pasma częstotliwości sygnału, z zastrzeżeniem ograniczeń związanych z częstotliwością próbkowania odbiornika;
  • ogólny czas oczekiwania na próbkowaniu,
  • spójny fazy i opóźnienia grupy w odniesieniu do częstotliwości;
  • złożoność obliczeniowa wyrażona w cyklach procesora lub poborze mocy;
  • dozwolone współczynniki częstotliwości próbkowania źródła i miejsca docelowego.
  • możliwość dynamicznego zmieniania współczynników częstotliwości próbkowania;
  • które formaty próbek cyfrowego dźwięku są obsługiwane.

Idealny resampler powinien dokładnie zachować amplitudę sygnału źródłowego i pasmo częstotliwości (z zastrzeżeniem ograniczeń odbiornika i częstotliwości próbkowania), mieć minimalne i spójne opóźnienie, minimalną złożoność obliczeniową, umożliwiać dowolne i dynamiczne współczynniki konwersji oraz obsługiwać wszystkie typowe formaty próbkowania dźwięku cyfrowego. W praktyce idealne algorytmy interpolacji nie istnieją, ponieważ rzeczywiste algorytmy są kompromisem między tymi cechami. Na przykład cele dotyczące idealnej jakości są sprzeczne z krótkim opóźnieniem i niską złożonością.

Android zawiera różne przetworniki próbkowania dźwięku, dzięki czemu można dokonać odpowiednich kompromisów w zależności od zastosowania i obciążenia aplikacji. Informacje o dostępnych narzędziach do resamplingu znajdziesz w artykule Implementacja narzędzia do resamplingu.

Implementacje resamplera

Dostępne implementacje resamplera często się zmieniają i mogą być dostosowywane przez producentów OEM. Domyślne przetworniki próbkowania w porządku malejącym zniekształcenia sygnału i rosnącej złożoności obliczeniowej to:

  • jednostajne
  • sześcienny
  • sinc z oryginalnymi współczynnikami
  • sinc z poprawionymi współczynnikami

Zasadniczo resamplery typu sinc są bardziej odpowiednie do odtwarzania muzyki o wyższej jakości, a inne resamplery powinny być zarezerwowane na potrzeby odtwarzania, w których przypadku jakość nie jest tak ważna (np. kliknięcia klawiszy lub podobne).

Wybrana implementacja resamplera zależy od przypadku użycia, obciążenia i wartości właściwości systemowej af.resampler.quality. Szczegółowe informacje znajdziesz w źródłowym kodzie resamplera audio w AudioFlinger.