

This look-up approach can easily be extended as far as would be needed for most any practicable Chebyshev filter. To that end I’ve build a simple method that returns a Chebyshev polynomial given the order if the requested order is larger than the look-up table, a NotImplementedException is thrown. This is a O( n*log(n)) operation.īut before we do that, we need a way to find the Chebyshev polynomials of a given order n.

We will first compute the input signal’s FFT, then multiply that by the above filter gain, and then take the inverse FFT of that product resulting in our filtered signal.

We take the identical approach to implementing the Chebyshev filter in code as we did with the Butterworth filter. Typical values for epsilon would range between 0.1 and 1. The ripple factor can be equated to pass-band ripple in Db with the equation: So for example when n = 2, it happens that Tn = 2*x*x - 1, where when substituted into the gain equation we replace x with f/f0. The Tn signifies a Chebyshev polynomial of order n. As with the Butterworth filter, there are the three familiar design parameters, DC Gain, cutoff frequency f0, and filter order n, with an additional parameter, epsilon, for specifying the desired pass-band ripple. The gain expression for Chebyshev filters has a very similar structure to Butterworth filters. Wikipedia has a excellent overview article discussing the Chebyshev filter, so I’ll refer you there for a background treatment of Chebyshev filtering theory. Because Chebyshev filters with an order n above 10 or 12 would be unusual, this table look-up approach can be considered, practically speaking, complete. Here, we will side step the entire computational issue, as legions of engineers have done before us, and simply look up the Chebyshev polynomials, by order, in a switch statement. For an excellent review and comparison of computational techniques for computing Chebyshev polynomials see this paper by Wolfram Koepf. Finding Chebyshev polynomials for a given order represent a computational challenge, and when computed often exhibit various numerical instabilities (often overflow) if not done properly. Simply put, the more ripple allowed in the passband, the steep roll-off the filter achieves.Ĭhebyshev filters derive their name from Chebyshev polynomials. Type 1 Chebyshev filters trade-off steeper roll-off with ripple in the pass band and in the limit of zero ripple, mimic Butterworth filters. We will only discuss the type 1 filters here, as the type 2 filters are rarely used. The Butterworth filter was discussed in a previous blog article.Ĭhebyshev filters come in two flavors defined by either allowing ripple in the pass-band (type 1) or ripple the stop-band (type 2). In this postI will give a short introduction to Chebyshev filters, present a code implementation, and end with a usage example. There are three classes of widely used IIR (recursive) filters in signal processing: Butterworth, Chebyshev, and elliptical.
