Communication de données PC à PC via Sound FSK / PSK / DSSS

8

Pour le plaisir et le travail, je dois implémenter une application basée sur java qui peut encoder du texte ou des données à écouter et à transmettre à l'aide du haut-parleur du PC et du côté de la réception se trouve un microphone avec un logiciel de décodeur.

Je pensais utiliser FSK (syn ou async ou suggest) pour l'implémentation:

Texte (données) --- moduler ---> Onde porteuse audio 10khz-20khz ---> Transmission hertzienne ---> microphone -> démoduler ---> Afficher du texte ou des données.

Mes principales considérations sont:

  • ~ 200bps de bande passante sinon plus
  • résilient au bruit jusqu'à un certain niveau
  • de préférence 16 kHz - 20 kHz d'onde porteuse avec un échantillonnage de 44,1 kHz (il y a moins de bruit dans ce domaine et ce n'est pas vraiment audible pour les personnes âgées et les micros, les haut-parleurs sont bon marché, facilement disponibles dans les ordinateurs portables)
  • Logique de codage pas trop complexe.

Quelle modulation fonctionnerait le mieux avec le moins d'efforts de codage? Des recommandations sur les bibliothèques / échantillons pour réaliser FSK / BFSK / PSK ou DSSS en utilisant Java?

geeknizer
la source
3
Vous pouvez simplement utiliser l'une des anciennes normes de modem, par exemple V21 qui était très simple, 300 bauds, en duplex intégral. Il devrait y avoir beaucoup de documentation et de code source. Vous pouvez décaler la bande de base jusqu'à 17 kHz en utilisant le mixage si nécessaire.
Paul R
1
Attention à pousser la fréquence porteuse trop haut. La plupart des appareils acoustiques commerciaux commencent à avoir des caractéristiques de réponse en fréquence qui ne sont pas bien définies à l'approche des 20 kHz. Pour certains appareils, 16 kHz peut être un défi. Est-il acceptable que votre schéma ait un paramètre qui définit la fréquence / bande de la porteuse?
user2718
1
Pour ajouter au commentaire de @PaulR, vous pouvez prendre une spécification comme V21 et l'adapter à la plage de fréquences de votre porteuse choisie. Si vous voulez poursuivre, je suis sûr qu'il y a suffisamment d'expertise sur ce site pour aider à l'adaptation.
user2718
@PaulR Pouvez-vous me donner un exemple d'implémentation en java?
geeknizer
1
Bien sûr - donnez-moi juste quelques jours pour l'écrire pour vous ...
Paul R

Réponses:

6

C'est en fait un problème vraiment difficile en raison des caractéristiques du canal. La plupart des haut-parleurs d'ordinateur ont une bande passante assez limitée, ont des non-linéarités importantes et l'acoustique de la pièce varie souvent dans le temps.

La vie devient BEAUCOUP plus facile si vous pouvez simplement faire passer un câble entre la sortie casque d'un PC et l'entrée ligne de l'autre.

Hilmar
la source
2
J'ai travaillé sur un schéma de communication très similaire: modulation / démodulation fsk audio et je viens de trouver une implémentation de modem audio linux utilisant fsk. Ce sw peut atteindre 300 et 1200 bauds en utilisant le canal audio comme lien de communication entre deux pc et fsk. Cela pourrait être un très bon point de départ (mon implémentation atteint assez 200 bauds dans un environnement bruyant en utilisant des fréquences autour de 500-4000 Hz pour les problèmes liés à la réponse en fréquence des périphériques audio pc). link
Yozek
@Yozek pouvez-vous me diriger vers ce code source?
geeknizer
1
L'URL pour l'implémentation du minimodem est ici: whence.com/minimodem/minimodem-0.16.1.tar.gz Je travaille toujours sur une implémentation personnelle simple d'AFSK en java et objective-C, mais j'ai des problèmes avec bruit ambiant / de fond et faible limite de vitesse de transmission: environ 100/200 bauds (ou bit / sec), pas beaucoup du tout. Mais je ne sais pas si la cause est une limitation pratique / physiologique ou si c'est un problème de «mise en œuvre pas assez intelligente». Je pense que le deuxième ...
Yozek
1

Oui, vous devez absolument utiliser FSK, mais il doit être asynchrone et voici pourquoi. La démodulation FSK de manière synchrone est appelée démodulation cohérente. Démoduler FSK de manière cohérente nécessite un verrouillage de phase de la porteuse entrante (synchronisation de phase), ce qui se fait normalement avec des boucles de verrouillage de phase (PLL) qui ne fonctionnent pas bien, sauf si vous avez un rapport signal / bruit (SNR) d'au moins 10 dB ou plus. Normalement, la diffusion audio n’a pas un SNR aussi élevé, alors oubliez la démodulation cohérente. Outre la pratique des signaux électromagnétiques, le FSK non cohérent ne nécessite, au maximum, que 1 dB de Eb / No en plus que celui du FSK cohérent pour Pb ≤ 10−4 (cela signifie que pour obtenir la même probabilité d'erreur sur les bits Pb, il vous suffit de transmettre un supplément dB de puissance dans chaque bit). Pourtant, le démodulateur FSK non cohérent est considérablement plus facile à construire car il n'est pas nécessaire de générer des signaux de référence cohérents. Par conséquent, dans les systèmes pratiques, presque tous les récepteurs FSK utilisent une démodulation non cohérente car tout le monde préfère transmettre un dB de puissance supplémentaire plutôt que de rencontrer tous ces problèmes de synchronisation.

Répondre à vos principales considérations:

Bande passante de 200bps sinon plus: j'ai atteint 200 bps en utilisant une porteuse orthogonale à phase continue 8fsk, en plaçant le smartphone à 1 m du haut-parleur.

Résistant au bruit jusqu'à un certain niveau: j'ai implémenté un code de correction d'erreur BCH, avec la possibilité de réparer jusqu'à 8 erreurs par bloc de données. Les codes BCH ont leurs gains de codage les plus importants lorsqu'une redondance de 25 à 50% est ajoutée

de préférence une onde porteuse de 16 kHz à 20 kHz avec un échantillonnage de 44,1 kHz: je suggérerais d'augmenter la fréquence d'échantillonnage jusqu'à 48 kHz (ce qui est assez courant de nos jours dans les smartphones) et de limiter votre bande passante de fonctionnement entre 17,5 ou 18 et 21,5 kHz. Si vous utilisez 44,1, vous devez travailler entre 17,5 ou 18 et 20,5 kHz. Mais vous devez être très prudent avec le haut-parleur et le microphone que vous sélectionnez car ils ne fonctionnent pas tous à ces hautes fréquences. Vous devez en faire une analyse de réponse en fréquence. Si vous utilisez un PC, je recommanderais ARTA ou Audacity ou si vous êtes un programmeur Matlab ou Octave. Si vous utilisez un smartphone, je recommanderais toute application d'analyse du spectre audio

Logique de codage pas trop complexe: je recommanderais le démodulateur fsk en corrélation non cohérente. Beaucoup plus léger que n'importe quelle implémentation basée sur fft. Surtout si vous êtes à moins de 1 m de distance où le doppler et les trajets multiples ne vous affectent pas autant

VMMF
la source