Comunicación de datos de PC a PC a través de Sound FSK / PSK / DSSS

8

Para divertirme y trabajar, tengo que implementar una aplicación basada en Java que puede codificar texto o datos para que suenen y se transmitan usando el altavoz de la PC y, en el lado receptor, hay un micrófono con software decodificador.

Estaba pensando en usar FSK (syn o async o sugiere) para la implementación:

Texto (datos) --- modular ---> 10khz-20khz onda portadora de audio ---> Transmisión por aire ---> micrófono -> demodular ---> Mostrar texto o datos.

Mis principales consideraciones son:

  • ~ 200bps de ancho de banda si no más
  • resistente al ruido hasta cierto nivel
  • preferiblemente onda portadora de 16khz - 20khz con muestreo de 44.1khz (hay menos ruido en esta área y no es realmente audible para las personas mayores y los micrófonos, los altavoces son baratos, fácilmente disponibles en computadoras portátiles)
  • Lógica de codificación no demasiado compleja.

¿Qué modulación funcionaría mejor con los menores esfuerzos de codificación? ¿Alguna recomendación sobre bibliotecas / muestras para lograr FSK / BFSK / PSK o DSSS usando Java?

geeknizer
fuente
3
Puede usar uno de los viejos estándares de módem, por ejemplo, V21, que era muy simple, 300 baudios, full duplex. Debe haber mucha documentación y código fuente por ahí. Puede cambiar la banda base hasta 17 kHz usando la mezcla si es necesario.
Paul R
1
Cuidado con empujar la frecuencia de la portadora demasiado alta. La mayoría de los dispositivos acústicos comerciales comienzan a tener características de respuesta de frecuencia que no están bien definidas a medida que se acerca a 20Khz. Para algunos dispositivos, 16Khz puede ser un desafío. ¿Es aceptable que su esquema tenga un parámetro que establezca la frecuencia / banda de la portadora?
user2718
1
Para agregar al comentario de @PaulR, puede tomar una especificación como V21 y adaptarla para que coincida con el rango de frecuencia de portadora elegido. Si desea continuar con eso, estoy seguro de que hay suficiente experiencia en este sitio para ayudar con la adaptación.
user2718
@PaulR ¿Me puede dar un ejemplo de implementación en Java?
geeknizer
1
Seguro - sólo dame unos días para escribir por ti ...
Paul R

Respuestas:

6

Esto es realmente un problema realmente difícil debido a las características del canal. La mayoría de los altavoces de computadora tienen un ancho de banda bastante limitado, tienen no linealidades significativas y la acústica de la sala a menudo varía en el tiempo.

La vida se vuelve MUCHO más fácil si solo puede pasar un cable desde la salida de auriculares de una PC a la entrada de línea de la otra.

Hilmar
fuente
2
He estado trabajando en un esquema de comunicación muy similar: modulación / demodulación de audio fsk y acabo de encontrar una implementación de módem de audio Linux usando fsk. Este sw puede alcanzar 300 y 1200 baudios utilizando el canal de audio como enlace de conmutación entre dos PC y fsk. Podría ser un muy buen punto de partida (mi implementación alcanza bastante 200 baudios en un entorno ruidoso usando frecuencias de alrededor de 500-4000 Hz para problemas relacionados con la respuesta de frecuencia de los dispositivos de audio de PC). enlace
Yozek
@Yozek, ¿puedes señalarme ese código fuente?
geeknizer
1
La url para la implementación del minimodem está aquí: whence.com/minimodem/minimodem-0.16.1.tar.gz Todavía estoy trabajando en una implementación personal simple de AFSK en Java y Objective-C, pero tengo algunos problemas con ruido ambiental / de fondo y límite de velocidad de transmisión baja: aproximadamente 100/200 baudios (o bit / seg), nada en absoluto. Pero no sé si la causa es una limitación práctica / fisiológica o si es mi problema de "implementación no tan inteligente". Creo que el segundo ...
Yozek
1

Sí, definitivamente deberías usar FSK, pero tiene que ser asincrónico y aquí está el por qué. La demodulación de FSK sincrónicamente se denomina demodulación coherente. La demodulación de FSK requiere coherentemente el bloqueo de fase de portadora entrante (sincronización de fase), que normalmente se realiza con bucles de bloqueo de fase (PLL) que no funcionan bien a menos que tenga una relación señal / ruido (SNR) de al menos 10 dB más o menos. Normalmente, la transmisión de audio no tiene una SNR tan alta, así que olvídate de la demodulación coherente. Además, en la práctica con señales electromagnéticas, la FSK no coherente requiere, como máximo, solo 1 dB más Eb / No que la FSK coherente para Pb ≤ 10−4 (esto significa que para obtener la misma probabilidad de error de bit Pb solo necesita transmitir un extra dB de potencia en cada bit). Sin embargo, el demodulador FSK no coherente es considerablemente más fácil de construir, ya que no es necesario generar señales de referencia coherentes. Por lo tanto, en los sistemas prácticos, casi todos los receptores FSK usan demodulación no coherente porque todos prefieren transmitir un dB extra de potencia en lugar de tener todos esos problemas de sincronización.

Respondiendo a sus principales consideraciones:

Ancho de banda de 200bps, si no más: he logrado 200 bps usando una fase continua de portadores ortogonales 8fsk, configurando el teléfono inteligente a 1 m del altavoz.

Resistente al ruido hasta cierto nivel: he implementado un código de corrección de errores BCH, con la capacidad de reparar hasta 8 errores por bloque de datos. Los códigos BCH tienen sus mayores ganancias de codificación cuando se agrega una redundancia del 25 al 50%

preferiblemente onda portadora de 16 kHz a 20 kHz con muestreo de 44,1 kHz: sugeriría aumentar la frecuencia de muestreo hasta 48 kHz (que es bastante común hoy en día en los teléfonos inteligentes) y limitar el ancho de banda de operación entre 17.5 o 18 y 21.5 kHz. Si usa 44.1, debe trabajar entre 17.5 o 18 y 20.5 kHz. Pero debe tener mucho cuidado con el altavoz y el micrófono que seleccione, ya que no todos funcionan a estas frecuencias altas. Tienes que hacer un análisis de respuesta de frecuencia de ellos. Si está utilizando una PC, le recomendaría ARTA o Audacity o si es un programador Matlab u Octave. Si está utilizando un teléfono inteligente, recomendaría cualquier aplicación de análisis de espectro de audio

Lógica de codificación no demasiado compleja: recomendaría el demodulador fsk de cuadratura de correlación no coherente. Mucho más ligero que cualquier implementación basada en FFT. Especialmente si estás a menos de 1 m de distancia, donde el doppler y la ruta múltiple no te afectan tanto

VMMF
fuente