Digital Signal Processing Reference
In-Depth Information
Tabelle 18-6
Inneres Rauschen eines Blockes 2. Ordnung, siehe Bild 18-4, mit Zähler-
koeffizienten b 0 = 0.9375, b 1 = b 2 = 0, Polradius U f = 0.95, Polwinkel M f =
30° und Wortlängenverkürzung durch Runden
Wortlänge in Bits
10
12
14
16
Leistung des inneren
Rauschens in dB
80.1
Programmbeispiel 18-3 Untersuchung des inneren Rauschens eines Blocks 2. Ordnung
% Estimation of round-off noise in 2nd order block with quantized
% coefficients and fixed-point arithmetic
% used functions: filt2_rc.m
% dsplab18_2.m * mw * 06/22/2008
w = 16; LSB = 2^(-w+1);
% word length
rho = .95; phi = 0*pi/180;
% pole magnitude and phase
N = 1e5;
% number of simulation cycles
c = 2^(-w+8);
% noise scaling factor
% Filter parameters
b = [.9375 0 0]; % numerator coefficients
a = [1 -2*rho*cos(phi) rho^2]; % denominator coefficients
si = [0; 0]; % initial values for state space variables
bq = LSB*round(b/LSB); % quantized coefficients
aq = [1 2*LSB*round((a(2)/2)/LSB) LSB*round(a(3)/LSB)];
% Input signal - noise
x = 2*rand(1,N)-ones(1,N); % uniformly distributed in [-1,1]
xq = LSB*round(c*x/LSB); % scaled and quantized input signal
% Referenz system : 2nd order block with MATLAB default arithmetic
[yref,sref] = filter(bq,aq,xq,si);
% 2nd order block with fixed-point arithmetic
[y,s,OC] = filt2_rc(bq,aq,xq,si,w); % rounding, two's-complement overflow
fprintf('Overflow counter = %g\n',OC) % indicate overflow
r = yref - y; % error signal
Pr = sum(r.^2)/length(r); PrdB = 10*log10(Pr); % power estimates
% Theoretical estimation of noise power at the filter output
Ri0 = (1+aq(3))/((1-aq(3))*((1+aq(3))^2-(aq(2))^2)); % noise figure
Nb = length(find(bq));
% number of non-zero numerator coefficients
Na = 1;
if aq(2)~=0
Na = 5;
end
NP = (Nb+Na)*Ri0*(LSB^2)/12;
% Display results
fprintf('Pole: rho = %g Omega = %g°\n',sqrt(a(3)),...
(180/pi)*acos(-aq(2)/(2*sqrt(a(3)))))
fprintf('Round-off noise figure: %g dB\n',10*log10(Ri0))
fprintf('Round-off noise power \n')
fprintf('- Theory : %g dB\n',10*log10(NP))
fprintf('- Estimation : %g dB\n',PrdB)
Search WWH ::




Custom Search