Costas Loop Block

\(\)Der Costas Loop Block ist ein spezialisierter Phasenregelkreis zur Trägerrekonstruktion (Carrier Recovery). Er wird primär für digitale Modulationsverfahren mit unterdrücktem Träger wie BPSK, QPSK oder 8PSK eingesetzt. Im Gegensatz zu einer Standard-PLL kann dieser Block die Phasenlage der Daten von der Phasenlage des Trägers unterscheiden.

1. Theoretische Funktionsweise

Der Block implementiert einen Regelkreis zweiter Ordnung. Er nutzt einen Phase Error Detector (PED), der die Datenmodulation durch mathematische Operationen (z. B. \(I \cdot Q\) bei BPSK) eliminiert. Das verbleibende Fehlersignal steuert einen internen Oszillator (NCO), der das Eingangssignal so dreht, dass die Symbole exakt auf den Entscheidungsachsen (I/Q) liegen.


2. Eingabe-Parameter (Konfiguration)

ParameterTypBeschreibung & Theoretischer Bezug
Loop BandwidthFloat(Theorie: \(\omega_n\)) Bestimmt die Bandbreite des PI-Filters. Ein kleiner Wert (0.01) filtert Rauschen besser, rastet aber langsamer ein. Ein großer Wert (0.1) folgt Frequenzdrifts schneller, erhöht aber den Phasen-Jitter.
OrderInteger(Theorie: \(M-Phasen\)) Die Ordnung der Modulation.
2: BPSK (Phasensprünge von \(180^\circ\))
4: QPSK (Phasensprünge von \(90^\circ\))
8: 8PSK
Use SNRBoolWenn aktiv, passt der Block seine internen Gewinne basierend auf dem geschätzten Rauschabstand an (fortgeschrittene Optimierung).
Min / Max FreqFloat(Einheit: rad/sample) Begrenzt den Fangbereich des NCO. (Berechnung: \(2\pi \cdot f / f_s\)). Verhindert, dass die Loop auf Nachbarkanäle einrastet.

3. Ein- und Ausgänge

Input 0: Complex (I/Q)

  • Signal: Das digitalisierte Basisbandsignal, das meist bereits eine Pulsformung (RRC-Filter) durchlaufen hat.
  • Zustand: Das Signal darf noch einen kleinen Frequenz-Offset und einen beliebigen Phasenfehler aufweisen.

Input 1: noise

  • Dieser Parameter ist nur in Verbindung mit der Use-SNR = true relevant und dient der dynamischen Anpassung des Phasendetektors.
  • Bei sehr hohem Rauschen wird das Fehlersignal durch den Detektor anders gewichtet. Ziel ist es, den Maximum Likelihood (ML) Schätzer für die Phase zu implementieren. Mathematisch gesehen ist der optimale Phasenfehler-Schätzer bei verrauschten Signalen nicht mehr nur ein einfaches \(I \times Q\), sondern muss die Varianz des Rauschens berücksichtigen.

Output 0: Complex (I/Q)

  • Synchronisiertes Signal: Das phasenkorrigierte Signal. In einem Konstellationsdiagramm (QT GUI Constellation Sink) sollten die Punkte nun stabil auf ihren Zielpositionen stehen (z. B. bei $\pm 1$ für BPSK).
  • Hinweis: Der Ausgang ist immer noch komplex, auch wenn bei BPSK die Information nur im Realteil (I) steckt.

Output 1: Phase Error (Optional)

  • Fehlersignal: Gibt den aktuellen Wert des PED aus.
  • Nutzen: Sehr hilfreich zur Diagnose, um zu sehen, ob die Loop “locked” (Signal konvergiert gegen Null) oder “unlocked” bleibt (Signal rauscht stark).

4. Mathematischer Hintergrund der Implementierung

Der Block berechnet intern die Koeffizienten für den PI-Regler (Proportional-Integral) basierend auf der von dir angegebenen Loop Bandwidth (\(\omega_n\)) und einem Standard-Dämpfungsfaktor von \(\zeta = 0.707\) (Kritische Dämpfung):

$$ \alpha = \frac{4\zeta\omega\_n}{1 + 2\zeta\omega\_n + \omega\_n^2} $$

$$ \beta = \frac{4\omega\_n^2}{1 + 2\zeta\omega\_n + \omega\_n^2} $$

Diese Koeffizienten steuern, wie stark der aktuelle Phasenfehler (\(\alpha\)) und wie stark der akkumulierte Fehler (\(\beta\)) die Frequenz des NCO korrigieren.

Zusätzliche Erläuterung

Wenn der Costas Loop Block use_snr aktiviert hat und einen noise-Wert in dB angibt (z. B. 10 dB), geht der Block davon aus, dass die Signalleistung auf 1.0 normiert ist.

  • Nur wenn das Signal durch einen AGC auf 1.0 gehalten wird, ist der noise-Wert (das Verhältnis von Rauschen zu Signal) mathematisch korrekt definiert.
  • Ohne AGC würde ein leiser werdendes Signal das SNR künstlich verschlechtern, obwohl das eigentliche Rauschen gleich geblieben ist.

Die Normierung erfolgt zum Beispiel durch einen vorgeschalteten RMS AGC. Er normiert die Amplitude auf 1 und entkoppelt die Signalstärke von der Phasenkorrektur. Nur durch ein normiertes Signal kann die Costas Loop den Phasenfehler präzise schätzen, ohne durch Amplitudenschwankungen aus dem Tritt zu geraten.

Der noise-Eingang am Costas Loop Block ist kein gewöhnlicher Signal-Eingang (wie für I/Q-Daten), sondern ein Message Port. Er erwartet asynchrone Nachrichten, sogenannte PMTs (Polymorphic Types).

Es gibt zwei gängige Wege, um den noise-Eingang zu bedienen:

Weg A: Statisch / Manuell (über eine GUI)

Dieser Weg macht währen der Entwicklung Sinn, um z.B. Stabilitätsgrenzen zu ermitteln. Über einen QT GUI Range Block (Typ: Float) kann z.B. ein Variable to Message Taps Block angesteuert werden, der dann eine PMT-Nachricht an den noise-Port des Costas Loop schickt.

Weg B: Automatisch (über einen SNR-Schätzer)

Für den Dauereinsatz kann SNR-Schätzer die Costas Loop kontinuierlich mit dem aktuellen Wert versorhen. Die Loop passt ihre interne Mathematik (die Gewichtung im PED) automatisch an, um immer den mathematisch optimalen Phasen-Lock zu halten, ohne dass du eingreifen musst.

MPSK SNR Estimator kann z.B. die Rolle wahrnehmen.