Interactive Low-Pass Filter Studio
Bode plot of the discrete low-pass filter (interactive).
Low-Pass Filter Design
The Basics
It has occurred to me that most engineers and scientists are quite familiar with the basic formula of an infinite-impulse response (IIR) low-pass filter (LPF):
$$y[k] = a \times y[k-1] + (1-a)\times x[k],$$ | (1) |
This low-pass filter variation is easy to implement on processors or FPGAs.
Also, such filter should in some way correspond to the following first-order continuous-time transfer function:
$$H(s) = \frac{\omega_c}{s+\omega_c},$$ | (2) |
In this short tutorial, we will derive the relationship between the corner frequency "omega" in the continuous time domain and the "a" coefficient in the sampled time domain.
First-order IIR Low-pass Filter Design & Discretization
A continuous-time domain filter with input and output signals is shown below:
Continuous-time domain signals and a digital filter are represented as:
The formula to discretize a transfer function preceded by a zero-order hold follows:
$$H(z) = \frac{z-1}{z}Z\Big(L^{-1}\big(\frac{H(s)}{s}\big)\Big),$$ | (3) |
From Laplace to Z-domain lookup table:
$$Z\Big(L^{-1}\big(\frac{H(s)}{s}\big)\Big) = Z\Big(L^{-1}\big(\frac{\omega_c}{s(\omega_c+s)}\big)\Big) = \frac{z(1-e^{-\omega_cT})}{(z-1)\times(z-e^{-\omega_cT})},$$ | (4) |
Therefore:
$$H(z)=\frac{Y(z)}{X(z)}=\frac{1-e^{-\omega_cT}}{z-e^{-\omega_cT}},$$ | (5) |
A bit more rearranging leads to:
$$Y(z)(z-e^{-\omega_cT})=X(z)(1-e^{-\omega_cT}),$$ | (6) |
The next step is to take an inverse Z-transform:
$$y[k+1]-y[k]e^{-\omega_cT}=x[k](1-e^{-\omega_cT}),$$ | (7) |
And shift by one sample:
$$y[k] = y[k-1]e^{-\omega_cT} + x[k-1](1-e^{-\omega_cT}),$$ | (8) |
Hence:
$$a = e^{-\omega_cT}$$ | (9) |
MatLab script
A basic MatLab script (below) verifies the equivalency between the continuous transfer function and its discrete time-domain counterpart.
Note that the sampling rate was chosen as 500 Hz and the break frequency as 50 rad/s or ~8 Hz.
% First-order Low-Pass Filter Discretization
%
% Control Systems Academy team
%
% 6/25/2017
clc; format compact
% Continuous time filter
s = tf('s');
w = 50; % rad/s
H = w/(s+w)
T = 1/500;
Hd = c2d(H,T,'zoh')
opts = bodeoptions;
opts.FreqUnits = 'rad/s';
opts.XLim = [0.01, 10000];
opts.Grid = 'on';
bode(H,Hd, opts)
% no more
Magnitude and Phase Bode plots of a continuous low-pass filter with corner frequency 50 rad/s. The discrete counterpart has 200 Hz sampling frequency.
Q: Can IIR (infinite-impulse response) filters become unstable?
A: Yes. These filters have a negative-feedback path and a single incorrect parameter computation can result in oscillations or output out-of-bound instability.
The benefit of IIR filters is their ease of use with constant coefficients and a simple transfer function representation.
FIR filters are generally used in more advanced digital signal processing (DSP), such as in transceivers.
Change log
6/25/2017
4/30/2019
Further Reading
In MatLab, DSPs, and FPGAs.
.
The fundamentals of signal flow.
Introduction to dynamic systems.
It is all sine waves.