Ich suche nach einem Algorithmus, der die Rate von Symbolen in einem Basisbandsignal erfassen kann.
Die Gardner-Methode ist eine Möglichkeit, die Timing-Drift aufzuheben und den Empfänger mit dem Sender zu synchronisieren, wenn die Symbolrate (Anzahl der Abtastungen pro Symbol) bekannt ist. Das MATLAB bietet auch ein Paket, das die Gardner-Methode implementiert.
Aber was ist, wenn wir die Symbolrate nicht kennen? Ich fand einige vorgeschlagene Methoden wie die Verwendung von cyclostationären Eigenschaften von Signalen.
Gibt es ein Paket / eine Implementierung dieser Methoden (oder eine andere Methode) in der MATLAB- oder C-Symbolratenschätzung?
Update Nr. 1:
Dies ist eine einfache Implementierung, die zyklostationäre Eigenschaften verwendet, um die Baudrate zu schätzen, ist jedoch nicht für große Eingaben wie Wave-Dateien geeignet.
Update Nr. 2:
Nach dem Demodulieren und Filtern des empfangenen Signals habe ich ein Basisbandsignal wie:
Symbole werden in diesem Signal als unterschiedliche Formen codiert (z. B. unterschiedliche Spannungspegel, wenn der Sender einen quadratischen Formfilter verwendet). Wie wir sehen können, ist die höchste Frequenz in diesem Signal nicht die Symbolrate.
Ich suche keine neue Lösung / Idee zur Schätzung der Symbolrate. Ich suche nach einer Implementierung einer bekannten Methode (wie zyklostationären oder Wavelet-basierten Methoden) zur Symbolratenschätzung.
Antworten:
Vielleicht kennt Ihr Demodulator die Baudrate bereits
Viele drahtlose Kommunikationsprotokolle setzen die symbol_time auf ein bekanntes ganzzahliges Vielfaches der Chipzeit oder der Trägerzykluszeit. Da Sie das Signal demodulieren können, muss Ihr Demodulator bereits die Chipzeit oder die Trägerzykluszeit kennen. Vielleicht können Sie diese Zeitinformationen nehmen und mit der "bekannten Ganzzahl" multiplizieren, um die symbol_time zu erhalten. dann müssen Sie "nur" die Phasenausrichtung durchführen. Gibt es eine Möglichkeit, diese Zeitinformationen aus Ihrem Demodulator zu ziehen?
FFT
Die Symbolrate entspricht ungefähr der Bandbreite. (Ich höre, dass die Bandbreite von -10 dB das 1,19-fache der Symbolrate für QPSK beträgt - gilt das für alle Signalkonstellationen?)
Wenn Sie ein ausreichend hohes SNR haben, können Sie Ihr Signal über eine FFT senden und die Bandbreite schätzen. Ich denke, das funktioniert in fast jedem Format, das Sie zur Hand haben - das rohe ("echte") modulierte Signal oder das demodulierte ("komplexe" I, Q) Basisbandsignal oder ich allein oder Q allein - aber ich nicht. Ich glaube nicht, dass es funktionieren wird, wenn Sie Phasendaten aus dem obigen "Update # 2" -Diagramm in die FFT einspeisen.
Normalerweise ist es für einen Menschen ziemlich einfach, die Bandbreite von -3 dB in einem Diagramm visuell zu ermitteln. Gibt es eine Matlab-Funktion zum Schätzen der Bandbreite von -3 dB?
Wenn reines weißes Rauschen auftritt - das SNR ist zu schlecht -, hat die "Bandbreite" von -3 dB eindeutig nichts mit einer echten Baudrate zu tun, sondern hängt vollständig von den in Ihrem Demodulator verwendeten Filtern ab.
Autokorrelation
Sie können die Autokorrelation einer Funktion mithilfe der Matlab-Funktionen autocorr () oder xcorr () ermitteln.
Es gibt mindestens drei Möglichkeiten, diese Autokorrelation in eine Schätzung der Baudrate umzuwandeln:
Autokorrelationsnäherung
Viele andere Techniken verwenden eine schneller zu berechnende Approximation der Autokorrelationsfunktion - insbesondere macht es keinen Sinn, die Autokorrelationsamplitude bei Versatzzeiten von mehr als 10 Bitzeiten zu berechnen.
Lassen Sie uns insbesondere die Autokorrelationsfunktion bei nur einem Zeitversatz H berechnen: Verzögern Sie das Signal um einige Zeit H und multiplizieren Sie das verzögerte Signal mit dem ursprünglichen (nicht verzögerten) Signal, und verwenden Sie einen perfekten oder undichten Integrator, um langfristig zu erhalten durchschnittlich. (Wenn Ihr Eingangssignal wie bei den meisten FM- und PSK-Empfängern bereits auf den Bereich +1 -1 begrenzt ist, ist dieser Langzeitdurchschnitt bereits normalisiert. Andernfalls normalisieren Sie ihn durch den Durchschnitt des Quadrats des Signals. Der Laufzeitdurchschnitt liegt garantiert im Bereich von -1 bis +1).
Passen Sie dann H an, um zu versuchen, den normalisierten Langzeitdurchschnitt auf genau 1/2 zu bringen. Verringern Sie den Zeitversatz H, wenn der normalisierte Langzeitdurchschnitt weniger als 1/2 beträgt. mache H länger, wenn der normalisierte Langzeitdurchschnitt mehr als 1/2 beträgt.
Dann ist Ihre Symbolzeit ungefähr symbol_time ~ = 2 * H.
andere Techniken
Das Wikibook "Clock and Data Recovery" klingt vielversprechend, obwohl es noch ein grober Entwurf ist. Könnten Sie es aktualisieren, um festzustellen, welcher Ansatz für Sie am besten funktioniert hat?
Mir wurde gesagt, dass viele Empfänger eine Costas-Schleife oder eine andere relativ einfache Trägerwiederherstellungstechnik verwenden, um die Baudrate zu ermitteln.
Das Kommunikationshandbuch erwähnt einen "Early-Late-Gate-Synchronisierer". Könnten Sie so etwas verwenden?
Einzelheiten
Viele drahtlose Kommunikationsprotokolle fügen dem Signal viele "redundante" Merkmale hinzu, um es dem Empfänger zu erleichtern, das Signal trotz Rauschen zu erfassen und zu decodieren - Startbit, Stoppbit, Gittermodulation, Fehlererkennung und Korrekturbits , konstantes Vorspiel und Header-Bits usw.
Vielleicht hat Ihr Signal eine oder mehrere dieser Funktionen, die Ihnen die Arbeit erleichtern?
quelle
FFT
da das Rauschen hohe Frequenzen im Spektralbereich erzeugen würde. Die Autokorrelation wäre die richtige Lösung für dieses Problem. Es gibt keine Burst-Übertragungen und keine Stoppbits ** / ** Stoppsymbole . Die erste Option, die Sie im Abschnitt zur Autokorrelation vorgeschlagen haben, sind die sogenannten cyclostationären Eigenschaften des Signals. Basierend auf dem in der Frage zitierten Artikel ist diese Methode nicht robust, wenn der Absender einen Filter mit erhöhter Kosinusform und einem kleinen Abfall (a <0,3) verwendet. Das Papier schlägt eine verbesserte Methode vor. Ich hoffe, ich kann eine Implementierung dieser Methode finden.Wenn Sie wissen, dass Ihre Symbolform ein Rechteckimpuls ist, wissen Sie, dass dies eine Synchronisierungsfunktion im Frequenzbereich ist. Wenn Sie eine FFT des Signals nehmen und die Breite der ersten Keule der Daten messen (oder das Zweifache der Keule im Basisband), ist dies Ihre Symbolrate.
Ein früh-spät-Gate-Symbolsynchronisierer kann leicht implementiert werden, aber Sie müssen zuerst die Daten durch einen übereinstimmenden Filter laufen lassen, der mindestens eine Schätzung der Symbolrate erfordert.
quelle
Vielleicht sprechen wir hier über verschiedene Zwecke, aber die automatische Erkennung der Baudrate für UARTs ist im Bereich der Mikrocontroller erledigt - und es scheinen keine fortschrittlichen Algorithmen erforderlich zu sein. Natürlich erfordert Ihre standardmäßige serielle 8-N-1-Verbindung ein START-Bit. Wenn Sie dies finden und die Zeit festlegen, werden Sie eingestellt (insbesondere, wenn man bedenkt, dass nur bestimmte zulässige Baudraten vorhanden sind - 115200, 38400 usw.).
Hier gibt es C-Code für die automatische Prüfung auf einer seriellen Leitung für AVRs (und auch eine kurze Erläuterung des Algorithmus): http://mycal.net/?cpath=/Archive/&id=569&action=9
Aber ich denke, dass Sie etwas Allgemeineres suchen?
quelle
Ich kenne keine vorgefertigte Methode dafür, sie scheint mir ziemlich einzigartig zu sein, zumindest mit der Erfahrung, die ich derzeit habe. Aber aus akademischen Gründen werde ich sehen, ob ich meine Herangehensweise an ein solches Problem aufschreiben kann.
In dieser Situation würde eine Symbolrate als eine Form angezeigt, die gedehnt oder geschrumpft wird. Ich würde die Formen nehmen und sie über das Spektrum "schieben", um die Korrelation zu betrachten. Ich würde dies dann viele Male mit unterschiedlichen "Dehnungen" der Formen tun, hoffentlich gibt es einige Standardsymbolraten, die Sie verwenden können.
Sie sollten dann analysieren können, welche Symbolraten die beste Korrelation hatten.
Es mag einen einfacheren Weg geben, dies zu tun, aber es ist alles, was ich mir gerade einfallen lassen kann.
quelle
Das generische Problem wird als "Taktwiederherstellung" bezeichnet, und oft wird ein Phasenregelkreis verwendet. Jedes Mal, wenn eine Datenflanke auftritt, vergleicht die PLL diese mit der Taktflanke des lokalen VCO. Wenn die lokale Uhr früh oder spät ist, besteht die natürliche PLL-Aktion darin, die VCO-Frequenz nur ein wenig anzupassen. Schließlich wird die Sperre mit einem Vielfachen der Datenflankenrate erreicht.
Es muss eine Mindestanzahl von Datenkanten vorhanden sein, damit die PLL diese erfassen kann. Aus diesem Grund werden Bit-Stuffing und Zeilencodierungen wie 8B10B verwendet, um eine minimale Übergangsdichte zu erzwingen. Andernfalls driftet der PLL-VCO über einen langen Zeitraum mit demselben Bitwert vom Datentakt weg.
Ich vermute, dass Ihr HF-Kanal bereits eine Art Leitungscodierung verwendet. Normalerweise werden DC-vorgespannte Signale bei der HF-Modulation vermieden, und eine Codierung wird verwendet, um DC-Vorspannung (auch bekannt als lange Läufe) zu beseitigen.
quelle
PLL
s ist für die Wiederherstellung der Trägeruhr, während ich nach einer Methode für die Wiederherstellung derWenn Symbole nach dem Filter als unterschiedliche Spannungspegel codiert werden, sehe ich bei Betrachtung Ihrer Wellenform 4 Pegel - das bedeutet log2 (4) Symbole oder 2 Symbole / Baud.
(Dies setzt voraus, dass wir kein gequetschtes phasenmoduliertes Signal sehen, bei dem die zusätzlichen Phaseninformationen verloren gehen.)
quelle