Tải bản đầy đủ (.pdf) (55 trang)

Biosignal and Biomedical Image Processing MATLAB-Based Applications Muya phần 4 ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (7.71 MB, 55 trang )

94 Chapter 4
replaced by the filter coefficients, b(n). Hence, FIR filters can be implemented
using either convolution or MATLAB’s
filter
routine. Eq. (8) indicates that
the filter coefficients (or weights) of an FIR filter are the same as the impulse
response of the filter. Since the frequency response of a process having an im-
pulse response h(n) is simply the Fourier transform of h(n), the frequency re-
sponse of an FIR filter having coefficients b(n) is just the Fourier transform of
b(n):
X(m) =

N−1
n=0
b(n) e
(−j2π mn/N)
(9)
Eq. (9) is a special case of Eq. (5) when the denominator equals one. If
b(n) generally consists of a small number of elements, this equation can some-
times be determined manually as well as by computer.
The inverse operation, going from a desired frequency response to the
coefficient function, b(n), is known as filter design. Since the frequency re-
sponse is the Fourier transform of the filter coefficients, the coefficients can be
found from the inverse Fourier transform of the desired frequency response.
This design strategy is illustrated below in the design of a FIR lowpass filter
based on the spectrum of an ideal filter. This filter is referred to as a rectangular
window filter* since its spectrum is ideally a rectangular window.
FIR Filter Design
The ideal lowpass filter was first introduced in Chapter 1 as a rectangular win-
dow in the frequency domain (Figure 1.7). The inverse Fourier transform of a
rectangular window function is given in Eq. (25) in Chapter 2 and repeated here


with a minor variable change:
b(n) =
sin[2πf
c
T
s
(n − L/2)]
π(n − L/2)
(10)
where f
c
is the cutoff frequency; T
s
is the sample interval in seconds; and L is
the length of the filter. The argument, n − L/2, is used to make the coefficient
function symmetrical giving the filter linear phase characteristics. Linear phase
characteristics are a desirable feature not easily attainable with IIR filters. The
coefficient function, b(n), produced by Eq. (10), is shown for two values of f
c
in Figure 4.4. Again, this function is the same as the impulse response. Unfortu-
*This filter is sometimes called a window filter, but the term rectangular window filter will be used
in this text so as not to confuse the filter with a window function as described in the last chapter.
This can be particularly confusing since, as we show later, rectangular window filters also use
window functions!
TLFeBOOK
Digital Filters 95
F
IGURE
4.4 Symmetrical weighting function of a rectangular filter (Eq. (10) trun-
cated at 64 coefficients. The cutoff frequencies are given relative to the sampling

frequency, f
s
, as is often done in discussing digital filter frequencies. Left: Low-
pass filter with a cutoff frequency of 0.1f
s
/2 Hz. Right: Lowpass cutoff frequency
of 0.4f
s
/2 Hz.
nately this coefficient function must be infinitely long to produce the filter char-
acteristics of an ideal filter; truncating it will result in a lowpass filter that is
less than ideal. Figure 4.5 shows the frequency response, obtained by taking the
Fourier transform of the coefficients for two different lengths. This filter also
shows a couple of artifacts associated with finite length: an oscillation in the
frequency curve which increases in frequency when the coefficient function is
longer, and a peak in the passband which becomes narrower and higher when
the coefficient function is lengthened.
Since the artifacts seen in Figure 4.5 are due to truncation of an (ideally)
infinite function, we might expect that some of the window functions described
in Chapter 3 would help. In discussing window frequency characteristics in
Chapter 3, we noted that it is desirable to have a narrow mainlobe and rapidly
diminishing sidelobes, and that the various window functions were designed to
make different compromises between these two features. When applied to an
FIR weight function, the width of the mainlobe will influence the sharpness of
the transition band, and the sidelobe energy will influence the oscillations seen
TLFeBOOK
96 Chapter 4
F
IGURE
4.5 Freuquency characteristics of an FIR filter based in a weighting func-

tion derived from Eq. (10). The weighting functions were abruptly truncated at 17
and 65 coefficients. The artifacts associated with this truncation are clearly seen.
The lowpass cutoff frequency is 100 Hz.
in Figure 4.5. Figure 4.6 shows the frequency characteristics that are produced
by the same coefficient function used in Figure 4.4 except that a Hamming
window has been applied to the filter weights. The artifacts are considerably
diminished by the Hamming window: the overshoot in the passband has disap-
peared and the oscillations are barely visible in the plot. As with the unwin-
dowed filter, there is a significant improvement in the sharpness of the transition
band for the filter when more coefficients are used.
The FIR filter coefficients for highpass, bandpass, and bandstop filters can
be derived in the same manner from equations generated by applying an inverse
FT to rectangular structures having the appropriate associated shape. These
equations have the same general form as Eq. (10) except they include additional
terms:
b(n) =
sin[π(n − L/2)]
π(n − L/2)

sin[2πf
c
T
s
(n − L/2)]
π(n − L/2)
Highpass (11)
b(n) =
sin[2πf
H
T(n − L/2)]

π(n − L/2)

sin[2πf
L
T
s
(n − L/2)]
π(n − L/2)
Bandpass (12)
TLFeBOOK
Digital Filters 97
F
IGURE
4.6 Frequency characteristics produced by an FIR filter identical to the
one used in Figure 4.5 except a Hamming function has been applied to the filter
coefficients. (See Example 1 for the MATLAB code.)
b(n) =
sin[2πf
L
T(n − L/2)]
π(n − L/2)
+
sin[π(n − L/2)]
π(n − L/2)

sin[2πf
H
T
s
(n − L/2)]

π(n − L/2)
Bandstop (13)
An FIR bandpass filter designed using Eq. (12) is shown in Figure 4.7 for
two different truncation lengths. Implementation of other FIR filter types is a
part of the problem set at the end of this chapter. A variety of FIR filters exist
that use strategies other than the rectangular window to construct the filter coef-
ficients, and some of these are explored in the section on MATLAB implemen-
tation. One FIR filter of particular interest is the filter used to construct the
derivative of a waveform since the derivative is often of interest in the analysis
of biosignals. The next section explores a popular filter for this operation.
Derivative Operation: The Two-Point Central
Difference Algorithm
The derivative is a common operation in signal processing and is particularly
useful in analyzing certain physiological signals. Digital differentiation is de-
TLFeBOOK
98 Chapter 4
F
IGURE
4.7 Frequency characteristics of an FIR Bandpass filter with a coefficient
function described by Eq. (12) in conjuction with the Blackman window function.
The low and high cutoff frequencies were 50 and 150 Hz. The filter function was
truncated at 33 and 129 coefficients. These figures were generated with code
similar to that in Example 4.2 below, except modified according to Eq. (12)
fined as ∆x/∆t and can be implemented by taking the difference between two
adjacent points, scaling by 1/T
s
, and repeating this operation along the entire
waveform. In the context of the FIR filters described above, this is equiva-
lent to a two coefficient filter, [−1, +1]/T
s

, and this is the approach taken by
MATLAB’s
derv
routine. The frequency characteristic of the derivative opera-
tion is a linear increase with frequency, Figure 4.8 (dashed line) so there is
considerable gain at the higher frequencies. Since the higher frequencies fre-
quently contain a greater percentage of noise, this operation tends to produce a
noisy derivative curve. Figure 4.9A shows a noisy physiological motor response
(vergence eye movements) and the derivative obtained using the
derv
function.
Figure 4.9B shows the same response and derivative when the derivative was
calculated using the two-point central difference algorithm. This algorithm acts
TLFeBOOK
Digital Filters 99
F
IGURE
4.8 The frequency response of the two-point central difference algorithm
using two different values for the skip factor: (A) L = 1; (B) L = 4. The sample
time was 1 msec.
as a differentiator for the lower frequencies and as an integrator (or lowpass
filter) for higher frequencies.
The two-point central difference algorithm uses two coefficients of equal
but opposite value spaced L points apart, as defined by the input–output equa-
tion:
y(n) =
x(n + L) − x(n − L)
2LT
s
(14)

where L is the skip factor that influences the effective bandwidth as described
below, and T
s
is the sample interval. The filter coefficients for the two-point
central difference algorithm would be:
TLFeBOOK
100 Chapter 4
F
IGURE
4.9 A physiological motor response to a step input is shown in the upper
trace and its derivative is shown in the lower trace. (A) The derivative was calcu-
lated by taking the difference in adjacent points and scaling by the sample fre-
quency. (B) The derivative was computed using the two-point central difference
algorithm with a skip factor of 4. Derivative functions were scaled by
1
/
2
and re-
sponses were offset to improve viewing.
h(n) =
ͭ
−0.5/Ln=−L
0.5/Ln=+L
0 n ≠ L
(15)
The frequency response of this filter algorithm can be determined by tak-
ing the Fourier transform of the filter coefficient function. Since this function
contains only two coefficients, the Fourier transform can be done either analyti-
TLFeBOOK
Digital Filters 101

cally or using MATLAB’s
fft
routine. Both methods are presented in the exam-
ple below.
Example 4.2 Determine the frequency response of the two-point central
difference algorithm.
Analytical: Since the coefficient function is nonzero only for n =±L, the Fou-
rier transform, after adjusting the summation limits for a symmetrical coefficient
function with positive and negative n, becomes:
X(k) =

L
n=−L
b(n)e
(−j2π kn/N)
=
1
2Lt
s
e
(−j2π kL/N)

1
2LT
s
e
(−j2πk(−L)/N)
X(k) =
e
(−j2πkL/N)

− e
(j2πkL/N)
2LT
s
=
jsin(2πkL/N)
LT
s
(16)
where L is the skip factor and N is the number of samples in the waveform.
To put Eq. (16) in terms of frequency, note that f = m/(NT
s
); hence, m = fNT
s
.
Substituting:
*X(f)* =

j
sin(2πfLT
s
)
LT
s

=
sin(2πfLT
s
)
LT

s
(17)
Eq. (17) shows that *X(k)* is a sine function that goes to zero at f =
1/(LT
s
)orf
s
/L. Figure 4.8 shows the frequency characteristics of the two-point
central difference algorithm for two different skip factors, and the MATLAB
code used to calculate and plot the frequency plot is shown in Example 4.2. A
true derivative would have a linear change with frequency (specifically, a line
with a slope of 2πf ) as shown by the dashed lines in Figure 4.8. The two-point
central difference curves approximate a true derivative for the lower frequencies,
but has the characteristic of a lowpass filter for higher frequencies. Increasing
the skip factor, L, has the effect of lowering the frequency range over which the
filter acts like a derivative operator as well as the lowpass filter range. Note that
for skip factors >1, the response curve repeats above f = 1/(LT
s
). Usually the
assumption is made that the signal does not contain frequencies in this range. If
this is not true, then these higher frequencies could be altered by the frequency
characteristics of this filter above 1/(LT
s
).
MATLAB Implementation
Since the FIR coefficient function is the same as the impulse response of the
filter process, design and application of these filters can be achieved using only
FFT and convolution. However, the MATLAB Signal Processing Toolbox has
a number of useful FIR filter design routines that greatly facilitate the design of
FIR filters, particularly if the desired frequency response is complicated. The

TLFeBOOK
102 Chapter 4
following two examples show the application use of FIR filters using only con-
volution and the FFT, followed by a discussion and examples of FIR filter
design using MATLAB’s Signal Processing Toolbox.
Example 4.2 Generate the coefficient function for the two-point central
difference derivative algorithm and plot the frequency response. This program
was used to generate the plots in Figure 4.8.
% Example 4.2 and Figure 4.8
% Program to determine the frequency response
% of the two point central difference algorithm for
% differentiation
%
clear all, close all;
Ts = .001 % Assume a Ts of 1 msec.
N = 1000; % Assume 1 sec of data; N =
% 1000
Ln = [1 3]; % Define two different skip
% factors
for i = 1:2 % Repeat for each skip factor
L = Ln(i);
bn = zeros((2*L)؉1,1); %Set up b(n). Initialize to
% zero
bn(1,1) = -1/(2*L*Ts); % Put negative coefficient at
% b(1)
bn((2*L)؉1,1) = 1/(2*L*Ts); % Put positive coefficient at
% b(2L؉1)
H = abs(fft(bn,N)); % Cal. frequency response
% using FFT
subplot(1,2,i); % Plot the result

hold on;
plot(H(1:500),’k’); %Plot to fs/2
axis([0 500 0 max(H)؉.2*max(H)]);
text(100,max(H),[’Skip Factor = ’,Num2str(L)]);
xlabel(’Frequency (Hz)’); ylabel(’H(f)’);
y = (1:500) * 2 * pi;
plot(y,’ k’); % Plot ideal derivative
% function
end
Note that the second to fourth lines of the
for
loop are used to build the
filter coefficients, b(n), for the given skip factor, L. The next line takes the
absolute value of the Fourier transform of this function. The coefficient function
is zero-padded out to 1000 points, both to improve the appearance of the result-
TLFeBOOK
Digital Filters 103
ing frequency response curve and to simulate the application of the filter to a
1000 point data array sampled at 1 kHz.
Example 4.3 Develop and apply an FIR bandpass filter to physiological
data. This example presents the construction and application of a narrowband
filter such as shown in Figure 4.10 (right side) using convolution. The data
are from a segment of an EEG signal in the PhysioNet data bank (http://www.
physionet.org). A spectrum analysis is first performed on both the data and the
filter to show the range of the filter’s operation with respect to the frequency
spectrum of the data. The standard FFT is used to analyze the data without
windowing or averaging. As shown in Figure 4.10, the bandpass filter transmits
most of the signal’s energy, attenuating only a portion of the low frequency and
F
IGURE

4.10 Frequency spectrum of EEG data shown in Figure 4.11 obtained
using the FFT. Also shown is the frequency response of an FIR bandpass filter
constructed using Eq. (12). The MATLAB code that generated this figure is pre-
sented in Example 4.3.
TLFeBOOK
104 Chapter 4
high frequency components. The result of applying this filter to the EEG signal
is shown in Figure 4.11.
% Example 4.3 and Figures 4.10 and 4.11
% Application of an FIR bandpass filter based
% on a rectangular window design as shown in Figure 4.7
%
close all; clear all;
N = 1000; % Number of data points
fs = 100; % Sample frequency
load sig_2; % Get data
F
IGURE
4.11 A segment of unfiltered EEG data (upper trace) and the bandpass
filtered version (lower trace). A frequency response of the FIR bandpass filter is
given in Figure 4.10.
TLFeBOOK
Digital Filters 105
wh = .3 * pi; % Set bandpass cutoff
% frequencies
wl = .1*pi;
L = 128; % Number of coeffients
% equals 128
for i = 1:L؉1 % Generate bandpass
% coefficient function

n = i-L/2 ; % and make symmetrical
if n == 0
bn(i) = wh/pi-wl/pi;
else
bn(i) = (sin(wh*n))/(pi*n)-(sin(wl*n))/(pi*n) ;
% Filter impulse response
end
end
bn = bn .* blackman(L؉1)’; % Apply Blackman window
% to filter coeffs.
H_data = abs(fft(data)); % Plot data spectrum for
% comparison
freq = (1:N/2)*fs/N; % Frequency vector for
% plotting
plot(freq,H_data(1:N/2),’k’); % Plot data FFT only to
%fs/2
hold on;
%
H = abs(fft(bn,N)); % Find the filter
% frequency response
H = H*1.2 * (max(H_data)/max(H)); % Scale filter H(z) for
% comparison
plot(freq,H(1:N/2),’ k’); % Plot the filter
% frequency response
xlabel(’Frequency (Hz)’); ylabel(’H( f)’);
y = conv(data,bn); % Filter the data using
% convolution
figure;
t = (1:N)/fs; % Time vector for
% plotting

subplot(2,1,1);
plot(t(1:N/2),data(1:N/2),’k’) % Plot only 1/2 of the
% data set for clarity
xlabel(’Time (sec)’) ;ylabel(’EEG’);
subplot(2,1,2); % Plot the bandpass
% filtered data
plot (t(1:N/2 ), y(1:N/2),’k’);
ylabel(’Time’); ylabel(’Filtered EEG’);
TLFeBOOK
106 Chapter 4
In this example, the initial loop constructs the filter weights based on Eq.
(12). The filter has high and low cutoff frequencies of 0.1π and 0.3 π radians/
sample, or 0.1f
s
/2 and 0.3f
s
/2 Hz. Assuming a sampling frequency of 100 Hz
this would correspond to cutoff frequencies of 5 to 15 Hz. The FFT is also used
to evaluate the filter’s frequency response. In this case the coefficient function
is zero-padded to 1000 points both to improve the appearance of the frequency
response curve and to match the data length. A frequency vector is constructed
to plot the correct frequency range based on a sampling frequency of 100 Hz.
The bandpass filter is applied to the data using convolution. Two adjustments
must be made when using convolution to implement an FIR filter. If the filter
weighting function is asymmetrical, as with the two-point central difference
algorithm, then the filter order should be reversed to compensate for the way
in which convolution applies the weights. In all applications, the MATLAB
convolution routine generates additional points (N = length(data) + length(b(n) −
1) so the output must be shortened to N points. Here the initial N points are
taken, but other strategies are mentioned in Chapter 2. In this example, only the

first half of the data set is plotted in Figure 4.11 to improve clarity.
Comparing the unfiltered and filtered data in Figure 4.11, note the sub-
stantial differences in appearance despite the fact that only a small potion of the
signal’s spectrum is attenuated. Particularly apparent is the enhancement of the
oscillatory component due to the suppression of the lower frequencies. This
figure shows that even a moderate amount of filtering can significantly alter the
appearance of the data. Also note the 50 msec initial transient and subsequent
phase shift in the filtered data. This could be corrected by shifting the filtered
data the appropriate number of sample points to the left.
INFINITE IMPULSE RESPONSE (IIR) FILTERS
The primary advantage of IIR filters over FIR filters is that they can usually
meet a specific frequency criterion, such as a cutoff sharpness or slope, with a
much lower filter order (i.e., a lower number of filter coefficients). The transfer
function of IIR filters includes both numerator and denominator terms (Eq. (4))
unlike FIR filters which have only a numerator. The basic equation for the IIR
filter is the same as that for any general linear process shown in Eq. (6) and
repeated here with modified limits:
y(k) =

L
N
n=1
b(n) x(k − n) −

L
D
n=1
a(n) y(k − n) (18)
where b(n) is the numerator coefficients also found in FIR filters, a(n)isthe
denominator coefficients, x(n) is the input, and y(n) the output. While the b(n)

coefficients operate only on values of the input, x(n ), the a(n) coefficients oper-
TLFeBOOK
Digital Filters 107
ate on passed values of the output, y(n) and are, therefore, sometimes referred
to as recursive coefficients.
The major disadvantage of IIR filters is that they have nonlinear phase
characteristics. However if the filtering is done on a data sequence that totally
resides in computer memory, as is often the case, than so-called noncausal
techniques can be used to produce zero phase filters. Noncausal techniques use
both future as well as past data samples to eliminate phase shift irregularities.
(Since these techniques use future data samples the entire waveform must be
available in memory.) The two-point central difference algorithm with a positive
skip factor is a noncausal filter. The Signal Processing Toolbox routine
filt-
filt
described in the next section utilizes these noncausal methods to imple-
ment IIR (or FIR) filters with no phase distortion.
The design of IIR filters is not as straightforward as FIR filters; however,
the MATLAB Signal Processing Toolbox provides a number of advanced rou-
tines to assist in this process. Since IIR filters have transfer functions that are
the same as a general linear process having both poles and zeros, many of the
concepts of analog filter design can be used with these filters. One of the most
basic of these is the relationship between the number of poles and the slope, or
rolloff of the filter beyond the cutoff frequency. As mentioned in Chapter 1, the
asymptotic downward slope of a filter increases by 20 db/decade for each filter
pole, or filter order. Determining the number of poles required in an IIR filter
given the desired attenuation characteristic is a straightforward process.
Another similarity between analog and IIR digital filters is that all of the
well-known analog filter types can be duplicated as IIR filters. Specifically the
Butterworth, Chebyshev Type I and II, and elliptic (or Cauer) designs can be

implemented as IIR digital filters and are supported in the MATLAB Signal
Processing Toolbox. As noted in Chapter 1, Butterworth filters provide a fre-
quency response that is maximally flat in the passband and monotonic overall.
To achieve this characteristic, Butterworth filters sacrifice rolloff steepness;
hence, the Butterworth filter will have a less sharp initial attenuation characteris-
tic than other filters. The Chebyshev Type I filters feature faster rolloff than
Butterworth filters, but have ripple in the passband. Chebyshev Type II filters
have ripple only in the stopband and a monotonic passband, but they do not
rolloff as sharply as Type I. The ripple produced by Chebyshev filters is termed
equi-ripple since it is of constant amplitude across all frequencies. Finally, ellip-
tic filters have steeper rolloff than any of the above, but have equi-ripple in both
the passband and stopband. In general, elliptic filters meet a given performance
specification with the lowest required filter order.
Implementation of IIR filters can be achieved using the
filter
function
described above. Design of IIR filters is greatly facilitated by the Signal Process-
ing Toolbox as described below. This Toolbox can also be used to design FIR
filters, but is not essential in implementing these filters. However, when filter
TLFeBOOK
108 Chapter 4
requirements call for complex spectral characteristics, the use of the Signal Pro-
cessing Toolbox is of considerable value, irrespective of the filter type. The
design of FIR filters using this Toolbox will be covered first, followed by IIR
filter design.
FILTER DESIGN AND APPLICATION USING THE MATLAB
SIGNAL PROCESSING TOOLBOX
FIR Filters
The MATLAB Signal Processing Toolbox includes routines that can be used to
apply both FIR and IIR filters. While they are not necessary for either the design

or application of FIR filters, they do ease the design of both filter types, particu-
larly for filters with complex frequency characteristics or demanding attenuation
requirements. Within the MATLAB environment, filter design and application
occur in either two or three stages, each stage executed by separate, but related
routines. In the three-stage protocol, the user supplies information regarding the
filter type and desired attenuation characteristics, but not the filter order. The
first-stage routines determine the appropriate order as well as other parameters
required by the second-stage routines. The second stage routines generate the
filter coefficients, b(n), based the arguments produced by the first-stage routines
including the filter order. A two-stage design process would start with this stage,
in which case the user would supply the necessary input arguments including
the filter order. Alternatively, more recent versions of MATLAB’s Signal Pro-
cessing Toolbox provide an interactive filter design package called FDATool
(for filter design and analysis tool) which performs the same operations de-
scribed below, but utilizing a user-friendly graphical user interface (GUI). An-
other Signal Processing Toolbox package, the SPTool (signal processing tool)
is useful for analyzing filters and generating spectra of both signals and filters.
New MATLAB releases contain detailed information of the use of these two
packages.
The final stage is the same for all filters including IIR filters: a routine
that takes the filter coefficients generated by the previous stage and applies them
to the data. In FIR filters, the final stage could be implemented using convolu-
tion as was done in previous examples, or the MATLAB
filter
routine de-
scribed earlier, or alternatively the MATLAB Signal Processing Toolbox routine
filtfilt
can be used for improved phase properties.
One useful Signal Processing Toolbox routine determines the frequency
response of a filter given the coefficients. Of course, this can be done using the

FFT as shown in Examples 4.2 and 4.3, and this is the approach used by the
MATLAB routine. However the MATLAB routine
freqz
, also includes fre-
quency scaling and plotting, making it quite convenient. The
freqz
routine
TLFeBOOK
Digital Filters 109
plots, or produces, both the magnitude and the phase characteristics of a filter’s
frequency response:
[h,w] = freqz (b,a,n,fs);
where again
b
and
a
are the filter coefficients and
n
is the number of points in
the desired frequency spectra. Setting
n
as a power of 2 is recommended to
speed computation (the default is 512). The input argument,
fs
, is optional and
specifies the sampling frequency. Both output arguments are also optional: if
freqz
is called without the output arguments, the magnitude and phase plots
are produced. If specified, the output vector
h

is the n-point complex frequency
response of the filter. The magnitude would be equal to
abs(h)
while the phase
would be equal to
angle(h)
. The second output argument,
w
, is a vector the
same length as h containing the frequencies of h and is useful in plotting. If
fs
is given,
w
is in Hz and ranges between 0 and f
s
/2; otherwise
w
is in rad/sample
and ranges between 0 and π.
Two-Stage FIR Filter Design
Two-stage filter design requires that the designer known the filter order, i.e.,
the number of coefficients in b(n), but otherwise the design procedure is
straightforward. The MATLAB Signal Processing Toolbox has two filter design
routines based on the rectangular filters described above, i.e., Eqs. (10)–(13).
Although implementation of these equations using standard MATLAB code is
straightforward (as demonstrated in previous examples), the FIR design routines
replace many lines of MATLAB code with a single routine and are seductively
appealing. While both routines are based on the same approach, one allows
greater flexibility in the specification of the desired frequency curve. The basic
rectangular filter is implemented with the routine

fir1
as:
b = fir1(n,wn,’ftype’ window);
where
n
is the filter order,
wn
the cutoff frequency,
ftype
the filter type, and
window
specifies the window function (i.e., Blackman, Hamming, triangular,
etc.). The output,
b
, is a vector containing the filter coefficients. The last two
input arguments are optional. The input argument
ftype
can be either
‘high’
for a highpass filter, or
‘stop’
for a stopband filter. If not specified, a lowpass
or bandpass filter is assumed depending on the length of
wn
. The argument,
window
, is used as it is in the
pwelch
routine: the function name includes argu-
ments specifying window length (see Example 4.3 below) or other arguments.

The window length should equal
n؉1
. For bandpass and bandstop filters,
n
must
be even and is incremented if not, in which case the window length should be
suitably adjusted. Note that MATLAB’s popular default window, the Hamming
TLFeBOOK
110 Chapter 4
window, is used if this argument is not specified. The cutoff frequency is either
a scalar specifying the lowpass or highpass cutoff frequency, or a two-element
vector that specifies the cutoff frequencies of a bandpass or bandstop filter. The
cutoff frequency(s) ranges between 0 and 1 normalized to f
s
/2 (e.g., if,
wn
= 0.5,
then f
c
= 0.5 * f
s
/2). Other options are described in the MATLAB Help file on
this routine.
A related filter design algorithm,
fir2
, is used to design rectangular filters
when a more general, or arbitrary frequency response curve is desired. The
command structure for
fir2
is;

b = fir2(n,f,A,window)
where
n
is the filter order,
f
is a vector of normalized frequencies in ascending
order, and
A
is the desired gain of the filter at the corresponding frequency in
vector
f
. (In other words,
plot(f,A)
would show the desired magnitude fre-
quency curve.) Clearly
f
and
A
must be the same length, but duplicate frequency
points are allowed, corresponding to step changes in the frequency response.
Again, frequency ranges between 0 and 1, normalized to f
s
/2. The argument
window is the same as in
fir1
, and the output,
b
, is the coefficient function.
Again, other optional input arguments are mentioned in the MATLAB Help file
on this routine.

Several other more specialized FIR filters are available that have a two-
stage design protocol. In addition, there is a three-stage FIR filter described in
the next section.
Example 4.4 Design a window-based FIR bandpass filter having the fre-
quency characteristics of the filter developed in Example 4.3 and shown in
Figure 4.12.
% Example 4.4 and Figure 4.12 Design a window-based bandpass
% filter with cutoff frequencies of 5 and 15 Hz.
% Assume a sampling frequency of 100 Hz.
% Filter order = 128
%
clear all; close all;
fs = 100; % Sampling frequency
order = 128; % Filter order
wn = [5*fs/2 15*fs/2]; % Specify cutoff
% frequencies
b = fir1(order,wn); % On line filter design,
% Hamming window
[h,freq] = freqz(b,1,512,100); % Get frequency response
plot(freq,abs(h),’k’); % Plot frequency response
xlabel(’Frequency (Hz)’); ylabel(’H( f)’);
TLFeBOOK
Digital Filters 111
F
IGURE
4.12 The frequency response of an FIR filter based in the rectangular
filter design described in Eq. (10). The cutoff frequencies are 5 and 15 Hz. The
frequency response of this filter is identical to that of the filter developed in Exam-
ple 4.5 and presented in Figure 4.10. However, the development of this filter
required only one line of code.

Three-Stage FIR Filter Design
The first stage in the three-stage design protocol is used to determine the filter
order and cutoff frequencies to best approximate a desired frequency response
curve. Inputs to these routines specify an ideal frequency response, usually as a
piecewise approximation and a maximum deviation from this ideal response.
The design routine generates an output that includes the number of stages re-
quired, cutoff frequencies, and other information required by the second stage.
In the three-stage design process, the first- and second-stage routines work to-
gether so that the output of the first stage can be directly passed to the input of
the second-stage routine. The second-stage routine generates the filter coeffi-
cient function based on the input arguments which include the filter order, the
cutoff frequencies, the filter type (generally optional), and possibly other argu-
ments. In cases where the filter order and cutoff frequencies are known, the
TLFeBOOK
112 Chapter 4
first stage can be bypassed and arguments assigned directly to the second-stage
routines. This design process will be illustrated using the routines that imple-
ment Parks–McClellan optimal FIR filter.
The first design stage, the determination of filter order and cutoff frequen-
cies uses the MATLAB routine
remezord
. (First-stage routines end in the letters
ord
which presumably stands for filter order). The calling structure is
[n, fo, ao, w] = remezord (f,a,dev,Fs);
The input arguments,
f
,
a
and

dev
specify the desired frequency response
curve in a somewhat roundabout manner.
Fs
is the sampling frequency and is
optional (the default is 2 Hz so that f
s
/2 = 1 Hz). Vector
f
specifies frequency
ranges between 0 and f
s
/2 as a pair of frequencies while
a
specifies the desired
gains within each of these ranges. Accordingly,
f
has a length of
2n—2
, where
n
is the length of
a
. The
dev
vector specifies the maximum allowable deviation,
or ripple, within each of these ranges and is the same length as
a
. For example,
assume you desire a bandstop filter that has a passband between 0 and 100 with

a ripple of 0.01, a stopband between 300 and 400 Hz with a gain of 0.1, and an
upper passband between 500 and 1000 Hz (assuming f
s
/2 = 1000) with the same
ripple as the lower passband. The
f
,
a
, and
dev
vectors would be:
f = [100
300 400 500]
;
a = [101]
; and
dev = [.01 .1 .01]
. Note that the ideal
stopband gain is given as zero by vector
a
while the actual gain is specified by
the allowable deviation given in vector
dev
. Vector
dev
requires the deviation
or ripple to be specified in linear units not in db. The application of this design
routine is shown in Example 4.5 below.
The output arguments include the required filter order,
n

, the normalized
frequency ranges,
fo
, the frequency amplitudes for those ranges,
a0
, and a set
of weights,
w
, that tell the second stage how to assess the accuracy of the fit in
each of the frequency ranges. These four outputs become the input to the second
stage filter design routine
remez
. The calling structure to the routine is:
b = remez (n, f, a, w,’ftype’);
where the first four arguments are supplied by
remezord
although the input
argument
w
is optional. The fifth argument, also optional, specifies either a
hilbert
linear-phase filter (most common, and the default) or a
differentia-
tor
which weights the lower frequencies more heavily so they will be the most
accurately constructed. The output is the FIR coefficients,
b
.
If the desired filter order is known, it is possible to bypass remezord and
input the arguments

n
,
f
, and
a
directly. The input argument,
n
,issimplythe
filter order. Input vectors
f
and
a
specify the desired frequency response curve
in a somewhat different manner than described above. The frequency vector still
contains monotonically increasing frequencies normalized to f
s
/2; i.e., ranging
TLFeBOOK
Digital Filters 113
between 0 and 1 where 1 corresponds to f
s
/2. The
a
vector represents desired
filter gain at each end of a frequency pair, and the gain between pairs is an
unspecified transition region. To take the example above: a bandstop filter that
has a passband (gain = 1) between 0 and 100, a stopband between 300 and 400
Hz with a gain of 0.1, and an upper passband between 500 and 700 Hz; assum-
ing f
s

/2 = 1 kHz, the
f
and a vector would be:
f = [0 .1 .3 .4 .5 .7]; a =
[11.1.111]
. Note that the desired frequency curve is unspecified between
0.1 and 0.3 and also between 0.4 and 0.5.
As another example, assume you wanted a filter that would differentiate
a signal up to 0.2f
s
/2 Hz, then lowpass filter the signal above 0.3f
s
/2 Hz. The
f
and
a
vector would be:
f = [0 .1 .3 1]
;
a = [0100]
.
Another filter that uses the same input structure as
remezord
is the least
square linear-phase filter design routine
firls
. The use of this filter in for
calculation the derivative is found in the Problems.
The following example shows the design of a bandstop filter using the
Parks–McClellan filter in a three-stage process. This example is followed by

the design of a differentiator Parks–McClellan filter, but a two-stage design
protocol is used.
Example 4.5 Design a bandstop filter having the following characteris-
tics: a passband gain of 1 (0 db) between 0 and 100, a stopband gain of −40 db
between 300 and 400 Hz, and an upper passband gain of 1 between 500 and
1000 Hz. Maximum ripple for the passband should be ±1.5 db. Assume f
s
= 2
kHz. Use the three-stage design process. In this example, specifying the
dev
argument is a little more complicated because the requested deviations are given
in db while
remezord
expects linear values.
% Example 4.5 and Figure 4.13
% Bandstop filter with a passband gain of 1 between 0 and 100,
% a stopband gain of -40 db between 300 and 400 Hz,
% and an upper passband gain of 1 between 500 and fs/2 Hz (1000
%Hz).
% Maximum ripple for the passband should be ±1.5 db
%
rp_pass = 3; % Specify ripple
% tolerance in passband
rp_stop = 40; % Specify error
% tolerance in passband
fs = 2000; % Sample frequency: 2
% kHz
f = [100 300 400 500]; % Define frequency
% ranges
a= [1 0 1]; % Specify gain in

% those regions
%
TLFeBOOK
114 Chapter 4
F
IGURE
4.13 The magnitude and phase frequency response of a Parks–McClel-
lan bandstop filter produced in Example 4.5. The number of filter coefficients as
determined by
remezord
was 24.
% Now specify the deviation converting from db to linear
dev = [(10
v
(rp_pass/20)-1)/(10
v
(rp_pass/20)؉1) 10
v
(-rp_stop/20) (10
v
(rp_pass/20)-1)/(10
v
(rp_pass/
20)؉1)];
%
% Design filter - determine filter order
[n, fo, ao, w] = remezord(f,a,dev,fs) % Determine filter
% order, Stage 1
b = remez(n, fo, ao, w); % Determine filter
% weights, Stage 2

freq.(b,1,[ ],fs ); % Plot filter fre-
% quency response
In Example 4.5 the vector assignment for the a vector is straightforward:
the desired gain is given as 1 in the passband and 0 in the stopband. The actual
stopband attenuation is given by the vector that specifies the maximum desirable
TLFeBOOK
Digital Filters 115
error, the
dev
vector. The specification of this vector, is complicated by the fact
that it must be given in linear units while the ripple and stopband gain are
specified in db. The db to linear conversion is included in the
dev
assignment.
Note the complicated way in which the passband gain must be assigned.
Figure 4.13 shows the plot produced by
freqz
with no output arguments,
a
= 1,
n
= 512 (the default), and
b
was the FIR coefficient function produced in
Example 4.6 above. The phase plot demonstrates the linear phase characteristics
of this FIR filter in the passband. This will be compared with the phase charac-
teristics of IIR filter in the next section.
The frequency response curves for Figure 4.13 were generated using the
MATLAB routine
freqz

, which applies the FFT to the filter coefficients follow-
ing Eq. (7). It is also possible to generate these curves by passing white noise
through the filter and computing the spectral characteristics of the output. A
comparison of this technique with the direct method used above is found in
Problem 1.
Example 4.6 Design a differentiator using the MATLAB FIR filter
re-
mez
. Use a two-stage design process (i.e., select a 28-order filter and bypass the
first stage design routine
remezord
). Compare the derivative produced by this
signal with that produced by the two-point central difference algorithm. Plot the
results in Figure 4.14.
The FIR derivative operator will be designed by requesting a linearly in-
creasing frequency characteristic (slope = 1) up to some f
c
Hz, then a sharp drop
off within the next 0.1f
s
/2 Hz. Note that to make the initial magnitude slope
equal to 1, the magnitude value at
fc
should be: f
c
* f
s
* π.
% Example 4.6 and Figure 4.14
% Design a FIR derivative filter and compare it to the

% Two point central difference algorithm
%
close all; clear all;
load sig1; % Get data
Ts = 1/200; % Assume a Ts of 5 msec.
fs = 1/Ts; % Sampling frequency
order = 28; % FIR Filter order
L = 4; % Use skip factor of 4
fc = .05 % Derivative cutoff
% frequency
t = (1:length(data))*Ts;
%
% Design filter
f = [0fcfc؉.1 .9]; % Construct desired freq.
% characteristic
TLFeBOOK
116 Chapter 4
F
IGURE
4.14 Derivative produced by an FIR filter (left) and the two-point central
difference differentiator (right). Note that the FIR filter does produce a cleaner
derivative without reducing the value of the peak velocity. The FIR filter order
(n = 28) and deriviative cutoff frequency (f
c
= .05 f
s
/2) were chosen empirically to
produce a clean derivative with a maximal velocity peak. As in Figure 4.5 the
velocity (i.e., derivative) was scaled by
1

/
2
to be more compatible with response
amplitude.
a = [0 (fc*fs*pi ) 0 0]; % Upward slope until .05 f
s
% then lowpass
b = remez(order,f,a, % Design filter coeffi-
’differentiator’); % cients and
d_dt1 = filter(b,1,data); % apply FIR Differentiator
figure;
subplot(1,2,1);
hold on;
plot(t,data(1:400)؉12,’k’); % Plot FIR filter deriva-
% tive (data offset)
plot(t,d_dt1(1:400)/2,’k’); % Scale velocity by 1/2
ylabel(’Time(sec)’);
ylabel(’x(t) & v(t)/2’);
TLFeBOOK
Digital Filters 117
%
%
% Now apply two-point central difference algorithm
hn = zeros((2*L)؉1,1); % Set up h(n)
hn(1,1) = 1/(2*L* Ts);
hn((2*L)؉1,1) = -1/(2*L*Ts); % Note filter weight
% reversed if
d_dt2 = conv(data,hn); % using convolution
%
subplot(1,2,2);

hold on;
plot(data(1:400)؉12,’k’); % Plot the two-point cen-
% tral difference
plot(d_dt2(1:400)/2,’k’); % algorithm derivative
ylabel(’Time(sec)’);
ylabel(’x(t) & v(t)/2’);
IIR Filters
IIR filter design under MATLAB follows the same procedures as FIR filter
design; only the names of the routines are different. In the MATLAB Signal
Processing Toolbox, the three-stage design process is supported for most of the
IIR filter types; however, as with FIR design, the first stage can be bypassed if
the desired filter order is known.
The third stage, the application of the filter to the data, can be imple-
mented using the standard
filter
routine as was done with FIR filters. A Signal
Processing Toolbox routine can also be used to implement IIR filters given the
filter coefficients:
y = filtfilt(b,a,x)
The arguments for
filtfilt
are identical to those in
filter
. The only
difference is that
filtfilt
improves the phase performance of IIR filters by
running the algorithm in both forward and reverse directions. The result is a
filtered sequence that has zero-phase distortion and a filter order that is doubled.
The downsides of this approach are that initial transients may be larger and the

approach is inappropriate for many FIR filters that depend on phase response
for proper operations. A comparison between the
filter
and
filtfilt
algo-
rithms is made in the example below.
As with our discussion of FIR filters, the two-stage filter processes will
be introduced first, followed by three-stage filters. Again, all filters can be im-
plemented using a two-stage process if the filter order is known. This chapter
concludes with examples of IIR filter application.
TLFeBOOK
118 Chapter 4
Two-Stage IIR Filter Design
The Yule–Walker recursive filter is the only IIR filter that is not supported by
an order-selection routine (i.e., a three-stage design process). The design routine
yulewalk
allows for the specification of a general desired frequency response
curve, and the calling structure is given on the next page.
[b,a] = yulewalk(n,f,m)
where
n
is the filter order, and
m
and
f
specify the desired frequency characteris-
tic in a fairly straightforward way. Specifically,
m
is a vector of the desired filter

gains at the frequencies specified in
f
. The frequencies in
f
are relative to f
s
/2:
the first point in
f
must be zero and the last point 1. Duplicate frequency points
are allowed and correspond to steps in the frequency response. Note that this is
the same strategy for specifying the desired frequency response that was used
by the FIR routines
fir2
and
firls
(see Help file).
Example 4.7 Design an 12th-order Yule–Walker bandpass filter with
cutoff frequencies of 0.25 and 0.5. Plot the frequency response of this filter and
compare with that produced by the FIR filter
fir2
of the same order.
% Example 4.7 and Figure 4.15
% Design a 12th-order Yulewalk filter and compare
% its frequency response with a window filter of the same
% order
%
close all; clear all;
n = 12; % Filter order
f = [0 .25 .25 .6 .6 1]; % Specify desired frequency re-

% sponse
m = [001100];
[b,a] = yulewalk(n,f,m); % Construct Yule–Walker IIR Filter
h = freqz(b,a,256);
b1 = fir2(n,f,m); % Construct FIR rectangular window
% filter
h1 = freqz(b1,1,256);
plot(f,m,’k’); % Plot the ideal “window” freq.
% response
hold on
w = (1:256)/256;
plot(w,abs(h),’ k’); % Plot the Yule-Walker filter
plot(w,abs(h1),’:k’); % Plot the FIR filter
xlabel(’Relative Frequency’);
TLFeBOOK

×