The decimation operation, under some acceptations, consists in low-pass filtering the data before downsampling it. The standard in Python scipy.signal.decimate, in Matlab decimate: Filtering Before Downsampling, or even in R [decimate] (but it is borrowed from Octave), is to use a Chebyshev type I (of order 8, 10 and 8 respectively).
In Matlab cheby1, or at Comparison of Classical IIR Filter Types
, one can find comparative plots, such as:
Basically, Chebyshev filters aim at improving lowpass performance by allowing ripples in either the lowpass-band (Type I) or the highpass-band (Type II), whereas the behavior is monotonic in the complementary band.
With Type I, you are ensured that, if two frequency components in the highpass-band have the same amplitude, the highest frequency amplitude will be lower after filtering, which can be comforting when downsampling afterward.
With Type II, you have the converse in the lowpass-band.
Personally (a kind of coming-out, and I'd be glad to be corrected by my colleagues):
- if my data has precise high-frequency limit (esp. for lectures), and I'm pretty sure of the cutoff, I tend to use type I
- if my data is quite imprecise, noisy, and I care more for relative amplitudes in the low-pass band, I tend to use type II (empirically) to reject the noise, even if I lose sharpness.
Edit from r b-j:
Note in this modified plot, the cheby2 filter had its stopband frequency adjusted so that the -3.01 dB cutoff frequency coincides with the other three filters (and I normalized it to 1). Note that the 5th-order Type I and Type II Tchebyshev filters both transition from -3.01 dB (the edge of the passband) to -30 dB (the edge of the stopband) in exactly the same transition band from a normalized frequency of 1 (passband) to 1.364 (stopband).
So the Type I and Type II Tchebyshev filters have the same performance in terms of sharpness of cutoff, if you compare apples to apples. The main tradeoff between Type I and Type II is where the ripple is. In Type I, the ripple is in the passband (where I usually would rather not see it) and in Type II the ripple is in the stop band (where I usually don't care).
N = 5;
f0 = 1;
w0 = 2*pi*f0;
passband_gain = 10*log10(0.5); % -3.01 dB (half power)
stopband_gain = -30; % dB
% Design a 5th-order analog Butterworth lowpass filter with a cutoff
% frequency of 1 Hz. Multiply by to convert the frequency to radians per
% second. Compute the frequency response of the filter at 4096 points.
[zb,pb,kb] = butter(N, w0, 's');
[bb,ab] = zp2tf(zb,pb,kb);
[hb,wb] = freqs(bb,ab,4096);
% Design a 5th-order Chebyshev Type I filter with the same edge frequency
% and 3.01 dB of passband ripple.
[z1,p1,k1] = cheby1(N, -passband_gain, w0, 's');
[b1,a1] = zp2tf(z1,p1,k1);
[h1,w1] = freqs(b1,a1,4096);
% Design a 5th-order Chebyshev Type II filter with the passband edge
% frequency and 30 dB of stopband attenuation.
w_stopband = w0*cosh((1/N)*acosh(sqrt(10^(-stopband_gain/10)-1)));
[z2,p2,k2] = cheby2(N, -stopband_gain, w_stopband, 's');
[b2,a2] = zp2tf(z2,p2,k2);
[h2,w2] = freqs(b2,a2,4096);
% Design a 5th-order elliptic filter with the same edge frequency, 3.01 dB
% of passband ripple, and 30 dB of stopband attenuation.
[ze,pe,ke] = ellip(N, -passband_gain, -stopband_gain, w0,'s');
[be,ae] = zp2tf(ze,pe,ke);
[he,we] = freqs(be,ae,4096);
% Plot the gain in decibels. Compare the filters.
axis([0 3 -40 5])