¿En qué idioma escribir la aplicación USB 3.0 para la placa de demostración ADC? [cerrado]

Necesito alguna sugerencia/orientación sobre qué idioma/configuración utilizar para crear una aplicación con conectividad USB 3.0 que procese 1,6 Gbps de datos en tiempo real.

La aplicación recopila datos de un ADC y los traza en un gráfico en la aplicación. Básicamente, es una placa de adquisición de datos de alta velocidad que estoy diseñando y necesito software para emparejar con la placa.

El sistema operativo de destino es Windows, pero finalmente se necesitará soporte para OS X y Linux.

Tengo experiencia en el uso de chips de modo serie FTDI USB 2.0, pero no estoy seguro de si USB 3.0 será el mismo para velocidades de 1,6 Gbps.

Cualquier comentario/sugerencia es bienvenido.

¡Gracias!

Sus requisitos son similares a los de las radios definidas por software basadas en PC. Los sistemas existentes de gama alta pueden ser un lugar para comenzar a buscar ideas de diseño.
Hola Kevin, ¡gracias por indicarme la dirección de escritura! Lo aprecio.

Respuestas (1)

Las partes críticas de velocidad que manejan el procesamiento de números en tiempo real deben escribirse en un lenguaje compilado y eficiente, como C o C++. 1,6 Gbps son 200 MB/s, así que dependiendo de la cantidad de procesamiento que estés haciendo... digamos que no deberías escribir esto en Ruby o Python.

Ahora, si su procesamiento es compatible con canalización (no requiere bifurcación o movimiento hacia arriba y hacia abajo en la pila del programa), o básicamente solo una serie de operaciones que son fijas y no dependen del contenido de los datos, lo mismo sucederá. hacerse con todos los datos, entonces esto es para lo que se crearon cosas como OpenCL o CUDA. Esto le permite realizar estas operaciones en la GPU de la computadora, usándola casi como DSP. OpenCL funciona en todas las tarjetas gráficas, CUDA es específico de Nvidia, por lo que recomendaría OpenCL. También puede retroceder y usar la CPU.

OpenCL es un marco en lugar de un lenguaje, pero especifica C99 como el lenguaje preferido para usar con él.

Además, el comentario de Kevin Reid es un gran consejo: los SDR hacen exactamente esto: procesar una avalancha de datos provenientes de algún lugar (generalmente USB 2.0 o 3.0) y un excelente lugar para comenzar. Una simple podría ser ver cómo lo hace el controlador rtl-sdr. El código está disponible aquí .

El procesamiento necesario toma la FFT del flujo de bits entrante, que son muestras de tiempo de los datos de salida del ADC a una tasa de muestreo fija (20 bits por muestra a 40 MSPS). Quiero que la aplicación actualice continuamente el diagrama de FFT en la pantalla que ve el usuario, a una velocidad de unas 10 veces por segundo (para que parezca estar en tiempo real). Cada FFT es de 32K muestras. Si OpenCL puede tomar FFT, sería increíble. Lo investigaré. ¡Gracias!
Robin Tsang, si todo lo que quiere es FFT @ 40Msps, podría considerar FPGA. Un chip decente, sincronizado a 200MHz, le brinda 5 relojes/muestra y el resultado puede incluso ajustarse a un canal USB 2.0.