Documentation |
On this page… |
---|
In both digital filter design and spectral estimation, the choice of a windowing function can play an important role in determining the quality of overall results. The main role of the window is to damp out the effects of the Gibbs phenomenon that results from truncation of an infinite series.
Window | Function |
---|---|
Bartlett-Hann window | |
Bartlett window | |
Blackman window | |
Blackman-Harris window | |
Bohman window | |
Chebyshev window | |
Flat Top window | |
Gaussian window | |
Hamming window | |
Hann window | |
Kaiser window | |
Nuttall's Blackman-Harris window | |
Parzen (de la Vallée-Poussin) window | |
Rectangular window | |
Tapered cosine window | |
Triangular window |
Two graphical user interface tools are provided for working with windows in the Signal Processing Toolbox™ product:
Refer to the reference pages for these tools for detailed information.
The basic window is the rectangular window, a vector of ones of the appropriate length. A rectangular window of length 50 is
n = 50; w = rectwin(n);
This toolbox stores windows in column vectors by convention, so an equivalent expression is
w = ones(50,1);
To use the Window Design and Analysis Tool to create this window, type
wintool
wintool opens with a default Hamming window. In the Current Window Information panel, set Type = Rectangular and Length = 50 and then press Apply.
The Bartlett (or triangular) window is the convolution of two rectangular windows. The functions bartlett and triang compute similar triangular windows, with three important differences. The bartlett function always returns a window with two zeros on the ends of the sequence, so that for n odd, the center section of bartlett(n+2) is equivalent to triang(n):
Bartlett = bartlett(7); isequal(Bartlett(2:end-1),triang(5))
ans = 1
For n even, bartlett is still the convolution of two rectangular sequences. There is no standard definition for the triangular window for n even; the slopes of the line segments of the triang result are slightly steeper than those of bartlett in this case:
w = bartlett(8); [w(2:7) triang(6)]
You can see the difference between odd and even Bartlett windows in WinTool.
The final difference between the Bartlett and triangular windows is evident in the Fourier transforms of these functions. The Fourier transform of a Bartlett window is negative for n even. The Fourier transform of a triangular window, however, is always nonnegative.
The following figure, which plots the zero-phase responses of 8-point Bartlett and Triangular windows, illustrates the difference.
zerophase(bartlett(8)) hold on zerophase(triang(8)) legend('Bartlett','Triangular') axis([0.3 1 -0.2 0.5])
This difference can be important when choosing a window for some spectral estimation techniques, such as the Blackman-Tukey method. Blackman-Tukey forms the spectral estimate by calculating the Fourier transform of the autocorrelation sequence. The resulting estimate might be negative at some frequencies if the window's Fourier transform is negative (see Kay [1], pg. 80).
Blackman, flat top, Hamming, Hann, and rectangular windows are all special cases of the generalized cosine window. These windows are combinations of sinusoidal sequences with frequencies that are multiples of 2π/(N – 1), where N is the window length. One special case is the Blackman window:
N = 128; A = 0.42; B = 0.5; C = 0.08; ind = (0:N-1)'*2*pi/(N-1); w = A - B*cos(ind) + C*cos(2*ind);
Changing the values of the constants A, B, and C in the previous expression generates different generalized cosine windows like the Hamming and Hann windows. Adding additional cosine terms of higher frequency generates the flat top window. The concept behind these windows is that by summing the individual terms to form the window, the low frequency peaks in the frequency domain combine in such a way as to decrease sidelobe height. This has the side effect of increasing the mainlobe width.
The Hamming and Hann windows are two-term generalized cosine windows, given by A = 0.54, B = 0.46 for the Hamming and A = 0.5, B = 0.5 for the Hann.
Note that the definition of the generalized cosine window shown in the earlier MATLAB^{®} code yields zeros at samples 1 and n for A = 0.5 and B = 0.5.
This WinTool screen shot compares Blackman, Hamming, Hann, and Flat Top windows.
The Kaiser window is an approximation to the prolate-spheroidal window, for which the ratio of the mainlobe energy to the sidelobe energy is maximized. For a Kaiser window of a particular length, the parameter β controls the sidelobe height. For a given β, the sidelobe height is fixed with respect to window length. The statement kaiser(n,beta) computes a length n Kaiser window with parameter beta.
Examples of Kaiser windows with length 50 and β parameters of 1, 4, and 9 are shown in this wintool example.
To create these Kaiser windows using the MATLAB command line, type the following:
n = 50; w1 = kaiser(n,1); w2 = kaiser(n,4); w3 = kaiser(n,9); [W1,f] = freqz(w1/sum(w1),1,512,2); [W2,f] = freqz(w2/sum(w2),1,512,2); [W3,f] = freqz(w3/sum(w3),1,512,2); plot(f,20*log10(abs([W1 W2 W3]))) grid legend('\beta = 1','\beta = 4','\beta = 9')
As β increases, the sidelobe height decreases and the mainlobe width increases. This WinTool screen shot shows how the sidelobe height stays the same for a fixed β parameter as the length is varied.
To create these Kaiser windows using the MATLAB command line, type the following:
w1 = kaiser(50,4); w2 = kaiser(20,4); w3 = kaiser(101,4); [W1,f] = freqz(w1/sum(w1),1,512,2); [W2,f] = freqz(w2/sum(w2),1,512,2); [W3,f] = freqz(w3/sum(w3),1,512,2); plot(f,20*log10(abs([W1 W2 W3]))) grid legend('length = 50','length = 20','length = 101')
There are two design formulas that can help you design FIR filters to meet a set of filter specifications using a Kaiser window. To achieve a sidelobe height of –α dB, the βbeta parameter is
$$\beta =\{\begin{array}{ll}0.1102\text{\hspace{0.17em}}(\alpha -8.7),\hfill & \alpha >50,\hfill \\ 0.5842\text{\hspace{0.17em}}{(\alpha -21)}^{0.4}+0.07886\text{\hspace{0.17em}}(\alpha -21),\hfill & 50\ge \alpha \ge 21,\hfill \\ 0,\hfill & a<21.\hfill \end{array}$$
For a transition width of Δω rad/sample, use the length
$$n=\frac{\alpha -8}{2.285\Delta \omega}+1.$$
Filters designed using these heuristics will meet the specifications approximately, but you should verify this. To design a lowpass filter with cutoff frequency 0.5π rad/sample, transition width 0.2π rad/sample, and 40 dB of attenuation in the stopband, try
[n,wn,beta] = kaiserord([0.4 0.6]*pi,[1 0],[0.01 0.01],2*pi);
h = fir1(n,wn,kaiser(n+1,beta),'noscale');
The kaiserord function estimates the filter order, cutoff frequency, and Kaiser window beta parameter needed to meet a given set of frequency domain specifications.
The ripple in the passband is roughly the same as the ripple in the stopband. As you can see from the frequency response, this filter nearly meets the specifications:
fvtool(h,1)