Wie synchronisieren sich Sender- und Empfängeruhrzeiten bei der Datenkommunikation?

Bei der asynchronen Datenkommunikation umfasst die Initiierung der Datenkommunikation zwischen zwei Stationen (Sender und Empfänger) die Synchronisierung ihrer Uhren, um sicherzustellen, dass beide Stationen dieselben Bitzeiten vereinbaren. Wie läuft dieser Prozess ab? Wie einigen sich Sender und Empfänger auf die gleiche Taktzeit? Wenn möglich, weisen Sie mich auch auf einige Ressourcen hin.

Siehe Taktwiederherstellung für schnelle Kommunikation.
Gute Frage, die ich gerade stellen wollte

Antworten (4)

Diese Uhrzeitsynchronisierung muss nicht unbedingt vorher stattfinden ; es passiert oft vor und während der Übertragung.

Was Sie vielleicht in der üblichen Literatur (insbesondere: Sklar und Proakis, imho) lesen möchten, ist die Zeitsynchronisation .

Wie man das implementiert, hängt von vielen Unbekannten ab , daher kann ich Ihnen keine Antwort geben. In Wirklichkeit gibt es buchstäblich Hunderte von Ansätzen, um das Timing zu synchronisieren, und welcher Sie wählen, hängt unter anderem davon ab

  • physikalischer Zusammenhang von Symbolrate und Trägerfrequenz
  • Modulation
  • Signalmodell
  • Statistisches Rauschmodell
  • Statistisches Interferenzmodell
  • Empfänger-Imperfektionsmodelle (Nichtlinearitäten, I/Q-Ungleichgewichte, Taktdriften, Abtast-Jitter, …)
  • Länge der Übertragung
  • Kohärenzzeit Ihres Kanals (mit der eng verbunden ist)
  • Doppler-Bandbreite Ihres Kanals
  • Statistisches Modell der Taktverschiebungen
  • erschwinglicher Overhead für die CSI-Erfassung im Vergleich zur Nutzdatenrate
  • Empfängerbetriebseigenschaften, Kompromiss zwischen ARQ und Robustheit usw
  • Speicher am Empfänger verfügbar
  • verfügbare Rechenleistung beim Empfänger
  • Stromverbrauchsgrenzen und Kompromisse
  • MIMO-Notwendigkeit
  • Empfängerkosten vs. BER-Kompromiss
  • Verwendete Kanalcodierung (Effekt von SER, am Ende)
  • Mehrbenutzerfähigkeiten

Wenn Sie eines dieser Bücher auswählen, stellen sie wahrscheinlich einige klassische Synchronisierer vor – und Sie können diese immer noch sehr oft in Anwendung finden! Aber all das ist schon relativ anwendungsspezifisch. Zum Beispiel muss ein Regelkreis, der einen QPSK-Empfang stabilisiert, nicht unbedingt (und normalerweise: nicht, weil ein paar mathematische Tricks hier nicht funktionieren) für 8PSK funktionieren.

Wenn Sie wirklich nur daran interessiert sind, dass die Zeitschätzung vor der eigentlichen Nutzlastübertragung erfolgt, sind Sie hinter Präambeln her . Das sind bekannte Sequenzen, nach denen der Empfänger sucht, um die Parameter des Kanals und der Übertragung abzuschätzen – das Timing ist einer dieser Parameter.

Die Übertragung beginnt mit der Codierung des zeitdiskreten Symbolstroms S [ N ] auf ein zeitkontinuierliches Basisbandsignal j ( T ) = B ( S [ T T 0 ] ) .

In einem einfachen Basisbandsystem wird dies unverändert übertragen:

T X ( T ) = j ( T )

Auf der Empfangsseite hat das Signal ein LTI-System mit einer im Grunde unbekannten Impulsantwort durchlaufen H ( T ) das beinhaltet einen Verstärkungsfaktor, es gibt additives Rauschen und die Symbolperiode T 0 hat auch einen zusätzlichen Fehlerbegriff:

R X ( T ) = j ( T ) H ( T ) + N ( T ) = B ( S [ T T 0 + T e ] ) H ( T ) + N ( T )

Wir wissen das

  • H ( T ) ist kausal und nah dran δ ( T ) , und
  • T e ist nahe 0,

also ist nicht alle hoffnung verloren. Bei langsamen Übertragungen ist es oft möglich, diese Begriffe vollständig zu ignorieren oder sie nach dem Abtasten verschwinden zu sehen.

Beispielsweise eine UART-Verbindung, die das erste Datenbit anderthalb Bitzeiten nach Erkennung der ersten Flanke des Startbits abtastet ( T 0 ):

S [ 1 ] = B 1 ( R X ( T ) δ ( T 3 2 ( T 0 + T e ) T 0 ) + N ( T ) )

Nun, wenn | H ( T ) | < ϵ für T > T 0 2 können wir ziemlich sicher sein, dass der Wert am Abtastpunkt nur durch das Signal des Senders, den Verstärkungsfaktor des Kanals und das dazwischen aufgenommene Rauschen beeinflusst wird.

Für RS-232 können wir verwenden

  • B ( M A R K ) = 12 v
  • B ( S P A C E ) = 12 v

und das Gegenteil

  • B 1 ( X ) = { M A R K , Wenn  3 v > X > 15 v , S P A C E , Wenn  3 v < X < 15 v , E R R Ö R ansonsten

Wenn | N ( T ) | < 3 v , können wir dann den Rauschterm ignorieren. Da wir auf der Empfängerseite niedrigere Spannungen zulassen, können wir auch mit jeder Verstärkung dazwischen umgehen 0,5 Und 1 leicht. Wenn der Gewinn passiert 0,75 , dann können wir sogar mit Lärm bis zu umgehen ± 6 v , daher gibt es normalerweise auch eine Beziehung zwischen Fehlertermen.

Damit bleibt die T e Begriff. Die Abtastpunkte sind gleichmäßig verteilt bei T N = T 0 + 1 + 2 N 2 ( T 0 + T e ) , also verschiebt sich der Abtastpunkt in der Bitperiode um T e in jedem Bit. Für größere N , kommen wir entweder an den Punkt, wo H ( T 0 2 + N T e ) > ϵ (d. h. der Abtastpunkt wird noch vom vorherigen Symbol beeinflusst, mit T e < 0 ), oder H ( T 0 2 N T e ) > ϵ (dh der Abtastpunkt ist in das nächste Symbol gerutscht, mit T e > 0 ).

RS-232 löst dies durch Begrenzung N < 11 , und danach neu synchronisieren.

Bei anderen Protokollen läuft es immer darauf hinaus, die Fehlerbegriffe zu identifizieren und entweder Bedingungen zu finden, unter denen Fehler ignoriert werden können, oder sie aktiv zu korrigieren.

Zum Beispiel, wenn Sie zeitdiskret bestimmen können H [ N ] Übertragungsfunktion für Ihren Übertragungskanal (wobei N Oversampling n ist), dann können Sie anwenden H 1 [ N ] numerisch -- damit dies funktioniert, benötigen Sie eine Startphase für Ihre Verbindung, mit der Sie bestimmen können H [ N ] , wie z. B. die Einarbeitungsphase in analoge und DSL-Modemanschlüsse).

Wenn Sie Modulations- und Demodulationsschritte dazwischen haben, führt dies zu Fehlertermen für die Taktdifferenz der Modulations- und Demodulationsuhren - ermitteln und korrigieren Sie diese bei Bedarf. Wenn Sie einen direkten Quadraturmodulator oder -demodulator verwenden, erhalten Sie Fehlerausdrücke für die Verstärkungsdifferenz, den Phasenversatz (Unterschied von 90 Grad) zwischen I- und Q-Kanälen und den DC-Versatz pro Kanal. Für ein Superheterodyn-System gibt es jedoch weniger Fehlerterme H ( T ) wird schwieriger zu kompensieren sein.

Um die Uhrdrift zu kompensieren, können Sie eine Schaltung bauen, die versucht, die Uhr des Senders aus dem Datenstrom wiederherzustellen. Dies funktioniert deutlich besser, wenn die Daten so codiert sind, dass nach einer begrenzten Anzahl von Symbolzeiten eine Flanke garantiert ist, auf die synchronisiert werden kann – zum Beispiel 8b10b-Codierung auf PCIe-Verbindungen.

All dies beruht auf einer Protokollkonvention zwischen Sender und Empfänger, die es dem Empfänger ermöglicht, den absoluten Wert eines Fehlerterms zu bestimmen. Je nach Anwendung werden diese Messungen einmalig beim Einrichten, kontinuierlich oder in bestimmten Zeitabständen durchgeführt:

  • UART bestimmt die Startzeit mit einem Startbit und ignoriert Fehlerausdrücke, da sie zu klein sind, um die Übertragung zu beeinflussen
  • PCIe führt eine kurze Link-Trainingsphase durch und passt sich später kontinuierlich an
  • DSL macht eine lange Link-Trainingsphase und passt sich später kontinuierlich an. Die Trainingsphase ist wegen der Übertragungsfunktion so lang H ( T ) wird wahrscheinlich immer noch große Werte für haben H ( N T 0 ) mit N = 1 , 2 , 3 .
  • WiFi führt eine kurze Link-Trainingsphase mit einer Präambel vor jedem Paket durch
  • USB bis 2.0 hat eine ziemlich kurze Präambel, und ich denke, sie führen auch innerhalb des Pakets zumindest eine gewisse Synchronisation durch
  • Die meisten auf QAM basierenden Modulationen haben ein Pilotsymbol in definierten Intervallen, das eine bekannte Amplitude und Phase im Basisband hat
  • QAM + OFDM-Modulationen können einen kontinuierlichen Pilot in einem Unterkanal oder Pilotsymbole in definierten Intervallen in jedem Unterkanal verwenden (letzteres kompensiert den Frequenzgang des verwendeten Bands).
  • ...
wow ... +1 für die Antwort, obwohl ich nicht sicher bin, ob ich Ihre Antwort als verständlich bezeichnen würde. Ich arbeite seit fast zwei Jahrzehnten an verschiedenen Kommunikationssystemen (von Ihren Grundlagen bis hin zu Hochgeschwindigkeits-PCIe und USB3) und Ihre Antwort erinnert mich nur daran, warum ich die Schule abgebrochen habe. :-/ Alle Informationen sind da, aber es ist nicht zugänglich.
Meine Erfahrung ist, dass unterschiedliche Menschen unterschiedliche Herangehensweisen an Probleme benötigen, daher wollte ich eine ergänzende Antwort zu den bereits vorhandenen geben.
Ich stimme voll und ganz zu, weshalb ich Ihrer Antwort +1 gegeben habe.

Für einen einfachen UART müssen die Datengeschwindigkeiten vorher vereinbart werden, aber um den Empfangstakt mit den Daten zu synchronisieren, ist ein Takt erforderlich, der um ein Vielfaches schneller als die Datenrate läuft. Die Synchronisation erfolgt wie folgt: -

Geben Sie hier die Bildbeschreibung ein

Die "schnelle" Uhr in diesem Beispiel läuft 8x schneller als die Bitrate und testet bei jeder positiven Flanke der Uhr die Daten auf der Suche nach einem Startbit. Wenn das passiert, wartet die Schaltung 12 schnelle Taktzyklen und "misst" den Wert des ersten Bits. Von diesem Punkt an würde es die Daten jeden 8. Taktzyklus messen. Hier ist ein bisschen detaillierter mit einem UART, der eine 16x-Uhr verwendet: -

Geben Sie hier die Bildbeschreibung ein

Ich bin nicht auf einige Feinheiten eingegangen, wie z. B. das Testen mehrerer Symbole, um sicherzustellen, dass kein Rauschen vorhanden ist.

Einige gute Antworten schon, es wäre gut, wenn Sie angeben könnten, ob Sie sich mehr für die Auswahl der Bitrate oder die Wartung von Taktdrift oder Fehler interessieren.

Die Tatsache, dass Sie asynchrone Kommunikation erwähnen, könnte bedeuten, dass Sie daran interessiert sind, wie die Bitabtastintervalle festgelegt werden, und zwei der Antworten decken diese Bestimmung der mittleren Bitabtastung sehr gut ab. Diese Funktion wird von einem UART-IC oder einer Softwarebibliothek gehandhabt, wenn eine serielle Bit-Bang-Schnittstelle implementiert wird. Die einzige Zeit, in der Sie sich engagieren müssen, ist Neugier oder wenn Sie vorhaben, Ihren eigenen Bit-Banging-Code zu schreiben.

Die Taktdrift über ein einzelnes ASYNCH-Wort kann für TX und RX insgesamt 5 % betragen, wenn alle anderen Dinge gleich sind, aber viel mehr, als jeder Kristall oder Resonator driften könnte. Widerstands- und siliziumbasierte Uhren mit oder ohne Trimmung können normalerweise auch einen kombinierten Fehler von 5 % erreichen. Wenn beide Enden unter einem lockeren Timing leiden, beträgt der maximale Fehler jeweils 2,5 %, um die beiden entgegengesetzten Fehler auszugleichen (einer langsam, der andere schnell).

Allerdings könnte Sie auch interessieren, wie die Bitrate (Kehrwert der Bitperiode) zu Beginn der Kommunikation gewählt wird. Dies ist eine Aktivität auf höherer Ebene, die im Allgemeinen nicht mit Hardware durchgeführt wird und normalerweise nach Möglichkeit vermieden wird, indem der Benutzer eine gemeinsame Bitrate sowohl auf dem sendenden als auch auf dem empfangenden Gerät auswählen muss. Wenn diese deterministische Operation unpraktisch oder unmöglich ist, muss das eine oder andere Gerät Intelligenz verwenden, um die Bestimmung vorzunehmen. Wenn Sie eine Simplex-Datenverbindung (eine Richtung) haben, muss der Empfänger die Bestimmung vornehmen, wenn Sie eine Duplex-Verbindung haben, ist dasselbe möglich und es besteht die Möglichkeit, dass der Sender an dem Prozess teilnimmt. Das klassische Beispiel dafür, wo diese Bitratenbestimmung verwendet wurde, sind ältere RS-232-Smart-POTS-Einwahlmodems. Das beliebteste Auto-BaudSystem wurde durch den AT-Befehlssatz der Hayes Corporation ermöglicht. Sie hielten auch das Patent für die In-Band-Befehlsmodusanforderung Idle +++ Idle , die von der gesamten Industrie gekapert/übernommen wurde. Sie forderten den Absender auf, eine bestimmte Zeichenfolge als die ersten beiden Zeichen zu senden, wenn er die Kommunikation einleitete. Die Zeichenfolge war das (großgeschriebene) ATZeichenfolge, die sie für die meisten ihrer Befehlspräfixe verwendeten. Beim ersten Senden befand sich das Modem in einem Wartezustand, der ein gewisses Maß an nicht standardmäßiger Empfängerlogik verwenden würde (ich vermute, dass es auf die maximale Bitrate eingestellt war und eine Nachschlagetabelle hatte, die den Kauderwelsch zur Bestimmung verwendete die Parameter für langsamere Bitraten), um die erwartete Bitfolge zu analysieren. Daraus könnte er die UART-Parameter des Senders ermitteln, nämlich Wortlänge, Paritätsstatus und Bitrate. Es würde dann die internen Parameter passend einstellen und die weitere Kommunikation wäre ab dem nächsten Zeichen zuverlässig. Eine andere Methode bestand darin, dass der Sender einen Reset-Befehl sendete und auf eine lesbare ACKnowledge-Antwort wartete. Wenn die Bitraten nicht übereinstimmten, würde der Empfänger entweder nicht antworten, wenn er keine Zeichen decodiert hatte, oder möglicherweise ein NACK senden, wenn es nicht als bekannter Befehl decodiert wurde. Der Sender würde weiterhin alle verfügbaren Parameter ausprobieren, in der Hoffnung, dass der Empfänger für den Empfang mit einem von ihnen eingerichtet wurde, an diesem Punkt würde die ACK eine Übereinstimmung anzeigen und der Rest der Kommunikation würde auf die Bitrate abgestimmt.