M
k=0bke−ωk 1 +N
k=1ake−ωk (6.76)
When the coefficients {ak} and {bk} are quantized to {ˆak} and {ˆbk}, respectively, the new frequency response is given by
H(eˆ ω) = M
k=0ˆbke−ωk 1 +N
k=1ˆake−ωk (6.77)
One can perform analysis similar to that for the movement of poles to obtain maximum change in the magnitude or phase responses due to changes in filter coefficients. However, such an analysis is very complicated and may not add any new insight. Hence we will study these effects using MATLAB. We provide the following two examples.
EXAMPLE 6.27 Compute and plot magnitude responses of filter structures given for the filter in Example 6.26.
Solution The filter is a bandpass filter with 10 tightly clustered poles implemented using the direct and the cascade forms. For the direct-form structure, we compute the magnitude response for infinite precision as well as for 16-bit quantization. For the cascade-form structure, we use 16-bit and 11-bit representations.
r = 0.9; theta = (pi/180)*[-55:5:-35,35:5:55]’;
p = r*exp(j*theta); a = poly(p); b = 1;
w = [0:500]*pi/500; H = freqz(b*1e-4,a,w);
magH = abs(H); magHdb = 20*log10(magH);
% Direct form: quantized coefficients N = 15; [ahat,L,B] = Qcoeff(a,N);
TITLE = sprintf(’%i-bit (1+%i+%i) Precision (DF)’,N+1,L,B);
Hhat = freqz(b*1e-4,ahat,w); magHhat = abs(Hhat);
% Cascade form: quantized coefficients: Same N [b0,B0,A0] = dir2cas(b,a);
[BAhat1,L1,B1] = Qcoeff([B0,A0],N);
TITLE1 = sprintf(’%i-bit (1+%i+%i) Precision (CF)’,N+1,L1,B1);
Bhat1 = BAhat1(:,1:3); Ahat1 = BAhat1(:,4:6);
[bhat1,ahat1] = cas2dir(b0,Bhat1,Ahat1);
Hhat1 = freqz(b*1e-4,ahat1,w); magHhat1 = abs(Hhat1);
% Cascade form: quantized coefficients: Same B (N=L1+B) N1 = L1+B; [BAhat2,L2,B2] = Qcoeff([B0,A0],N1);
TITLE2 = sprintf(’%i-bit (1+%i+%i) Precision (CF)’,N1+1,L2,B2);
Bhat2 = BAhat2(:,1:3); Ahat2 = BAhat2(:,4:6);
[bhat2,ahat2] = cas2dir(b0,Bhat2,Ahat2);
Hhat2 = freqz(b*1e-4,ahat2,w); magHhat2 = abs(Hhat2);
% Comparison of Magnitude Plots
Hf_1 = figure(’paperunits’,’inches’,’paperposition’,[0,0,6,4]);
subplot(2,2,1); plot(w/pi,magH,’g’,’linewidth’,2); axis([0,1,0,0.7]);
%xlabel(’Digital Frequency in \pi units’,’fontsize’,10);
ylabel(’Magnitude Response’,’fontsize’,10);
title(’Infinite Precision (DF)’,’fontsize’,10,’fontweight’,’bold’);
subplot(2,2,2); plot(w/pi,magHhat,’r’,’linewidth’,2); axis([0,1,0,0.7]);
%xlabel(’Digital Frequency in \pi units’,’fontsize’,10);
ylabel(’Magnitude Response’,’fontsize’,10);
title(TITLE,’fontsize’,10,’fontweight’,’bold’);
subplot(2,2,3); plot(w/pi,magHhat1,’r’,’linewidth’,2); axis([0,1,0,0.7]);
xlabel(’Digital Frequency in \pi units’,’fontsize’,10);
ylabel(’Magnitude Response’,’fontsize’,10);
title(TITLE1,’fontsize’,10,’fontweight’,’bold’);
subplot(2,2,4); plot(w/pi,magHhat2,’r’,’linewidth’,2); axis([0,1,0,0.7]);
xlabel(’Digital Frequency in \pi units’,’fontsize’,10);
ylabel(’Magnitude Response’,’fontsize’,10);
title(TITLE2,’fontsize’,10,’fontweight’,’bold’);
The plots are shown in Figure 6.33. The top row shows plots for the direct form, and the bottom row shows those for the cascade form. As expected, the magnitude plot of the direct form is severely distorted for 16-bit representation, while those for the cascade form are preserved even for 11-bit word length.
EXAMPLE 6.28 An 8th-order bandpass filter was obtained using the elliptic filter design ap- proach. This and other design methods will be discussed in Chapter 8. The MATLAB functions needed for this design are shown in the following script.
This design produces direct-form filter coefficients bk and ak, using 64-bit floating-point arithmetic, which gives the precision of 15 decimals and hence can be considered as unquantized coefficients. Table 6.1 shows these filter coefficients.
Represent the unquantized filter coefficients using 16-bit and 8-bit word lengths. Plot the filter log-magnitude responses and pole-zero locations for both the infinite and finite word-length coefficients.
TABLE 6.1 Unquantized IIR filter coefficients used in Example 6.28
k bk ak
0 0.021985541264351 1.000000000000000 1 0.000000000000000 −0.000000000000004 2 −0.032498273955222 2.344233276056572 3 0.000000000000000 −0.000000000000003 4 0.046424673058794 2.689868616770005 5 0.000000000000000 0.000000000000001 6 −0.032498273955221 1.584557559015230 7 0.000000000000000 0.000000000000001 8 0.021985541264351 0.413275250482975
0 0.2 0.4 0.6 0.8 1 0
0.1 0.2 0.3 0.4 0.5 0.6
Magnitude Response
Infinite Precision (DF)
0 0.2 0.4 0.6 0.8 1
0 0.1 0.2 0.3 0.4 0.5 0.6
Magnitude Response
16–bit (1+6+9) Precision (DF)
0 0.2 0.4 0.6 0.8 1
0 0.1 0.2 0.3 0.4 0.5 0.6
Magnitude Response
16–bit (1+1+14) Precision (CF)
0 0.2 0.4 0.6 0.8 1
0 0.1 0.2 0.3 0.4 0.5 0.6
Magnitude Response
11–bit (1+1+9) Precision (CF)
Digital Frequency in π Units Digital Frequency in π Units
FIGURE 6.33 Magnitude plots for direct- and cascade-form structures in Exam- ple 6.27
Solution Unlike the previous example, some of the filter coefficient values (specifically those of the autoregressive part) are greater than one and hence require bits for the integer part. This assignment is done for all coefficients since in practice, the same bit-pattern is used for the filter representation. These and other steps are given in the following MATLAB script.
% The following 3 lines produce filter coefficients shown in Table 6.1.
wp = [0.35,0.65]; ws = [0.25,0.75]; Rp = 1; As = 50;
[N, wn] = ellipord(wp, ws, Rp, As);
[b,a] = ellip(N,Rp,As,wn);
w = [0:500]*pi/500; H = freqz(b,a,w); magH = abs(H);
magHdb = 20*log10(magH);
% 16-bit word-length quantization
N1 = 15; [bahat,L1,B1] = QCoeff([b;a],N1);
TITLE1 = sprintf(’%i-bits (1+%i+%i)’,N1+1,L1,B1);
bhat1 = bahat(1,:); ahat1 = bahat(2,:);
Hhat1 = freqz(bhat1,ahat1,w); magHhat1 = abs(Hhat1);
magHhat1db = 20*log10(magHhat1); zhat1 = roots(bhat1);
% 8-bit word-length quantization
N2 = 7; [bahat,L2,B2] = QCoeff([b;a],N2);
TITLE2 = sprintf(’%i-bits (1+%i+%i)’,N2+1,L2,B2);
bhat2 = bahat(1,:); ahat2 = bahat(2,:);
Hhat2 = freqz(bhat2,ahat2,w); magHhat2 = abs(Hhat2);
magHhat2db = 20*log10(magHhat2); zhat2 = roots(bhat2);
% Plots
Hf_1 = figure(’paperunits’,’inches’,’paperposition’,[0,0,6,5]);
% Comparison of Log-Magnitude Responses: 16 bits
subplot(2,2,1); plot(w/pi,magHdb,’g’,’linewidth’,1.5); axis([0,1,-80,5]);
hold on; plot(w/pi,magHhat1db,’r’,’linewidth’,1); hold off;
xlabel(’Digital Frequency in \pi units’,’fontsize’,10);
ylabel(’Decibels’,’fontsize’,10);
title([’Log-Mag plot: ’,TITLE1],’fontsize’,10,’fontweight’,’bold’);
% Comparison of Pole-Zero Plots: 16 bits
subplot(2,2,3); [HZ,HP,Hl] = zplane([b],[a]); axis([-2,2,-2,2]); hold on;
set(HZ,’color’,’g’,’linewidth’,1,’markersize’,4);
set(HP,’color’,’g’,’linewidth’,1,’markersize’,4);
plot(real(zhat1),imag(zhat1),’r+’,’linewidth’,1);
title([’PZ Plot: ’,TITLE1],’fontsize’,10,’fontweight’,’bold’);
hold off;
% Comparison of Log-Magnitude Responses: 8 bits
subplot(2,2,2); plot(w/pi,magHdb,’g’,’linewidth’,1.5); axis([0,1,-80,5]);
hold on; plot(w/pi,magHhat2db,’r’,’linewidth’,1); hold off;
xlabel(’Digital Frequency in \pi units’,’fontsize’,10);
ylabel(’Decibels’,’fontsize’,10);
title([’Log-Mag plot: ’,TITLE2],’fontsize’,10,’fontweight’,’bold’);
% Comparison of Pole-Zero Plots: 8 bits
subplot(2,2,4); [HZ,HP,Hl] = zplane([b],[a]); axis([-2,2,-2,2]); hold on;
set(HZ,’color’,’g’,’linewidth’,1,’markersize’,4);
set(HP,’color’,’g’,’linewidth’,1,’markersize’,4);
plot(real(zhat2),imag(zhat2),’r+’,’linewidth’,1);
title([’PZ Plot: ’,TITLE2],’fontsize’,10,’fontweight’,’bold’);
hold off;
The log-magnitude responses and zero-pole locations of the resulting filters are plotted in Figure 6.34 along with those of the original filter. When 16 bits are used, the resulting filter is virtually indistinguishable from the original one.
However, when 8 bits are used, the filter behavior is severely distorted. The filter is still stable, but it does not satisfy the design specifications.
0 1
−40
−20 0
Decibels Decibels
Log-Mag Plot: 16-bits (1+2+13)
Real Part
Imaginary Part
PZ Plot: 16-bits (1+2+13)
−80
−60
0.2 0.4 0.6 0.8
−1
−1
−0.5
−0.5
1 1
0 0
0.5 0.5
Digital Frequency in π Units
0 1
−40
−20 0
Log-Mag Plot: 8-bits (1+2+13)
−80
−60
0.2 0.4 0.6 0.8 Digital Frequency in π Units
True 8-bit True
16-bit
16-bit zero 16-bit pole True zero True pole
Real Part
Imaginary Part
PZ Plot: 8-bits (1+2+5)
−1
−1
−0.5
−0.5
1 1
0 0
0.5
0.5 8-bit zero
8-bit pole True zero True pole
FIGURE 6.34 Plots for the IIR filter in Example 6.28