CIC Filter
Understanding the CIC Filter
A CIC filter consists of N integrator stages operating at the high sample rate, followed by a rate change (downsampler for decimation, upsampler for interpolation), followed by N comb stages at the low sample rate. Each integrator is a running accumulator: y[n] = y[n−1] + x[n]. Each comb computes the difference: y[n] = x[n] − x[n−RM], where R is the rate change and M is the differential delay (usually 1 or 2).
The cascade of integrators and combs produces a frequency response equivalent to an R×M-tap moving-average filter raised to the N-th power. The response is sinc-shaped with nulls at multiples of fs,out/M, which naturally suppresses aliased frequency bands during decimation. No multiplications are needed because the coefficients are all unity.
H(z) = [(1 − z−RM) / (1 − z−1)]N
Frequency response:
|H(f)| = |sin(πRMf/fs) / sin(πf/fs)|N
Alias rejection:
≈ N × 20log10(R) dB (approximate)
Bit growth:
Bout = Bin + N × ⌈log2(RM)⌉
Example: R=10, M=1, N=4, Bin=14 → Bout = 14 + 4×4 = 30 bits. Alias rejection ≈ 80 dB.
Decimation Filter Chain Architecture
| Stage | Filter Type | Rate | Purpose | Resources |
|---|---|---|---|---|
| 1st | CIC (N=3-5) | High (fs) | Bulk decimation (10-100x) | N adders, N delays |
| 2nd | Half-band FIR | Medium | 2x decimation | ~15 multipliers |
| 3rd | Compensation FIR | Low (fout) | Passband droop correction | ~31 multipliers |
| 4th (optional) | Channel FIR | Low | Final shaping | ~64 multipliers |
Frequently Asked Questions
Why CIC instead of FIR for decimation?
A 100-tap FIR at 1 GSa/s needs 100 billion multiplications/second. A 5-stage CIC uses ~5 adders and 5 delays with zero multiplications. The FPGA savings are enormous. CIC does the bulk decimation; a small FIR at the output rate corrects passband droop.
What is passband droop?
CIC has a sinc-shaped response causing 2-6 dB droop at the passband edge. A 15-31 tap inverse-sinc FIR at the decimated rate flattens it. This CIC + compensation FIR is the standard digital receiver architecture.
How many stages should you use?
More stages = better stopband rejection but more bit growth and passband droop. N=3 gives ~60 dB rejection for R=10. N=5 gives ~100 dB. Bit growth is N×log2(RM) bits. Typical designs use N=3-5.