Tengo una aplicación en la que recibiré una transmisión de audio, como si usara auriculares, en mi procesador. Me gustaría ejecutar FFT y varios algoritmos DSP en el audio muestreado y luego escupir 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 usar el conjunto de instrucciones de ensamblaje THUMB.
¿Cómo haría esto sin perder nada del audio transmitido?
FFT necesita muestrear al menos el doble de la frecuencia de su señal y no debería introducir ninguna pérdida. La pérdida se introduce en la compresión o codificación. Su entrada y salida deben poder coincidir con la frecuencia, la amplitud y las 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 seguirlos, con un retraso mínimo. Como fracciones de segundo, para estar sincronizado con cualquier otra cosa (video, otro audio o instrumentos en vivo).
Debe hacer 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 necesita repensar o recortar.
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 procesar general no satisfará estas condiciones.
Si lo tomas muestras a razón de a partir de dónde es el ancho de banda entonces las funciones
son indistinguibles unos de otros usando solo las muestras tomadas a veces ya que 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 asume un número infinito de puntos de muestra.
Las cosas empeoran un poco una vez que se involucra FFT. FFT reproduce la señal como una suma finita mediante el uso de un conjunto finito de frecuencias determinadas por su frecuencia de muestreo. Si tiene una señal de audio sin procesar, tiene un conjunto posiblemente infinito de frecuencias que se reciben a pesar de estar limitado por .
En un lenguaje más matemáticamente correcto, el espacio de funciones con ancho de banda es un espacio vectorial de dimensión infinita. Una vez que fija una frecuencia de muestreo, el espacio vectorial de funciones construido a través de FFT es de dimensión finita y, por lo tanto, no todas las señales se pueden recuperar exactamente a través de FFT.
Cualquier muestreo digital implica filtrado de paso bajo (y/o aliasing potencial) y cuantificació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 ancho de banda, piso de ruido y retardo, como iguales a sus criterios de "sin pérdida", o tendrá la imposibilidad de usar cualquier chip de procesador.
Si realiza o no una FFT para el análisis es irrelevante si omite la transmisión de datos directamente a la salida y los envía a la FFT.
Una FFT es un proceso basado en bloques, por lo que no se realiza "entre muestras", sino en bloques completos, búferes o conjuntos de muestras, lo que agrega latencia a cualquier análisis FFT (por ejemplo, esperar a que se llene un búfer lo suficientemente grande antes de comenzar) .
Se debe realizar una FFT de longitud N utilizando la aritmética del procesador (registros de acumulación) que sea al menos log2(N) bits mayor que el tamaño de bits de sus muestras, o la propia FFT introducirá (adicionales) errores de truncamiento, redondeo o recorte.
scott seidman
chico funky
scott seidman
chico funky
algunosEE
chico funky
AndrejaKo
I would like to run FFT and various DSP algorithms on the sampled audio and then spit the audio back out as if the device wasn't there.
Esto es imposible. La señal muestreada debe cuantificarse y esto introducirá una pérdida irrecuperable. El ADC es de 16 bits, lo que debería ser suficiente para un audio de buen sonido, pero está lejos de ser sin pérdidas. Además, el DAC es de 12 bits, por lo que introducirá aún más distorsión en la salida. El DAC de 12 bits es suficiente para un audio que suena bien, pero está lejos del nivel "como si el dispositivo no estuviera allí".