Assignment 0f PM
Assignment 0f PM
Digital lters with nite-duration impulse reponse (referred to as FIR lters) have both advantages and disadvantages when compared to innite-duration impulse response (IIR) lters. (Note: You will need sg01 for some of the functions in this Lab.). FIR lters have the following primary advantages: They can have exactly linear phase. They are always stable, even when quantized. The design methods are generally linear. They can be realized eciently in hardware. The lter startup transients have nite duration. The primary disadvantage of FIR lters is that they often require a much higher lter order than IIR lters to achieve a given level of performance. Correspondingly, the delay of these lters is often much greater than for an equal performance IIR lter.
FIR Methods
The Signal Processing Toolbox supports a variety of methods for the design of FIR lters.
Filter Method Windowing Multiband with Transition Bands Constrained Least Squares Arbitrary Response Raised Cosine Description Apply window to truncated inverse Fourier transform of desired lter Equiripple or least squares approach over frequency sub bands Minimize squared integral error over entire frequency range subject to maximum error constraints Arbitrary responses, including nonlinear phase and complex lters Lowpass response with smooth, sinusoidal transition Filter Functions r1, r2, kaiserord rls, rpm, rpmord rcls, rcls1
crpm rrcos
b(m)x(n m)
(1)
where the ltered signal y(n) is just a linear combination of current and previous values of the input signal x(n). The coecients b (b(m)) are the numerator coecients of the transfer function. The denominator of the transfer function will always be a = 1. The order of the lter is n = length(b) 1.
If the input signal is the unit impulse x = [1 0 0 0 ...], then the corresponding impulse response y(n) h(n) is identical to b(n):
h(0) = b(0)x(0) = b(0) h(1) = b(0)x(1) + b(1)x(0) = b(1) h(2) = b(0)x(2) + b(1)x(1) + b(2)x(0) = b(2) ...etc. The FIR lter coecients are the same as the impulse response. Try this. Let b represent the coecients of the xs in equation (1). b = [-1 0 2 -3 1]; % no need to specify the a coefficients stem(b) figure, impz(b,1)
This is the classic method of windowed FIR linear-phase lter design. (We will see this in class). Look at the phase delay and the group delay in fvtool.
The functions r1, r2, rls, rpm, rcls, rcls1, and rrcos all design type I and II linear phase FIR lters by default. Both rls and rpm design type III and IV linear phase FIR lters given a hilbert or dierentiator ag. The function crpm can design any type of linear or nonlinear phase lter. Because the frequency response of a type II lter is zero at the Nyquist frequency (high frequency), r1 does not design type II highpass and bandstop lters. For odd-valued n in these cases, r1 adds 1 to the order and returns a type I lter.
Window-Based Design
Under FIR Methods above, Windowing is the rst lter design method. It is the common, classic design method for FIR lters. Recall that H (ej ) is periodic. Hence we can write it as a Fourier series. That is, H (ej ) = + jn . h[n] are the Fourier coecients that are determined using the inverse DTFT. In general, the impulse response cannot be implemented as a digital lter because it is innite and noncausal
So, h(n) is symmetrically truncated (multiplied by a nite, symmetric window) and shifted to make it causal, to create an implementation that gives a linear phase nite impulse response. (Recall that from Fourier series properties, if the function is even, the Fourier coecients are even and if the function is odd, Fourier coecients are odd. Hence for H (ej ) even, like for a low pass lter, h[n] will be even, i.e. symmetric.) The truncated Fourier series can be shown to be an approximation to the ideal lter, which is best in a mean square sense, compared to other approximations of the same length. However, the abrupt truncation leads to overshoot (Gibbs phenomenon) and ripples in the spectrum. The undesirable eects of truncation can be reduced or eliminated by the use of tapered windows. The Windowing method does not allow you to design a lter, with explicit amplitude response constraints (like we saw in Lab.5), such as passband ripple or stopband attenuation. It needs to be used iteratively and we stop when design specications are met. Try: edit windemo windemo(20) windemo(50) windemo(100)
Windowing Functions
In windemo you saw the eects (Gibbs phenomena) on the frequency response of the nite length lter when a (default) rectangular window was imposed. Now we see methods of ridding ourselves of Gibbs phenomena - at a price. The Signal Processing Toolbox supports a variety of windows commonly used in FIR lter design. (We will see this in class.) Typing help window provides a list of available windows:
bartlett barthannwin blackman blackmanharris bohmanwin chebwin flattopwin gausswin hamming hann kaiser nuttallwin parzenwin rectwin triang tukeywin
Bartlett window Modied Bartlett-Hanning window Blackman window Minimum 4-term Blackman-Harris window Bohman window Chebyshev window Flat Top window Gaussian window Hamming window Hann window Kaiser window Nuttall dened minimum 4-term Blackman-Harris window Parzen (de la Valle-Poussin) window Rectangular window Triangular window Tukey window
Individual window functions take inputs for a window length n and window parameters and return the window w in a column vector of length n. (Note: Use w for array products with row vector impulse responses.) The window function serves as a gateway to the individual functions. alpha=0.25 w = gausswin(64,alpha) and w = window(@gausswin,64,alpha) both return a Gaussian window of length 64 with standard deviation equal to 1/alpha.
Try: edit windft windft You see a truncated signal (5 hz sine wave) and its DFT (Figure 1). (Recall the Fourier transform of a sine wave? Do you see how the DFT is dierent?) Then, the truncated sine wave is multiplied by a Gaussian window and the DFT is taken of the truncated windowed signal, Figure 2.
as narrow as possible and the side lobes should contain as little energy as possible.
The Window Visualization Tool (WVTool) allows you to investigate the tradeos among dierent windows and lter orders. wvtool(windowname(n)) opens WVTool with time and frequency domain plots of the n-length window specied in windowname, which can be any window in the Signal Processing Toolbox. Several windows can be given as input arguments for comparative display. Try: wvtool(hamming(64),hann(64),gausswin(64),rectwin(64)) wvtool(hamming(32),kaiser(32,2.5),flattopwin(32)) wvtool(kaiser(32,1),kaiser(32,5),kaiser(32,10))
Use WVTool for displaying and comparing existing windows created in the Matlab workspace. Use WinTool to interactively design windows with certain specications and export them to the Matlab workspace.
Most window types satisfy some optimality criterion. Some windows are combinations of simpler windows. For example, the Hann window is the sum of a rectangular and a cosine window, and the Bartlett window is the convolution of two rectangular windows. Other windows emphasize certain desirable features. The Hann window improves high-frequency decay (at the expense of larger peaks in the side lobes). The Hamming window minimizes side lobe peaks (at the expense of slower high-frequency decay). The Kaiser window has a parameter that can be tuned to control side lobe levels. Other windows are based on simple mathematical formulas for easy application. The Hann window is easy to use as a convolution in the frequency domain.
An optimal time-limited window maximizes energy in its spectrum over a given frequency band. In the discrete domain, the Kaiser window gives the best approximation to such an optimal window.
Wintool opens WinTool with a default 64-point Hamming window. Try it - experiment with dierent window designs and export them to the workspace.
This lter has magnitude 1 at all frequencies less than 0, and magnitude 0 at frequencies between 0 and . Its impulse response sequence h(n) is
This lter is not implementable since its impulse response is innite and noncausal. To create a nite-duration impulse response, truncate it by applying a window. Retain the central section of impulse response in the truncation to obtain a linear phase FIR lter. For example, a length 51 lter with a lowpass cuto frequency 0 of 0.4 rad/s has the impulse response, h=0.4*sinc(0.4*(-25:25));
The window applied here (by default) is a simple rectangular window. (This actually is a length 51 lter that best approximates the ideal lowpass lter, in the integrated least squares sense.) To display the lters frequency response in FVTool, type fvtool(h,1) As you see, ringing and ripples occur in the frequency response, especially near the band edge. This Gibbs eect does not vanish as the lter length increases, but a nonrectangular window reduces the magnitude of the side lobes (but not the main lobe). Multiplication by a window in the time domain causes a convolution in the frequency domain. Apply a length 51 Hamming window to the lter and display the result using FVTool: bw=b.*hamming(51); fvtool(b,1) Using a Hamming window greatly reduces the ringing. This is at the expense of transition width (the windowed version takes longer to ramp from passband to stopband) and optimality (the windowed version does not minimize the integrated least squared error).
Try: b=0.4*sinc(0.4*(-25:25)); fvtool(b,1) bw=b.*(hamming(51)); fvtool(bw,1) Right-click the y-axis label in FVTool and choose Magnitude squared on both plots.
r1 resembles the IIR lter design functions in that it is formulated to design lters in standard band congurations: lowpass, bandpass, highpass, and bandstop. The commands n=50; Wn=0.4; b=fir1(n,Wn); create a row vector b containing the coecients of the order n Hamming-windowed lter. This is a lowpass, linear phase FIR lter with cuto frequency W n. W n is a number between 0 and 1, where 1 corresponds to the Nyquist frequency, which is dened as one-half the sampling frequency. For a highpass lter, simply append the string high to the functions parameter list. For a bandpass or bandstop lter, specify Wn msu tbe given as a two-element vector containing the passband edge frequencies; append the string stop for the bandstop conguration.
b=fir1(n,Wn,window); uses the window specied in column vector window for the design. The vector window must be n + 1 elements long. If you do not specify a window, r1 applies a Hamming window. The kaiserord function estimates the lter order, cuto frequency, and Kaiser window parameter needed to meet a given set of specications. Given a vector of frequency band edges, a vector of magnitude, and a maximum allowable ripple, kaiserord returns appropriate input parameters for the r1 function.
b=fir2(n,f,m); returns row vector b containing the n + 1 coecients of an order n FIR lter. The frequencymagnitude characteristics of this lter match those given by vectors f and m.
b=fir2(n,f,m,window); uses the window specied in column vector window for the design. The vector window must be n + 1 elements long. If you do not specify a window, r2 applies a Hamming window. The function crpm is used to design complex and nonlinear-phase equiripple FIR lters. It allows arbitrary frequency-domain constraints.
Multiband Filters
The function rls designs linear-phase FIR lters that minimize the weighted, integrated squared error between an ideal piecewise linear function and the magnitude response of the lter over a set of desired frequency bands.
b=firls(n,f,a) returns row vector b containing the n+1 coecients of the order n FIR lter whose frequencyamplitude characteristics approximately match those given by vectors f and a. The function rls allows you to introduce constraints by dening upper and lower bounds for the frequency response in each band. The function rcls1 is used specically to design lowpass and highpass linear phase FIR lters using constrained least squares.
R is called the rollo factor. Like the sinc function, the raised cosine function is 1 at n = 0 and 0 at all other sampling instances n = ns. In contrast to the sinc function, the raised cosine has faster decaying oscillations on either side of the origin for R > 0. This results in improved reconstruction if samples are not acquired at exactly the sampling instants (i.e., if there is jitter). It also uses fewer past and future values in the reconstruction, as compared to the sinc function. The shape of the functions spectrum is the raised cosine. The ideal raised cosine lowpass lter frequency response consists of unity gain at low frequencies, a raised cosine function in the middle, and total attenuation at high frequencies. The width of the transition band is determined by the rollo factor.
b=firrcos(n,F0,df,fs) b=firrcos(n,F0,df,fs,bandwidth) are equivalent, and return an order n lowpass linear-phase FIR lter with a raised cosine transition band. The cuto frequency is F 0, the transition bandwidth df , and sampling frequency is f s, all in hertz. df must be small enough so that F 0 df /2 is between 0 and f s/2. b is normalized so that the nominal passband gain is always equal to 1. b=firrcos(n,F0,r,fs,rolloff) interprets the third argument, r, as the rollo factor instead of the transition bandwidth, df . r must be in the range [0, 1].
In the overlap-add method, an input signal x(n) is partitioned into equal length data blocks. The lter coecients (impulse response) and each block of data are transformed to the frequency domain using the FFT, where they can be eciently convolved using multiplication. The partial convolutions of the signal are returned to the time domain with the IFFT, where they are shifted and summed using superposition.
y=fftfilt(b,x) uses an FFT length of nt = 2nextpow2(n) and a data block length of nt-length (b)+1 (ensures circular convolution). rlt incurs an oine startup cost when converting the coecients b to the frequency domain. After that, the number of multiplications tlt performs relative to lter (which implements the lter in direct form) is log2(L)/N , where L is the block length and N is the lter length. (Multiplications are a good measure of performance, since they are typically expensive on hardware.) The net result is that for lters of high order, tlt outperforms lter.
Try: x=[1 2 3 4 5 6]; h=[1 1 1]; y=conv(h,x) x1=[1 2 3]; x2=[4 5 6]; y1=conv(h,x1) y2=conv(h,x2) Y1=[y1, zeros(1,3)]; Y2=[zeros(1,3),y2]; Y=Y1+Y2
CODE:
% Program to design a FIR filter using windows. close all; clear all; fp=input('Enter the pass band frequency'); fs=input('Enter the stop band frequency'); rp=input(' Enter the pass band attenuation'); rs=input('Enter the stop band attenuation'); f=input(' Enter the sampling frequency'); %Calculating filter order num=-20*log10(sqrt(rp*rs))-13; dem=14.6*(fs-fp)/f; n=ceil(num/dem); n=abs(n); % Normalizing the frequencies
wp=2*fp/f; ws=2*fs/f; wn=(ws+wp)/2; %Adjusting the filter order. The order of window must be an odd number %and the order of filter must be one less than that of the window if (rem(n,2)==0) m=n+1; else m=n; n=n-1; end %Window sequence calculation w=hann(m); %Calculation of filter coefficients b=fir1(n,wn,'low',w); %Plotting the filter response freqz(b,1,500,3000); TITLE('Magnitude and Phase response');
%output %Enter the %Enter the %Enter the %Enter the %Enter the
pass band frequency1000 stop band frequency1200 pass band attenuation.2 stop band attenuation45 sampling frequency3000
You can change this lowpass filter to high pass filter by changing the option 'low' to 'high' in the fir1() function. The output is shown below.
%output %Enter the %Enter the %Enter the %Enter the %Enter the
pass band frequency1200 stop band frequency1000 pass band attenuation.2 stop band attenuation45 sampling frequency3000