IIR Chebyshev Type 1 - II Order
Second-order Chebyshev Type 1 IIR filter with steeper roll-off than Butterworth. Features passband ripple for sharper frequency selectivity.
Introduction
The IIR Chebyshev Type 1 - II Order block implements a second-order Chebyshev Type 1 IIR filter operating in real time on FPGA. The component includes automatic filter coefficient calculation based on filter type (low/high pass), cutoff frequency, and passband ripple.
Chebyshev Type 1 filters have a steeper roll-off than Butterworth filters and feature passband ripple. The filter is named after Pafnuty Chebyshev because its mathematical characteristics are derived from Chebyshev polynomials.
Pin Description
Properties
Select between low pass and high pass filter
Filter type selection. Available values: Low Pass, High Pass, default Low Pass.Default: Low Pass
Options: Low Pass High Pass
Set the filter pole/zero position according to the selected bandwidth in KHz
Cutoff frequency in kHz. Must be less than half the sampling frequency (Nyquist limit).Default: 1000
The maximum ripple allowed below unity gain in the passband. Specified in decibels, as a positive number.
Passband ripple in dB. Higher values allow steeper roll-off but more passband variation. Typical values: 0.5 to 3 dB.Default: 0.1
Select input data type
Input data format selection. Available values: Unsigned 16 bit, Signed 17 bit, default Unsigned 16 bit.Default: UINT16
Options: UINT16 INT17
Usage
Chebyshev Type 1 Filter Characteristics
Chebyshev Type 1 filters minimize the error between the idealized and actual filter characteristic over the operating frequency range, achieving this with ripples in the passband:
- Steeper Roll-off: Sharper transition between passband and stopband than Butterworth
- Passband Ripple: Controlled ripple in the passband (specified in dB)
- Monotonic Stopband: No ripple in the stopband
- Higher Selectivity: Better frequency discrimination for same filter order
Comparison with Other Filters
| Filter Type | Passband | Stopband | Roll-off |
|---|---|---|---|
| Butterworth | Flat | Flat | Moderate |
| Chebyshev 1 | Ripple | Flat | Steep |
| Chebyshev 2 | Flat | Ripple | Steep |
| Elliptic | Ripple | Ripple | Steepest |
Scattered Lookahead Implementation
To enable real-time FPGA operation at full clock rate, the filter uses the Scattered Lookahead technique:
The standard IIR equation:
$$ y[n] = b_0 x[n] + b_1 x[n-1] + b_2 x[n-2] - a_1 y[n-1] - a_2 y[n-2] $$
Is transformed using scattered lookahead to:
$$ y[j] = \sum_{k=0}^{6} b’_k x[j-k] - a’_3 y[j-3] - a’_6 y[j-6] $$
Reference: A universal look-ahead algorithm for pipelining IIR filters
Coefficient Calculation
SciCompiler automatically calculates the filter coefficients. The following Python code provides a reference implementation:
python
import numpy as np
from scipy import signal
def scattered_lookahead_transform(a):
A = np.array([[a[0], 0, 0, 0, 0, ],
[a[1], a[0], 0, 0, 0, ],
[a[2], a[1], a[0], 0, 0, ],
[0, 0, a[2], a[1], a[0], ],
[0, 0, 0, a[2], a[1], ]])
A_inv = np.linalg.inv(A)
D = A_inv * [1, 0, 0, 0, 0]
D1 = D[:,0]
D = D[:,0].reshape(-1, 1)
R = np.array([[ 0, a[2], a[1], a[0], 0, ],
[0, 0, 0, 0, a[2]]])
Qw = np.dot(R, D)
an = [1, Qw[0][0], Qw[1][0]]
bn = D1
return bn, an
N = 2 # Order of the filter
fs = 250*1e6 # Sampling frequency
fc = 5*1e6 # Corner frequency
rp = 1 # Passband ripple in dB
Wn = fc/(fs/2)
b_z, a_z = signal.cheby1(N, rp, Wn, btype='low')
print("original", b_z, a_z)
bn, an = scattered_lookahead_transform(a_z)
bq = np.convolve(bn, b_z)
aq = an
print("scattered", bq, aq)
Typical Applications
- Applications requiring sharper frequency cutoff than Butterworth
- Band-limited signal processing
- Where passband ripple is acceptable for better selectivity
Resources & Timing
- Latency: 8 clock cycles