ANALYSIS OF FINITE WORD-LENGTH EFFECTS
The MATLAB function a2dR given below can be used to generate the decimal equivalent of the binary representation in sign-magnitude form of a decimal number with a specified number of bits for the fractional part obtained by rounding.
function beq = a2dR(d,n)
% BEQ = A2DR(D, N) generates the decimal
% equivalent beq of the binary representation
% of a decimal number D with N bits for the
% magnitude part obtained by rounding
%
m = 1; d1 = abs(d);
while fix(d1) > 0
d1 = abs(d)/(10^m);
m = m+1;
end
beq = 0;d1 = d1 + 2^(-n-1);
for k = 1:n
beq = fix(d1*2)/(2^k) + beq;
d1 = (d1*2) - fix(d1*2);
end
beq = sign(d).*beq.*10^(m-1);
To compare the performance of the direct-form realization of an IIR transfer
function with that of a cascade realization with both realized with quantized coefficients.
Program P9 2 evaluates the effect of multiplier coefficient quantizations on the cascade
form realization
% Program
% Coefficient Quantization Effects on Cascade
% Realization of an IIR Transfer Function
clf;
[z,p,k] = ellip(6,0.05,60,0.4);
[b,a] = zp2tf(z,p,k);
[g,w] = gain(b,a);
sos = zp2sos(z,p,k);
sosq = a2dT(sos,6);
R1 = sosq(1,:);R2 = sosq(2,:);R3 = sosq(3,:);
b1 = conv(R1(1:3),R2(1:3));bq = conv(R3(1:3),b1);
a1 = conv(R1(4:6),R2(4:6));aq = conv(R3(4:6),a1);
[gq,w] = gain(bq,aq);
plot(w/pi,g,’b’, w/pi,gq,’r--’);
axis([0 1 -80 1]);grid
xlabel(’\omega /\pi’);ylabel(’Gain, dB’);
title(’original - solid line; quantized - dashed line’);
pause
zplane(b,a);
hold on;
pzplot(bq,aq);
title(’Original pole-zero locations: x, o; New pole-zero locations: +, *’)
The above two programs can be modified easily to investigate the multiplier coefficient
effects on an FIR transfer function, as illustrated by Program P9 3 given below for the
direct-form realization.
% Program
% Coefficient Quantization Effects on Direct Form
% Realization of an FIR Transfer Function
%
clf;
f = [0 0.4 0.45 1];
m = [1 1 0 0];
b = firpm(19, f, m);
[g,w] = gain(b,1);
bq = a2dT(b,5);
[gq,w] = gain(bq, 1);
plot(w/pi,g,’b-’,w/pi,gq,’r--’);
\axis([0 1 -60 10]);grid
xlabel(’\omega /\pi’); ylabel(’Gain, dB’);
legend(’original’, ’quantized’);
pause zplane(b);
hold on
pzplot(bq);
hold off
title(’Original pole-zero locations: x, o; New pole-zero locations: +, *’)
to investigate the propagation of input quantization-noise to the output of a causal, stable LTI digital filter, the function noisepwr1 given below can be employed
function nvar = noisepwr1(num,den)
% Computes the output noise variance due
% to input quantization of a digital filter
% based on a partial-fraction approach
%
% num and den are the numerator and denominator
% polynomial coefficients of the IIR transfer function
%
[r,p,K] = residue(num,den);
R = size(r,1);
R2 = size(K,1);
if R2 > 1
disp(’Cannot continue...’);
return;
end
if R2 == 1
nvar = K^2;
else
nvar = 0;
end
% Compute roundoff noise variance
for k = 1:R,
for m = 1:R,
integral = r(k)*conj(r(m))/(1-p(k)*conj(p(m)));
nvar = nvar + integral;
end
end
disp(’Output Noise Variance = ’);disp(real(nvar))}
0 comments:
Post a Comment