Confusión con FFT de resolución ADC y herramientas de programación

0

Tengo un ADC de 16 bits firmado, lo que significa que asigna un rango de -10 V a +10 V a 16 bits. Entonces el voltaje máximo + 10V es 2 ^ 15-1 = 32767; cero es 0; y -10V es -2 ^ 15 = -32768.

Mi confusión es que cuando realizo la adquisición de datos con dicho hardware de 16 bits y hago la FFT con MATLAB o la herramienta Python, no sé cómo el programa conoce la resolución de los datos (como 16 bits). Y si creo mi propia matriz en MATLAB codificando cuál sería la resolución de bits cuando haga la FFT.

No sé si podría articular donde estoy atascado. Básicamente, como he escrito antes, imagino que tienes un ADC de 16 bits firmado, lo que significa que asigna un rango de -10 V a +10 V a 16 bits. Entonces el voltaje máximo + 10V es 2 ^ 15-1 = 32767; cero es 0; y -10V es -2 ^ 15 = -32768. E imagine que tiene un archivo binario lleno de muestras de 16 bits grabadas por este hardware ADC. Ahora, si realiza FFT en MATLAB o Python, estas herramientas leerán un archivo de 16 bits y convertirán estos bits sin signo a voltaje y realizarán FFT.

Pero imagina que quieres hacer / imitar lo mismo con la codificación, no utilizando FFT. ¿Cómo harías tal matriz en MATLAB o Python?

Aquí hay un ejemplo: Digamos que quiero crear / trazar una sinusoide en MATLAB o Python donde puedo imitar exactamente ese ADC de 16 bits que muestrea una entrada sinusoidal de 1V 100Hz durante 1 segundo, que se muestrea con una frecuencia de muestreo de 512Hz. Al final, quiero obtener el mismo gráfico de FFT que obtendría después de un muestreo ADC real. ¿Cómo se puede obtener ese tipo de matriz? ¿Cómo conoce la función FFT la resolución del ADC cuando calcula la FFT?

    
pregunta user164567

1 respuesta

0
  

Digamos que quiero crear / trazar una sinusoide en MATLAB o Python donde puedo imitar exactamente ese ADC de 16 bits que muestrea una entrada de sinusoide de 1V 100Hz durante 1 segundo, que se muestrea con una frecuencia de muestreo de 512Hz.

Primero, necesitas escribir algo de código para incrementar la fase de un ángulo. Quieres crear 512 puntos. Si la frecuencia fuera de 1 Hz, barrería a través de 2pi radianes en el transcurso de 512 muestras, pero su frecuencia es de 100 Hz, por lo que debería incrementar 100 veces más rápido.

Entonces necesitas la amplitud correcta. Dice 1v (supongamos que quiere decir pico, si no es correcto en consecuencia). La escala completa en su ADC es 10v, por lo que desea una décima parte de eso. La salida a escala completa de su ADC es 32767, por lo que desea una décima parte de eso. El valor máximo de la función seno es uno. Básicamente, multiplique la salida de su función seno (evaluada en los ángulos calculados anteriormente) por 32767/10 y luego redondee.

Por supuesto, esta señal falsa estará limpia de forma poco realista; para un modelo más realista podría agregar algo de ruido, etc.

    
respondido por el Chris Stratton

Lea otras preguntas en las etiquetas