PC-zu-PC-Datenkommunikation über Sound FSK / PSK / DSSS

8

Für Spaß und Arbeit muss ich eine Java-basierte Anwendung implementieren, die Text oder Daten für den Ton und die Übertragung über den PC-Lautsprecher codieren kann. Auf der Empfangsseite befindet sich ein Mikrofon mit Decoder-Software.

Ich dachte daran, FSK (syn oder async oder vorschlagen) für die Implementierung zu verwenden:

Text (Daten) --- modulieren ---> 10-kHz-20-kHz-Audioträgerwelle ---> Funkübertragung ---> Mikrofon -> demodulieren ---> Text oder Daten anzeigen.

Meine wichtigsten Überlegungen sind:

  • ~ 200bps Bandbreite, wenn nicht mehr
  • elastisch bis zu einem bestimmten Pegel
  • vorzugsweise 16 kHz - 20 kHz Trägerwelle mit 44,1 kHz Abtastung (es gibt weniger Rauschen in diesem Bereich und es ist für ältere Menschen und Mikrofone nicht wirklich hörbar, Lautsprecher sind billig und in Laptops leicht verfügbar)
  • Nicht zu komplexe Codierungslogik.

Welche Modulation würde mit geringstem Codierungsaufwand am besten funktionieren? Gibt es Empfehlungen zu Bibliotheken / Beispielen für das Erreichen von FSK / BFSK / PSK oder DSSS mit Java?

Geeknizer
quelle
3
Sie könnten einfach einen der alten Modemstandards verwenden, z. B. V21, der sehr einfach war, 300 Baud, Vollduplex. Es sollte genügend Dokumentation und Quellcode geben. Sie können das Basisband bei Bedarf durch Mischen auf 17 kHz verschieben.
Paul R
1
Seien Sie vorsichtig, wenn Sie die Trägerfrequenz zu hoch drücken. Die meisten kommerziellen akustischen Geräte weisen Frequenzgangcharakteristiken auf, die bei Annäherung an 20 kHz nicht genau definiert sind. Für einige Geräte können 16 kHz eine Herausforderung sein. Ist es akzeptabel, dass Ihr Schema einen Parameter hat, der die Trägerfrequenz / das Trägerband festlegt?
user2718
1
Um den Kommentar von @PaulR zu ergänzen, können Sie eine Spezifikation wie V21 nehmen und sie an den von Ihnen gewählten Trägerfrequenzbereich anpassen. Wenn Sie dem nachgehen möchten, gibt es auf dieser Website sicher genug Fachwissen, um bei der Anpassung zu helfen.
user2718
@PaulR Können Sie mir eine Beispielimplementierung in Java geben?
Geeknizer
1
Sicher - gib mir nur ein paar Tage, um es für dich zu schreiben ...
Paul R

Antworten:

6

Dies ist aufgrund der Kanaleigenschaften tatsächlich ein sehr schwieriges Problem. Die meisten Computerlautsprecher haben eine ziemlich begrenzte Bandbreite, erhebliche Nichtlinearitäten und die Raumakustik ist häufig zeitlich variabel.

Das Leben wird VIEL einfacher, wenn Sie einfach ein Kabel vom Kopfhörerausgang eines PCs in den Line-Eingang des anderen PCs verlegen können.

Hilmar
quelle
2
Ich habe an einem sehr ähnlichen Kommunikationsschema gearbeitet: Audio-Fsk-Modulation / Demodulation und ich habe gerade eine Linux-Audio-Modem-Implementierung mit Fsk gefunden. Dieser SW kann 300 und 1200 Baud erreichen, indem der Audiokanal als Kommunikationsverbindung zwischen zwei PCs und fsk verwendet wird. Dies könnte ein sehr guter Ausgangspunkt sein (meine Implementierung erreicht in einer verrauschten Umgebung mit Frequenzen um 500-4000 Hz ziemlich 200 Baud für Probleme im Zusammenhang mit dem Frequenzgang von PC-Audiogeräten). Link
Yozek
@ Yozek kannst du mich auf diesen Quellcode verweisen?
Geeknizer
1
Die URL für die Minimodem-Implementierung ist hier: whence.com/minimodem/minimodem-0.16.1.tar.gz Ich arbeite immer noch an einer persönlichen einfachen Implementierung von AFSK in Java und Objective-C, habe aber einige Probleme mit Umgebungsgeräuschen / Hintergrundgeräuschen und niedriger Übertragungsratenbegrenzung: ca. 100/200 Baud (oder Bit / Sek.), überhaupt nicht sehr viel. Aber ich weiß nicht, ob die Ursache eine praktische / physiologische Einschränkung ist oder ob es sich um ein Problem handelt, das bei der Implementierung nicht so klug genug ist. Ich denke, der zweite ...
Yozek
1

Ja, Sie sollten auf jeden Fall FSK verwenden, aber es muss asynchron sein und hier ist der Grund. Die synchrone Demodulation von FSK wird als kohärente Demodulation bezeichnet. Das kohärente Demodulieren von FSK erfordert eine eingehende Trägerphasenverriegelung (Phasensynchronisation), die normalerweise mit Phasenverriegelungsschleifen (PLL) durchgeführt wird, die nur dann gut funktionieren, wenn Sie ein Signal-Rausch-Verhältnis (SNR) von mindestens 10 dB haben. Normalerweise hat Audio Broadcast kein so hohes SNR, vergessen Sie also die kohärente Demodulation. Außerdem benötigt der nicht kohärente FSK in der Praxis mit elektromagnetischen Signalen höchstens 1 dB mehr Eb / No als der kohärente FSK für Pb ≤ 10−4 (dies bedeutet, dass Sie zum Erhalten der gleichen Bitfehlerwahrscheinlichkeit Pb nur einen zusätzlichen senden müssen dB Leistung in jedem Bit). Der nicht kohärente FSK-Demodulator ist jedoch erheblich einfacher aufzubauen, da keine kohärenten Referenzsignale erzeugt werden müssen. Daher verwenden in praktischen Systemen fast alle FSK-Empfänger eine nicht kohärente Demodulation, da jeder lieber zusätzliche dB Leistung überträgt, als all diese Synchronisationsprobleme zu lösen.

Beantwortung Ihrer wichtigsten Überlegungen:

200 bps Bandbreite, wenn nicht mehr: Ich habe 200 bps mit einem orthogonalen Träger mit kontinuierlicher Phase 8fsk erreicht und das Smartphone 1 m vom Lautsprecher entfernt aufgestellt.

Rauschresistent bis zu einem bestimmten Grad: Ich habe einen BCH-Fehlerkorrekturcode implementiert, mit dem bis zu 8 Fehler pro Datenblock repariert werden können. BCH-Codes haben ihre größten Codierungsgewinne, wenn eine Redundanz von 25 bis 50% hinzugefügt wird

vorzugsweise 16 kHz - 20 kHz Trägerwelle mit 44,1 kHz Abtastung: Ich würde empfehlen, die Abtastfrequenz auf 48 kHz zu erhöhen (was heutzutage bei Smartphones üblich ist) und die Betriebsbandbreite zwischen 17,5 oder 18 und 21,5 kHz zu begrenzen. Wenn Sie 44.1 verwenden, müssen Sie zwischen 17,5 oder 18 und 20,5 kHz arbeiten. Sie müssen jedoch sehr vorsichtig mit dem von Ihnen ausgewählten Lautsprecher und Mikrofon sein, da nicht alle mit diesen hohen Frequenzen arbeiten. Sie müssen eine Frequenzantwortanalyse von ihnen durchführen. Wenn Sie einen PC verwenden, würde ich ARTA oder Audacity empfehlen oder wenn Sie ein Programmierer Matlab oder Octave sind. Wenn Sie ein Smartphone verwenden, würde ich jede App zur Analyse des Audiospektrums empfehlen

Nicht zu komplexe Codierungslogik: Ich würde den nicht kohärenten Korrelationsquadratur-fsk-Demodulator empfehlen. Viel leichter als jede fft-basierte Implementierung. Besonders wenn Sie weniger als 1 m entfernt sind, wo Doppler und Multipath Sie nicht so sehr beeinflussen

VMMF
quelle