Lesson 20 of 30 advanced 4 min read

Before this:Demodulation in codeComplex signals & I/Q

Carrier & frequency recovery

Key takeaways Transmitter and receiver run on independent oscillators, so the signal arrives with a frequency and phase offset — the constellation slowly spins. A phase-locked loop (PLL) measures that error and drives a local oscillator to cancel it. For suppressed-carrier PSK, where the modulation hides the carrier, a Costas loop derives the error from I and Q. Only once the carrier is locked can symbols be read reliably.

Clock recovery found when to sample; this lesson finds the frequency and phase the sampled points are referenced to. Both loops must lock before a decoder can trust its symbols. It builds on demodulation and I/Q.

The offset problem

Your receiver tuned to 851.0125 MHz, but its crystal and the transmitter’s disagree by a few parts per million. The consequence at baseband: the signal is not sitting exactly at zero, and its phase reference is unknown. On the I/Q plane the whole constellation rotates — a frequency offset makes it spin continuously, a phase offset holds it at a fixed wrong angle. Sample a spinning constellation and every symbol decision is garbage.

offset: spinning lock locked: fixed
A frequency offset spins the constellation; carrier recovery cancels it so the points sit still where the decision logic expects them.

The phase-locked loop

The workhorse is a PLL. It is a feedback loop with three parts:

  incoming phase ->[ phase detector ]-> error ->[ loop filter ]->[ NCO ]-.
                          ^                                              |
                          '----------- corrected phase -----------------'
  1. A phase detector compares the incoming phase to the local oscillator’s phase.
  2. A loop filter smooths that error (setting how fast and how steadily it tracks).
  3. A numerically controlled oscillator (NCO) adjusts the local phase/frequency to drive the error toward zero.

Lock achieved, the NCO now matches the incoming carrier, and multiplying the signal by its conjugate de-rotates the constellation to a standstill.

Costas loops for suppressed carriers

PSK and QAM are suppressed-carrier: the modulation is symmetric, so averaged over time there is no steady carrier tone for a plain PLL to grab. A Costas loop solves this by building the phase error from the data itself — it multiplies the in-phase and quadrature arms in a way that yields a usable error signal regardless of which symbol was sent. It is a PLL specialised for carrying no carrier, and it is what locks the phase of the PSK-family signals a digital scanner decodes.

Ordering with clock recovery

Carrier and clock recovery are cooperating loops: timing recovery decides when to sample, carrier recovery decides the phase reference for those samples. Real receivers run them together, sometimes interacting, and only when both are locked does a clean, stationary constellation appear — ready for the symbol decisions that follow. A stubborn frequency offset is a classic cause of a signal that shows energy but never decodes, a symptom the troubleshooting guide returns to.

Quick check: which loop is designed for suppressed-carrier PSK, where no steady carrier tone exists?

Recap

  • Independent oscillators leave a frequency/phase offset that spins the constellation.
  • A PLL — phase detector, loop filter, NCO — measures and cancels the offset.
  • Suppressed-carrier PSK needs a Costas loop, which derives phase error from I and Q.
  • Carrier recovery and clock recovery must both lock before symbols read cleanly.

Next up: keeping the signal at a usable amplitude as it fades — gain and automatic gain control.

Frequently asked questions

Why is there a frequency offset between transmitter and receiver?

The transmitter and receiver each derive their frequencies from independent crystal oscillators, and no two crystals are exactly on frequency — they differ by a few parts per million and drift with temperature. That small mismatch means the received signal arrives slightly off the tuned centre, and its phase constellation slowly rotates until a recovery loop corrects it.

What is the difference between a PLL and a Costas loop?

A plain phase-locked loop locks onto a signal that has an actual carrier tone present. A Costas loop is a variant designed for suppressed-carrier signals like PSK, where the modulation itself removes any steady carrier. It compares the in-phase and quadrature components to derive a phase error even though there is no discrete carrier to lock to directly.