Field Guide · term

Also known as: NCO, numerically controlled oscillator, DDS

A numerically controlled oscillator (NCO) generates a digital sine and cosine of any programmable frequency from a phase accumulator — a counter that adds a fixed step each sample and looks up the corresponding sine value.1 It is the software equivalent of a local oscillator and the tunable mixer inside a digital down-converter.

phase accumulator+ step each sample sine LUT
An NCO steps a phase accumulator each sample and looks up the sine — a precisely tunable digital oscillator.

How it works

The heart of an NCO is an N-bit phase accumulator. Each sample clock, a constant tuning word (the phase increment) is added to it; the accumulator wraps around modulo 2^N, and its value represents the current phase of the oscillator as a fraction of a full turn. The high bits of the accumulator index a sine lookup table (or drive a CORDIC rotation) to produce the instantaneous amplitude. Taking both sine and cosine gives the complex exponential needed to mix a signal.

The output frequency follows a simple relation: f_out = (tuning word / 2^N) × f_sample. Two properties fall straight out of this:

  • Fine resolution. With a wide accumulator (32 or 48 bits), the smallest frequency step is tiny — sub-hertz at any practical sample rate — so an NCO can be tuned essentially continuously.
  • Instant, phase-continuous retuning. Changing the tuning word takes effect on the next sample without resetting the accumulator, so the phase never jumps. This clean retune is why NCOs are used for hopping and channelised tuning.

In practice

Real NCOs use a lookup table indexed by only the top bits of the accumulator, discarding the rest. This phase truncation introduces small periodic spurs in the spectrum — the digital analogue of phase noise — whose level is set by the number of address bits and the table’s amplitude quantisation. Wider tables and techniques like phase dithering or Taylor-series correction push these spurs down. A pure-software NCO (as in GopherTrunk) can compute the sine directly in floating point and largely sidesteps the truncation-spur problem that constrains fixed-point hardware DDS chips.

Relevance to SDR

Changing the accumulator’s step instantly retunes the NCO, which is how an SDR digitally tunes to a channel: multiply the IQ stream by the NCO’s complex output to shift the wanted channel down to baseband before low-pass filtering and decimation. In GopherTrunk’s down-converters an NCO is exactly this tuning mixer — one per channel in the wideband path — translating each control- or voice-channel frequency to zero IF so the demodulator can work on it. The same accumulator idea also underlies hardware DDS synthesizers used as signal sources.

Sources

  1. Numerically-controlled oscillator — Wikipedia, on phase-accumulator-based digital frequency synthesis. 

See also