Conversión de frecuencia de muestreo

Este artículo describe la conversión de frecuencia de muestreo, también conocida como remuestreo , dentro de Android. Para ver la terminología relacionada con la conversión de frecuencia de muestreo, consulte Terminología .

La conversión de frecuencia de muestreo es el proceso de cambiar un flujo de muestras discretas de una frecuencia de muestreo a otro flujo a una frecuencia de muestreo diferente. Un convertidor de frecuencia de muestreo, o remuestreador, es un módulo que implementa la conversión de frecuencia de muestreo. Con respecto al remuestreador, el flujo original se denomina señal fuente y el flujo remuestreado se denomina señal receptor.

Los remuestreadores se utilizan en varios lugares de Android. Por ejemplo, un archivo MP3 puede codificarse a una frecuencia de muestreo de 44,1 kHz, pero debe reproducirse en un dispositivo Android que admita audio de 48 kHz internamente. En ese caso, se usaría un remuestreador para aumentar la muestra del audio de salida MP3 desde una frecuencia de muestreo de fuente de 44,1 kHz a una frecuencia de muestreo de sumidero de 48 kHz utilizada en el dispositivo Android.

Las características de un remuestreador se pueden expresar mediante métricas, que incluyen:

  • grado de conservación de la amplitud global de la señal
  • grado de preservación del ancho de banda de frecuencia de la señal, sujeto a las limitaciones de la frecuencia de muestreo del sumidero
  • latencia general a través del remuestreador
  • Retardo constante de fase y grupo con respecto a la frecuencia.
  • complejidad computacional, expresada en ciclos de CPU o consumo de energía
  • proporciones permitidas de frecuencias de muestreo de fuente y sumidero
  • capacidad de cambiar dinámicamente las relaciones de frecuencia de muestreo
  • qué formatos de muestra de audio digital son compatibles

El remuestreador ideal preservaría exactamente la amplitud de la señal de origen y el ancho de banda de frecuencia (sujeto a las limitaciones de la frecuencia de muestreo del sumidero), tendría un retraso mínimo y constante, tendría una complejidad computacional mínima, permitiría relaciones de conversión arbitrarias y dinámicas y admitiría todos los formatos de muestra de audio digital comunes. . En la práctica, los remuestreadores ideales no existen, ya que los remuestreadores reales son un compromiso entre estas características. Por ejemplo, las metas de calidad ideal entran en conflicto con demoras cortas y complejidad baja.

Android incluye una variedad de remuestreadores de audio, de modo que se pueden hacer los compromisos apropiados según el caso de uso y la carga de la aplicación. Los remuestreadores disponibles se explican en Implementación de remuestreadores.

Implementaciones de remuestreador

Las implementaciones de remuestreador disponibles cambian con frecuencia y los OEM pueden personalizarlas. Los remuestreadores predeterminados, en orden descendente de distorsión de la señal y ascendente de complejidad computacional, incluyen:

  • lineal
  • cúbico
  • sinc con coeficientes originales
  • sinc con coeficientes revisados

En general, los remuestreadores sinc son más apropiados para la reproducción de música de mayor calidad, y los otros remuestreadores deben reservarse para casos en los que la calidad es menos importante (un ejemplo podría ser "clics de teclas" o similar).

La implementación específica del remuestreador seleccionada depende del caso de uso, la carga y el valor de la propiedad del sistema af.resampler.quality . Para obtener más información, consulte el código fuente del remuestreador de audio en AudioFlinger .