Schätzung der Symbolrate (Baudrate)


7

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: Geben Sie hier die Bildbeschreibung ein

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.


Wie sieht Ihr Signal im Basisband aus? Ist es eine Rechteckwelle?
Kellenjb

Es ist ein Basisbandsignal. Es ist ein Filter mit erhöhtem Kosinus. Und es hat etwas weißes Gaußsches Rauschen.
Isaac

Klingt böse für mich. Welche Art von System verwendet dies?
Kellenjb

3
Ich bin fast sicher, dass Sie irgendwo in Ihrem Datenerfassungssystem überlaufen und einwickeln. Ich denke, Sie müssen sich Ihren Filter genauer ansehen und möglicherweise die Topologie ändern.
Connor Wolf

1
Ihr System basiert also auf PAM. ok, ich verstehe nicht wirklich, warum die Taktwiederherstellung so schwierig ist, es sei denn, Sie haben viel Rauschen oder viele mögliche Amplitudenpegel. Grundsätzlich versuchen Sie es nur iterativ mit Baudraten in absteigender Reihenfolge, bis Sie eine treffen, bei der sich keiner der Stichprobenpunkte in einem Zwischenzustand befindet. Da Sie nur versuchen, die Datenrate zu schätzen, sollten Sie ziemlich genaue Ergebnisse erhalten, wenn Sie einige Male eine Stichprobe erstellen und den Durchschnitt senken.
Connor Wolf

Antworten:


2

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:

  • Bei ungefähr unkorrelierten Datenbits ist die Autokorrelation zur Versatzzeit von genau 1 Symbolzeit oder mehr ungefähr Null, und die normalisierte Autokorrelation zu kurzen Versatzzeiten von 0,0 bis 1,0 Bitzeit ist ungefähr linear: 1- (Zeit / Symbolzeit). Passen Sie eine gerade Linie an diese kurzen Versatzzeiten an, um eine gute Schätzung der Autokorrelation zu nicht ganzzahligen Versatzzeiten zu erhalten. Suchen Sie die Versatzzeit t_half, die eine geschätzte Autokorrelation von ungefähr 1/2 entlang dieser angepassten Linie ergibt, und Ihre Symbolzeit ist ungefähr symbol_time ~ = 2 * t_half.
  • Während Burst-Übertragungen machen einige Sender jedes 10. Bit zu einem Startsymbol. Ihre Autokorrelationsfunktion hat wie immer einen Peak zur Versatzzeit 0; Überspringen Sie diesen ersten Peak und suchen Sie nach der positiven Zeit t_positive, die den nächstgrößeren positiven Peak (mit einer erwarteten Amplitude von ungefähr 1/10) in der Autokorrelationsfunktion ergibt. Ihre Symbolzeit ist ungefähr symbol_time ~ = t_positive / 10.
  • Einige Sender verwenden genau 9 Bit-mal nach jedem Startsymbol ein Stoppsymbol und geben dem Stoppsymbol die negative Amplitude des Startsymbols. Suchen Sie nach der Versatzzeit t_negative, die den größten negativen Peak in der Autokorrelationsfunktion ergibt (mit einer erwarteten Amplitude von ungefähr 1/10), und Ihre Symbolzeit ist ungefähr symbol_time ~ = t_negative / 9.

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?


Vielen Dank. Ich bin mir nicht sicher, FFTda 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.
Isaac

FFT: Ja, Rauschen erzeugt bei höheren und niedrigeren Frequenzen eine Reihe von Störspitzen. Wenn Sie jedoch Glück haben, ist Ihr SNR-Verhältnis gut genug, damit alle diese Spitzen unter -3 dB unter den Spitzenpegel fallen, und Sie können sie ignorieren. Führen Sie die FFT durch, wählen Sie einen Cutlevel der Hälfte der Spitzenamplitude aller Bins aus, setzen Sie alle FFT-Bins mit einer Amplitude unterhalb des Cutlevels auf Null und zählen Sie, wie viele (hoffentlich aufeinanderfolgende) Bins ungleich Null noch vorhanden sind. Mit angemessenen Mengen an weißem Rauschen gibt es nicht genug Rauschen, um die hohen und niedrigen Frequenzen über den Cutlevel zu drücken, und so werden sie immer noch auf Null gesetzt und ignoriert
Davidcary

1

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.


0

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?


2
Ja. Ich suche nach einer Möglichkeit, die Symbolrate für ein allgemein empfangenes Signal zu ermitteln, nicht nur für serielle Standardanschlüsse. Darüber hinaus gibt es keine START- oder andere Flaggensymbole, die dem Empfänger helfen könnten.
Isaac

0

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.


0

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.


Vielen Dank. Die Wiederherstellung der Uhr erfolgt jedoch in einem anderen Modul, auf das ich keinen Zugriff habe. PLLs ist für die Wiederherstellung der Trägeruhr, während ich nach einer Methode für die Wiederherstellung der
Isaac

Nichts hindert Sie daran, eine andere PLL für die Symbole zu verwenden. Wenn sie nicht bilevel sind, müssen Sie die Frage wirklich um weitere Informationen zur Codierung erweitern. Sie scheinen zu wissen, was los ist - warum sollten wir also nach Antworten suchen?
Joe Koberg

0

Wenn 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.)


Bitte lesen Sie die Frage noch einmal. Ich suche eine Implementierung zur automatischen Schätzung der Baudrate. Die in der Frage dargestellte Zahl ist nur ein Beispiel.
Isaac
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.