Sidebar: Description of FIR Filters

FIR filters are often used because they are simple and easy to understand [6]. Diagrams of the operation of an FIR filter are shown in Figure S1. An FIR filter works by multiplying an array of the most recent n data samples by an array of constants (called the tap coefficients), and summing the elements of the resulting array. (This operation is commonly called a dot product.) The filter then inputs another sample of data (which causes the oldest piece of data to be thrown away) and repeats the process.

[Figure showing filter operation a) in the time 
domain and b) in the frequency domain]
Sidebar Fig - (a) FIR Filter operation in the time domain. Given the h[k]'s, we are implementing an FIR filter as shown in the diagram. (b) FIR Filter operation in the frequency domain. This diagram shows the frequency response of the filter in part a. Notice that the tap coefficients (h[k]'s) are simply the Fourier series coefficients of the frequency response.

The interesting part of designing FIR filters is translating the desired frequency response into filter tap coefficients. As can be seen from Figure S1a, the equation for the output of an FIR filter in the time domain is:

y(t)=\sum_{k=0}^n h[k] x(t - k/fs) (Eq. S1)

where fs is the sampling frequency and k is the filter tap number. Since a delay of 1/fs in time corresponds to a multiplication by a complex exponential, the corresponding equation in the frequency domain (from Figure S1b) is:

Y(f)=H(f)X(f) (Eq. S2a)

where

H(f)=\sum_{k=0}^n h[k] e^(-j2\pi f k/fs) (Eq. S2b)

is the frequency response of the FIR filter. It can be seen that h[k], the filter tap coefficients, are precisely the Fourier series coefficients of H(f) which is periodic with period fs. Therefore the tap coefficients may be calculated from the following equation:

h[k]=1/fs \int_0^fs H(f) e^(j2\pi k f/fs) df (Eq. S3)

An additional option for improving the performance of the filters, is to apply a window function to the filter tap coefficients [2]. Coefficients affecting the higher frequencies are scaled down to reduce the ripple in the stop band. This can be done as follows:

hw[k]=h[k]w[k] (Eq. S4)

where w[k] are the window scale factors, h[k] are the original tap coefficients, and hw[k] are the windowed tap coefficients. The resulting coefficients may now be used in place of the original ones. An unwanted side effect of windowing, however, is the sacrifice of a sharp roll-off at the cutoff frequency.

So, the design process is to pick the desired frequency response, H(f), and then calculate the tap coefficients (Eq. S3). The actual frequency response will only approximate the desired response because the number of filter taps is finite. Optionally, a window function may then be applied to the filter tap coefficients. The final step is to plot the actual frequency response, H(f), using Eq. S2b to make sure the resulting response is acceptable. Lousy responses can be tweaked using different windowing schemes.