Ich muss einen Datenstrom mit oder schneller aus einem Computersystem ausgeben, dessen einziges zugängliches Ausgabe-Peripheriegerät das Audio-Interface ist. Diese Schnittstelle hat angemessene Spezifikationen, 96 kHz Abtastrate, mit 24 - Bit - Auflösung, aber die Ausgangsstufe ist AC-gekoppelt. Es ist nur ein Ausgangskanal verfügbar. Eine gute Annahme wäre, dass es sich wie ein Bandpassfilter mit einem Durchlassband von 4 Hz bis 40 kHz mit einer Dämpfung von weniger als - 1 dB verhält ; und dass es ein 90 dB SNR hat. Ich habe keine andere Komplexitätsbeschränkung für den Emitter.
Ich erwarte keine zusätzlichen Störungen / Dämpfungen am Kabel, das den Sender mit dem Empfänger verbindet.
Der Empfänger ist ein eingebettetes System mit einer Cortex-M3-MCU. Bei Bedarf kann eine ähnliche Audioerfassungsleistung angenommen werden. Ein zusätzlicher dedizierter Demodulations-Chip (falls es so etwas für so niedrige Frequenzen gibt) könnte eine Option sein.
- Welches digitale Modulationsschema wäre für diese Situation geeignet?
- Gibt es bereits Codebibliotheken (softwaredefinierte Funkbibliotheken?), Die mich daran hindern würden, das Rad neu zu erfinden?
- Gibt es Anwendungen mit ähnlichen Einschränkungen, bei denen ich nach Inspiration suchen könnte?
quelle
Antworten:
Sie haben hier ziemlich gute Umstände; Sie sollten in der Lage sein, Ihr Ziel ohne allzu große Probleme zu erreichen. Ich sehe in Ihrer Beschreibung nichts, was eine ganze Klasse von Modulationen eliminieren würde (z. B. Phasenumtastung , Frequenzumtastung usw.). Einige der Faktoren, die bei der Auswahl eines geeigneten Formats eine Rolle spielen würden, wären:
Wenn Sie diese für Ihr System einzeln ankreuzen, können wir einige Richtlinien erstellen:
Es scheint, dass Ihre größte Einschränkung Ihre Kanalantwort ist (die durch den DAC Ihrer Soundkarte begrenzt wird). Wenn Sie eine einseitige Bandbreite von 40 kHz zur Verfügung haben, sind Sie auf eine Symbolrate beschränkt, die etwas darunter liegt. Für eine Zieldatenrate von mindestens 40 Kilobit pro Sekunde benötigen Sie ein Schema, das mehrere Bits pro Symbol überträgt.
Vorausgesetzt, Ihre eingebettete Plattform ist nicht mit zu vielen anderen Funktionen belastet, sollte ein moderner 120-MHz-ARM-Prozessor die Demodulation fast aller Formate im Bereich von zehn Kilobit pro Sekunde problemlos verarbeiten können.
Ich bin mir nicht sicher, mit welchem Modell Sie arbeiten, aber viele neuere Prozessoren bieten eine sehr enge Integration der integrierten ADCs in das Speicher- und Interrupt-Subsystem, sodass Sie möglicherweise (ohne manuelle CPU-Intervention) das Eingangssignal automatisch an einem bestimmten Wert abtasten können Speichern Sie die Samples im Onboard-Speicher und lösen Sie einen Prozessor-Interrupt nur aus, wenn ein Sample-Block bestimmter Größe zur Verarbeitung verfügbar ist. Ich weiß, dass zumindest einige Atmel-Geräte diese Art von Funktionalität bieten. Ich habe in der Vergangenheit gute Erfolge mit ihnen erzielt.
Ich gehe davon aus, dass dies wahrscheinlich eine Komponente eines größeren Systems ist, sodass Sie nicht etwas wirklich Komplexes erstellen müssen, um Ihre Anforderungen zu erfüllen. Glücklicherweise sollten Sie, basierend auf dem, was Sie gesagt haben, in der Lage sein, etwas zu implementieren, das Ihren Anforderungen ziemlich einfach entspricht. Ich gehe davon aus, dass Sie wahrscheinlich ein sehr hohes Signal-Rausch-Verhältnis (40 dB oder mehr) haben, das für digitale Modulationen normalerweise als gemessen wird, da die beiden Geräte miteinander verkabelt sindE.bN.0
Was die besonderen Umstände angeht, würde ich für dieses System nicht viel erwarten. Ich würde erwarten, dass die Oszillatorgenauigkeit auf der PC-Seite ziemlich gut ist (bei einem Minimum kristallgesteuert , also im Bereich von <50 ppm oder so; möglicherweise viel besser, wenn der Oszillator mit einer anderen präziseren Quelle kalibriert wird ). Die eingebettete Seite ist wahrscheinlich dieselbe. Ich gehe davon aus, dass Sie einen Quarzoszillator als Taktquelle verwenden. Da die beiden Enden miteinander verkabelt sind, gehe ich davon aus, dass Sie keine nennenswerten Störungen haben.
Wenn ich all dies zu einer einzigen Empfehlung zusammenfasse, würde ich wahrscheinlich den Weg eines Quadratur-Phasenumtastungs-Ansatzes (QPSK) mit 24 Kilosymbolen pro Sekunde beschreiten . Bei 2 Bit pro Symbol ergibt sich eine Datenrate von 48 Kilobit pro Sekunde, die Ihre Anforderungen übersteigt. Diese spezielle Rate erleichtert Ihre Implementierung ein wenig. Da der Ausgangs-DAC mit 96 kHz läuft, ergeben sich 4 Abtastwerte pro Symbol (es ist immer einfacher, mit einer ganzzahligen Anzahl von Abtastwerten pro Symbolzeit zu arbeiten). Ich würde wahrscheinlich versuchen, die eingebettete Seite so zu gestalten, dass sie wenn möglich mit derselben 96-kHz-Rate abtastet. Dies vermeidet die Notwendigkeit, ein Resampling am ressourcenarmen Ende durchzuführen.
Um Probleme mit der DC-Kerbe zu vermeiden, die Ihr Soundkarten-DAC verwendet, können Sie das QPSK-Signal mit 24 kHz auf einen Träger modulieren. Dann würde das Spektrum des modulierten Signals bei DC eine Null haben, was mit Ihrer Kerbe übereinstimmen würde. Es ist möglich, dass die Kerbe überhaupt kein Problem darstellt (insbesondere, wenn sie wirklich nur ein paar Hz breit ist, wie Sie vorgeschlagen haben). In diesem Fall könnten Sie möglicherweise mit einem noch einfacheren Schema auskommen, das nur im Basisband funktioniert und die Trägermodulation insgesamt umgeht.
QPSK ist aufgrund seiner Einfachheit sowohl beim Sender als auch beim Empfänger eine gute Wahl. Bei Ihrem SNR könnten Sie mit einem komplizierteren Schema wie der Quadraturamplitudenmodulation (QAM) eine größere spektrale Effizienz erzielen , aber die Eigenschaft der konstanten Hüllkurve von PSK-Signalen ist vom Standpunkt der Empfängerkomplexität aus attraktiv. Wenn Sie in Zukunft wirklich mehr Bits pro Symbol benötigen, können Sie zu einer PSK-Konstellation höherer Ordnung wie 8- oder 16-PSK wechseln. Diese sind jedoch im Hinblick auf die Leistung der Bitfehlerrate im Vergleich zu QAM-Konstellationen suboptimal.
Was eine Bibliotheksimplementierung angeht, ist mir nichts bekannt, was Sie einfach vorbeischauen könnten, insbesondere für eine eingebettete Plattform. Ihre Empfängerimplementierung ist wahrscheinlich in gewissem Maße mit der Hardwareschnittstelle verbunden. Möglicherweise finden Sie einige vorhandene Implementierungen für die verschiedenen Schritte, die für den Demodulator erforderlich sind, aber Sie müssen mindestens das anpassen, was Sie möglicherweise finden, um auf Ihrer Plattform gut zu funktionieren. Das GNU Radio- Projekt ist ein guter Ort, um nach C ++ - Implementierungen vieler verschiedener Kommunikationssignalverarbeitungsvorgänge zu suchen, und es bietet möglicherweise sogar einen nützlichen Rahmen für die Implementierung des Senders an Bord Ihres PCs. Zusammenfassend umfassen die allgemeinen Schritte, die Ihr Empfänger ausführen müsste, Folgendes:
Wenn eine Trägerfrequenz ungleich Null verwendet wurde:
Dies mag nach einem komplizierten Prozess klingen, aber der Bau eines praktischen Empfängers für eine einfache Situation wie diese kann sehr aufschlussreich sein. Kommentieren Sie einfach, ob ich noch etwas ausgelassen habe.
quelle