Also known as: CIC filter, cascaded integrator-comb filter, Hogenauer filter
A CIC filter (cascaded integrator–comb) is a digital filter built from only integrators and combs — no multipliers, just adders and delays — which makes it the cheapest practical way to change sample rate by a large ratio.1 Introduced by Eugene Hogenauer in 1981, it is the standard first stage of decimation in SDR hardware and the front of software channelizers, where an incoming stream must be brought down by tens or hundreds to one before any multiply-heavy filtering is affordable.2
How it works
A single integrator is a running accumulator, y[n] = y[n−1] + x[n]; a single comb is a
delayed difference, y[n] = x[n] − x[n−M]. Cascade N integrators, drop the rate by R,
then cascade N combs and the two halves collapse — through the identity that an
accumulate-then-difference pair is a moving-average — into an N-th-order boxcar (moving
average) low-pass filter of length R·M. The magic is where each stage runs: integrators
sit before the rate change at the high input rate, combs sit after it at the low
output rate, so the expensive delay lines in the combs are short and clocked slowly. For
interpolation the structure runs in reverse (combs first, upsample, then integrators).
Because every coefficient is effectively ±1, a CIC needs no multipliers at all — only adders, registers, and the decimator/expander. That is why it is baked into the digital down-converters of nearly every SDR chip and FPGA front end: it delivers a huge, run-time-programmable rate change for a handful of gates per stage.
- Bit growth. The integrators have unity-at-DC feedback, so their internal word grows
by
N·log₂(R·M)bits. Fixed-point implementations must size the accumulators for the worst case (and rely on two’s-complement wrap-around cancelling correctly between the integrator and comb sections), or the filter overflows silently. - Passband droop. A boxcar’s frequency response is a
sinc(raised to the N-th power), which sags across the passband and has only modest stop-band rejection between its nulls. The nulls land on the aliasing bands, which is why the shape works, but the droop distorts wanted signals near band edge.
Variants and compensation
The droop is corrected downstream by a short compensation FIR — an inverse-sinc
“CIC comp” filter — usually combined with the final half-band
decimation stages that trim the rate the rest of the way and sharpen the transition band.
Design freedom lives in three integers: the number of stages N (steeper roll-off and
better alias rejection, but more droop and delay), the differential delay M (1 or 2,
setting null placement), and the rate change R. A common SDR chain is CIC → CIC-comp
FIR → half-band cascade → channel FIR, letting the multiplier-free CIC absorb the bulk of
the decimation so the multiply-based filters only ever run at a low rate.
In practice
CIC filters are the workhorse of the first decimation stage in RTL-SDR, Airspy, and HackRF-class receivers and in the digital down-converters of communications ASICs, precisely because a programmable, gate-cheap rate change is exactly what a wideband front end needs before anything selective happens. Their weaknesses — droop and finite alias rejection — are tolerable there because a following FIR fixes both.
Relevance to SDR
Any GopherTrunk decode that starts from a wideband capture leans on CIC-style multiplier-free decimation in the SDR hardware before samples ever reach the host. GopherTrunk’s own software down-conversion favours polyphase and half-band FIR stages rather than a software CIC, but the principle — do the coarse rate reduction with the cheapest filter, then clean up with a short FIR — is the same one that shapes its channelizer front end.
Sources
-
Cascaded integrator–comb filter — Wikipedia, on Hogenauer’s multiplier-free decimation/interpolation structure, bit growth, and passband droop. ↩
-
An Economical Class of Digital Filters for Decimation and Interpolation — E. B. Hogenauer, IEEE Trans. ASSP, 1981 — the seminal CIC paper defining the register-growth and comb/integrator arrangement. ↩