Qué esquema de modulación digital sería adecuado para transmitir datos digitales a través de la salida de una tarjeta de sonido de PC

8

Necesito emitir un flujo de datos a más rápido desde un sistema informático cuyo único periférico de salida accesible es la interfaz de audio. Esta interfaz tiene especificaciones razonables,  frecuencia de muestreo de 96 kHz , con resolución de - , pero la etapa de salida está acoplada a CA. Solo hay un canal de salida disponible. Una buena suposición sería que se comporta como un filtro de paso de banda con una banda de paso de a con una atenuación inferior a ; y que tiene una SNR de . No tengo ninguna otra restricción de complejidad en el emisor.40 kbit/s96 kHzbits 4  Hz 40  kHz - 1  dB 90  dB24bit4 Hz40 kHz1 dB90 dB

No espero ruido / atenuación adicional en el cable que conecta el emisor al receptor.

El receptor es un sistema integrado con una MCU Cortex-M3 de . Si es necesario, se puede suponer un rendimiento de adquisición de audio similar. Un chip de demodulación dedicado adicional (si existe tal cosa para frecuencias tan bajas) podría ser una opción.120 MHz

  • ¿Qué esquema de modulación digital sería adecuado para esta situación?
  • ¿Ya existen bibliotecas de códigos (bibliotecas de radio definidas por software) que me impedirían reinventar la rueda?
  • ¿Existen aplicaciones existentes con restricciones similares en las que pueda buscar inspiración?
pichenettes
fuente
¿Supongo que no pasará por los altavoces?
Jim Clay
No, solo un corto cableado entre la tarjeta de sonido y el receptor.
pichenettes

Respuestas:

8

Tienes un buen conjunto de circunstancias aquí; deberías poder alcanzar tu objetivo sin demasiados problemas. No veo nada en su descripción que elimine toda una clase de modulación (por ejemplo, modulación por cambio de fase , modulación por cambio de frecuencia , etc.). Algunos de los factores que intervendrían en la elección de un formato adecuado incluirían:

  • La eficiencia espectral requerida (es decir, cuánto rendimiento de datos necesita en relación con el ancho de banda disponible)
  • Los requisitos de complejidad para su receptor (que generalmente es la parte más complicada del sistema)
  • Cuánto esfuerzo estás dispuesto a poner en el desarrollo de la implementación.
  • Otras circunstancias específicas de su aplicación (por ejemplo, si tiene una precisión de sincronización baja en uno o ambos extremos, interferencia conocida o una respuesta deficiente del canal)

Entonces, marcando estos uno por uno para su sistema, podemos llegar a algunas pautas:

  • Parece que su mayor restricción es la respuesta de su canal (que está limitado por el DAC de su tarjeta de sonido). Si tiene 40 kHz de ancho de banda unilateral disponible, entonces estará limitado a una velocidad de símbolos que está algo por debajo de eso. Para una velocidad de datos objetivo de al menos 40 kilobits por segundo, querrás un esquema que transmita múltiples bits por símbolo.

  • Siempre que su plataforma integrada no esté cargada con demasiadas funciones, un procesador ARM moderno de 120 MHz debería ser capaz de manejar fácilmente la demodulación de casi cualquier formato en el rango de decenas de kilobits por segundo.

    No estoy seguro específicamente con qué modelo está ejecutando, pero muchos procesadores recientes proporcionan una integración muy estrecha de los ADC integrados con el subsistema de memoria e interrupción, lo que quizás le permita (sin intervención manual de la CPU) muestrear automáticamente la señal de entrada en un determinado velocidad, almacene las muestras en la memoria interna y active una interrupción del procesador solo cuando un bloque de muestras de cierto tamaño esté disponible para ser procesado. Sé que algunos dispositivos Atmel como mínimo proporcionan este tipo de funcionalidad; He tenido buen éxito con ellos en el pasado.

  • EbN0

  • En cuanto a circunstancias especiales, para este sistema, no esperaría mucho de nada. Esperaría que la precisión del oscilador en el lado de la PC sea bastante buena (con un mínimo de control de cristal , por lo que está en el rango de <50 ppm más o menos; posiblemente mucho mejor si el oscilador está calibrado utilizando alguna otra fuente más precisa) ) Es probable que el lado incrustado sea el mismo; Supongo que está utilizando un oscilador de cristal como fuente de reloj. Dado que los dos extremos están cableados, supondré que no tiene interferencia notable.

Entonces, juntando todo esto en una sola recomendación, probablemente comenzaría por el camino de un enfoque de codificación de cambio de fase en cuadratura (QPSK) a 24 kilosímbolos por segundo . A 2 bits por símbolo, esto produce una velocidad de datos de 48 kilobits por segundo, que excede sus requisitos. Esta tasa particular hace que su implementación sea un poco más fácil; Dado que el DAC de salida se ejecuta a 96 kHz, esto da como resultado 4 muestras por símbolo (siempre es más fácil ejecutar a un número entero de muestras por tiempo de símbolo). Probablemente trataría de diseñar el lado incrustado para que muestree a la misma velocidad de 96 kHz si es posible; Esto evita la necesidad de hacer un nuevo muestreo en el extremo más privado de recursos.

Para evitar cualquier problema con la muesca de CC que emplea el DAC de su tarjeta de sonido, puede modular la señal QPSK en una portadora a 24 kHz. Entonces, el espectro de la señal modulada tendría un valor nulo en CC, que se alinearía con su muesca. Es posible que la muesca termine no siendo un problema en absoluto (especialmente si realmente tiene solo unos pocos Hz de ancho como se sugiere). En ese caso, podría funcionar con un esquema aún más simple que simplemente funciona en la banda base, evitando por completo la modulación del operador.

QPSK es una buena opción debido a su simplicidad, tanto en el transmisor como en el receptor. En su SNR, podría lograr una mayor eficiencia espectral utilizando un esquema más complicado como la modulación de amplitud en cuadratura (QAM) , pero la propiedad de envolvente constante de las señales PSK es atractiva desde el punto de vista de la complejidad del receptor. Como nota, si realmente necesitara más bits por símbolo en el futuro, podría pasar a una constelación PSK de orden superior como 8 o 16 PSK. Sin embargo, estos son subóptimos desde el punto de vista del rendimiento de la tasa de error de bits en comparación con las constelaciones QAM.

En lo que respecta a la implementación de una biblioteca, no estoy al tanto de nada en lo que pueda ingresar e ir, especialmente para una plataforma integrada. Es probable que la implementación de su receptor esté vinculada en cierta medida con la interfaz de hardware. Es posible que pueda encontrar algunas implementaciones existentes para los diversos pasos necesarios para el demodulador, pero necesitará al menos modificar lo que podría encontrar para que funcione bien en su plataforma. El proyecto GNU Radio es un buen lugar para buscar si solo desea ver implementaciones en C ++ de muchas operaciones diferentes de procesamiento de señales de comunicaciones, e incluso podría proporcionar un marco útil para implementar el transmisor a bordo de su PC. Como resumen, los pasos de alto nivel que su receptor necesitaría hacer incluirían:

  • Si se utilizó una frecuencia portadora distinta de cero:

    • Sincronización de frecuencia: localice y rastree el desplazamiento de frecuencia de la portadora debido a desajustes del oscilador entre el transmisor y el receptor (en muchos casos, ese desplazamiento de frecuencia será aproximadamente constante a lo largo del tiempo)
    • Desmodulación de portadora: traduce la señal a banda base, produciendo dos señales en fase y en cuadratura (I / Q) (a menudo expresadas como una señal de banda base compleja ).
  • Filtrado coincidente: pase la señal de banda base a través de un filtro adaptado a la forma de pulso utilizada en el transmisor (es probable que pueda salirse con un pulso rectangular)
  • Sincronización de tiempos: localice y rastree los tiempos que corresponden a las transiciones de símbolos; Esto se puede hacer mediante el seguimiento de las ubicaciones de los picos en el módulo de salida del filtro coincidente el tiempo del símbolo
  • Corte de bits: convierta las salidas de filtro coincidentes en tiempos de muestra de símbolos en decisiones de bits difíciles
  • Serialización: ¡asegúrese de escribir los bits múltiples por símbolo en el orden correcto!

Esto puede sonar como un proceso complicado, pero construir un receptor práctico incluso para una situación simple como esta puede ser muy esclarecedor. Solo comente si hay algo más que haya dejado fuera.

Jason R
fuente
Gracias por los punteros! Tengo algo que funciona bien en la simulación, ahora en el puerto a las plataformas reales. Comencé con QPSK y vi hasta dónde podía impulsar las cosas con 256-QAM. 256-QAM parece ser robusto para el tipo de ruido que esperaría con solo usar el SAR DAC integrado en mi MCU en lugar de un códec de audio externo. Usaré DMA para esto, por lo que está llenando directamente un búfer en RAM y proceso datos por bloques de 16 muestras a la vez. La parte más difícil fue alinear mis señales Q / I locales. He agregado una secuencia de sincronización periódica en el protocolo para resolver la incertidumbre pi / 2 sobre eso.
pichenettes
106
Además, si está utilizando QAM (o cualquier otro esquema que contenga modulación de amplitud), hay otro bloque importante para agregar a la lista al final de mi respuesta: necesitará algún tipo de mecanismo de control de ganancia. Básicamente, tendrá que decidir en qué lugar del plano colocar las regiones de decisión para cada valor de símbolo. Un enfoque es usar un bucle automático de control de ganancia para forzar la potencia promedio de la señal a un cierto valor, luego estructurar las regiones de decisión en consecuencia para ese nivel de potencia promedio.
Jason R