Analizando datos de ADC sin procesar en niveles de voltaje

2

Estoy recopilando datos de prueba de un solo tono en ADC12J4000EVM utilizando TSW14J56EVM y el software Pro de High Speed Data Converter (HSDC) y la GUI de ADC12J4000EVM. Estoy tratando de capturar los datos del dominio de tiempo bruto en un formato de archivo binario o csv para poder postprocesar los datos en MATLAB.

Siguiendo la Guía del usuario de HSDC, en la GUI de HSDC guardo los datos utilizando Archivo - > Guardar códigos ADC en bruto como archivo binario . También exploro la opción de guardar los datos como entradas firmadas de 32 bits usando Archivo - > Guardar códigos I32 como archivo CSV . Tengo problemas para encontrar la forma correcta de analizar los datos, que aparentemente se almacenan como códigos ADC en lugar de niveles de voltaje. He visto algunas publicaciones similares en los foros de TI, pero me gustaría una explicación explícita sobre cómo analizar los datos, y si se pudiera proporcionar el código MATLAB, sería muy apreciado.

Aquí está mi código MATLAB hasta ahora, asumiendo que los datos binarios se almacenan como enteros de 32 bits, complemento de no 2. N es el número de bits, Vfs es el voltaje pico a pico de escala completa de entrada típico de la sección de Características de entrada analógica de hoja de datos en línea ADC12J4000 .

function Data = ReadTiAdcData(filename)
fid = fopen(filename,'r');
Data = fread(fid,'int32');
fclose(fid);
N = 12;
Vfs = 0.75;
Data = Vfs*Data/(2^N-1);

ReadTiAdcData llama a una función Spectrum_Analyzer.m que proporciono datos de voltaje en el dominio del tiempo y la frecuencia de muestreo del ADC. Genera un espectro FFT, SNR, SFDR y ENOB a partir de esta información.

Ahora, no hay nada malo con la función del analizador de espectro. Lo he usado muchas veces en datos de ADC sin procesar que tomé de otro ADC (el AD9625 analógico) con el mismo número de muestras (65536). Otras personas también lo han usado sin problemas. Entonces el problema no está en el código, sino en los datos que estoy obteniendo.

Si uso este código en datos binarios y tomo una FFT de los datos mediante una función de analizador de espectro MATLAB, el espectro no se parece en nada a lo que está registrado en la GUI de HSDC. No es solo un problema de escala (lo fundamental aparece en la ubicación incorrecta, hay espuelas muy altas, etc.).

Si, en cambio, leo directamente en CSV data , el espectro es similar al que se muestra en la GUI de HSDC. Hay un fundamental en la frecuencia correcta. El piso de ruido tiene aproximadamente la misma forma y dB hacia abajo. Sin embargo, los cálculos de SNR, ENOB y SFDR son incorrectos por un margen significativo.

Se reduce a esto:

  1. ¿Cuál es la diferencia entre cómo HSDC formatea el archivo CSV y el archivo binario?
  2. ¿Cuál es la forma correcta de analizar los datos de ADC sin procesar que se almacenan en un archivo binario o archivo csv en datos de voltaje en el dominio del tiempo?
pregunta John Fu

1 respuesta

0

El problema ha sido resuelto.

function X = ReadTiAdcData(filename,N)
fid = fopen(filename,'r');
X = fread(fid,'int16');
fclose(fid);
X = X-2^(N-1);
X = X./2^(N-1);

La publicación de Jim B explica la codificación del archivo binario del HSDC y cómo convertir de él. N = 12. Resulta que el voltaje de escala completa no importaba porque solo necesitábamos el nivel de voltaje escalado relativo a escala completa, que ya estaba codificado en el archivo binario, siendo "escala completa" 4096.

Espero que esto sea útil para aquellos que tienen dificultades para convertir datos ADC sin procesar utilizando el HSDC de TI.

    
respondido por el John Fu

Lea otras preguntas en las etiquetas