FFT sin pérdida en datos de audio

1

Tengo una aplicación en la que recibiré un flujo de audio, como si usara auriculares, en mi procesador. Me gustaría ejecutar FFT y varios algoritmos DSP en el audio muestreado y luego volver a emitir el audio como si el dispositivo no estuviera allí. Básicamente haciendo DSP en tiempo real entre muestras, supongo. El procesador que estoy usando es el MKL26Z128xxx4, montado en la placa de desarrollo FRDM-KL26Z. Tiene un solo núcleo ARM Cortex M0 + y está programado en C / C ++ y puede utilizar el conjunto de instrucciones de ensamblaje THUMB.

¿Cómo haría esto sin perder nada del audio transmitido?

    
pregunta Funkyguy

3 respuestas

3

FFT necesita muestrear al menos el doble de la frecuencia de su señal, y no debe introducir ninguna pérdida. La pérdida se introduce en la compresión o codificación. Sus entradas y salidas deben poder coincidir con la frecuencia, amplitud y frecuencias de la señal que está muestreando.

Su mayor desafío es procesar los algoritmos DSP en tiempo real, lo que depende de los algoritmos que use, cuántos y cómo su procesador puede mantenerse al día, con un retraso mínimo. Como fracciones de segundo, para estar sincronizado con cualquier otra cosa (video, otro audio o instrumentos en vivo).

Debe realizar algunos cálculos sobre lo que necesita, a través de pruebas, antes de poder averiguar si su plataforma es lo suficientemente buena, o dónde debe replantearse o recortar información.

    
respondido por el Passerby
3

Desafortunadamente, tendrá que aceptar pérdidas en su señal si intenta reconstruirlas a partir de las muestras. A menos que haga ciertas suposiciones sólidas sobre la señal de audio, el teorema de muestreo de Nyquist-Shannon no ayuda. Una señal de audio sin formato general no satisfará estas condiciones.

Si toma \ $ K \ $ muestras a una tasa de \ $ \ frac {1} {2B} \ $ a partir de \ $ 1 / 2B \ $ donde \ $ B \ $ es el ancho de banda, entonces las funciones $$ \ frac {\ sin (2 \ pi t B)} {2 t B} $$ y $$ \ frac {\ sin (2 \ pi t B - 2 (K + 1) \ pi)} {2 t B - 2 (K + 1)} $$

no se pueden distinguir entre sí utilizando solo las muestras tomadas a veces \ $ \ frac {1} {2B}, \ frac {2} {2B}, ..., \ frac {K} {2B} \ $ as Ambas funciones se evalúan a cero en estos puntos. La reproducción exacta de una señal del teorema de muestreo de Nyquist-Shannon supone un número infinito de puntos de muestra.

Las cosas empeoran un poco cuando se trata de FFT. FFT reproduce la señal como una suma finita utilizando un conjunto finito de frecuencias determinado por su frecuencia de muestreo. Si tiene una señal de audio sin formato, es posible que reciba un conjunto infinito de frecuencias a pesar de estar limitado por \ $ B \ $.

En un lenguaje más matemáticamente correcto, el espacio de funciones con ancho de banda \ $ \ leq B \ $ es un espacio vectorial de dimensión infinita. Una vez que fija una frecuencia de muestreo, el espacio vectorial de las funciones construidas mediante FFT es de dimensión finita y, por lo tanto, no todas las señales se pueden recuperar exactamente mediante FFT.

    
respondido por el SomeEE
1

Cualquier muestreo digital involucra filtrado de paso bajo (y / o alias potencial) y cuantización. Cualquier ADC o DAC en la ruta agregará demora, tanto debido al almacenamiento en búfer, al procesamiento potencial (filtrado de ruido o aproximación sucesiva), como a las constantes de tiempo físicas y eléctricas. Por lo tanto, tendrá que especificar algunos umbrales finitos en el ancho de banda, el piso de ruido y el retardo, como iguales a sus criterios de "no pérdida", o tiene una imposibilidad de usar cualquier chip de procesador.

El hecho de que realice o no una FFT para el análisis es irrelevante si omite la transmisión de datos directamente a la salida, así como el envío a la FFT.

Una FFT es un proceso basado en bloques, por lo que no se realiza "entre muestras", sino en bloques enteros, búferes o matrices de muestras, lo que agrega latencia a cualquier análisis FFT (por ejemplo, espera que se llene un búfer lo suficientemente grande) antes de comenzar).

Se debe realizar una FFT de longitud N utilizando aritmética del procesador (registros de acumulación) que sea al menos log2 (N) bits más grande que el tamaño de bits de sus muestras, o la propia FFT introducirá (adicional) truncamiento, redondeo o errores de recorte.

    
respondido por el hotpaw2

Lea otras preguntas en las etiquetas