Conversione della frequenza di campionamento

Questo articolo descrive la conversione della frequenza di campionamento, nota anche come ricocampionamento, in Android. Per la terminologia relativa alla conversione della frequenza di campionamento, consulta Terminologia.

La conversione della frequenza di campionamento è il processo di modifica di uno stream di campioni discreti da una frequenza di campionamento a un altro stream a una frequenza di campionamento diversa. Un convertitore di frequenza di campionamento o resampler è un modulo che implementa la conversione della frequenza di campionamento. Rispetto al ricampionatore, lo stream originale è chiamato segnale di origine e lo stream riscampionato è chiamato segnale di destinazione.

I ricalcolatori vengono utilizzati in diversi punti di Android. Ad esempio, un file MP3 può essere codificato con una frequenza di campionamento di 44,1 kHz, ma deve essere riprodotto su un dispositivo Android che supporta internamente l'audio a 48 kHz. In questo caso, verrà utilizzato un ricampionatore per eseguire l'upsampling dell'audio in uscita MP3 dalla frequenza di campionamento di origine di 44,1 kHz a una frequenza di campionamento di destinazione di 48 kHz utilizzata all'interno del dispositivo Android.

Le caratteristiche di un ricampionatore possono essere espresse utilizzando metriche, tra cui:

  • grado di conservazione dell'ampiezza complessiva del segnale
  • grado di conservazione della larghezza di banda di frequenza del segnale, in base alle limitazioni della frequenza di campionamento del sink
  • latenza complessiva tramite il ricalcolatore di frequenza
  • fase e ritardo di gruppo coerenti rispetto alla frequenza
  • complessità computazionale, espressa in cicli CPU o assorbimento di potenza
  • Rapporti consentiti tra le frequenze di campionamento di origine e di destinazione
  • Possibilità di modificare dinamicamente i rapporti di frequenza di campionamento
  • quali formati di sample audio digitale sono supportati

Il riassamatore ideale dovrebbe preservare esattamente l'ampiezza e la larghezza di banda di frequenza del segnale di origine (in base alle limitazioni della frequenza di campionamento del destinatario), avere un ritardo minimo e costante, avere una complessità computazionale minima, consentire rapporti di conversione arbitrari e dinamici e supportare tutti i formati di sample audio digitale comuni. In pratica, non esistono riesampleri ideali, in quanto quelli effettivi sono un compromesso tra queste caratteristiche. Ad esempio, gli obiettivi di qualità ideale sono in conflitto con ritardi brevi e bassa complessità.

Android include una serie di ricreatori di sample audio, in modo da poter fare compromessi appropriati a seconda del caso d'uso e del carico dell'applicazione. I rie campionatori disponibili sono descritti in Implementazione del rie campionatore.

Implementazioni di resampler

Le implementazioni di ricalcolo disponibili cambiano di frequente e possono essere personalizzate dagli OEM. I ricalcolatori predefiniti, in ordine decrescente di distorsione del segnale e in ordine crescente di complessità computazionale, includono:

  • lineare
  • cubico
  • sinc con i coefficienti originali
  • sinc con i coefficienti rivisti

In generale, i ricalcoli sinc sono più adatti per la riproduzione di musica di qualità superiore, mentre gli altri ricalcoli devono essere riservati ai casi in cui la qualità è meno importante (ad esempio "clic sui tasti" o simili).

L'implementazione specifica del ricampionatore selezionata dipende dal caso d'uso, dal carico e dal valore della proprietà di sistemaaf.resampler.quality. Per maggiori dettagli, consulta il codice sorgente del risampler audio in AudioFlinger.