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?
audio
modulation
sound
fsk
geeknizer
fuente
fuente
Respuestas:
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.
fuente
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
fuente