Digital Signal Processing Reference
In-Depth Information
M18.4
Inneres Rauschen eines Cauer-Tiefpasses 6. Ordnung
Die Filterkoeffizienten eines Cauer-Tiefpass 6. Ordnung in Kaskadenform sind in
Tabelle 18-7 zusammengestellt. Messen Sie die Leistung des inneren Geräusches
des Cauer-Tiefpasses, siehe auch Tabelle 17-5.
Tabelle 18-7
Koeffizienten des Cauer-Tiefpasses 6. Ordnung
SOS =[.1961 .2747 .1961 1 -1.3316 .5005;
.1961 -.0243 .1961 1 -1.1877 .7129;
.1961 .1159 .1961 1 -1.1105 .9147];
Wiederholen Sie Messung für alle möglichen Reihenfolgen der Blöcke und tragen
Sie die Ergebnisse in Tabelle 18-8 ein.
Tabelle 18-8
Leistung des inneren Rauschens
N
i
eines Cauer-Tiefpasses 6. Ordnung in
Kaskadenform mit quantisierter Arithmetik bei der Wortlänge von 16 Bits
Reihenfolge
1
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
N
i
in dB
78.0
1
Die Reihenfolge 123 entspricht der Reihenfolge in Tabelle 18-7 mit den Blöcken 2. Ord-
nung entsprechend den Zeilen von SOS.
Programmbeispiel 18-4
Untersuchung des inneren Rauschens eines Cauer-Tiefpasses
% Roundoff noise in elliptic IIR filters of 6th order in
% cascade form of 2nd order blocks with quantized coefficients
% and fixed-point arithmetic, see filt2_rc
% dsplab18_3.m * mw * 06/22/2008
w = 16; LSB = 2^(-w+1); %
word length and least significant bit
N = 1e5; %
number of simulation cycles
c = 2^(-w+14); %
noise scaling factor
%
Quantized filter coefficients of block 1, 2 a. 3 of elliptic lowpass
SOS = [.1961 .2747 .1961 1 -1.3316 .5005;
.1961 -.0243 .1961 1 -1.1877 .7129;
.1961 .1159 .1961 1 -1.1105 .9147];
bq = LSB*round(SOS(:,1:3)/LSB);
aq = [ones(3,1) 2*LSB*round((SOS(:,5)/2)/LSB)
LSB*round(SOS(:,6)/LSB)];
si = [0 0];
%
initial values for state space variables
%
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
%
Reference system
[yref1,sref1] = filter(bq(1,:),aq(1,:),xq);
[yref2,sref2] = filter(bq(2,:),aq(2,:),yref1);
[yref3,sref3] = filter(bq(3,:),aq(3,:),yref2);
%
System with rounding and two's-complement overflow
k1 = 1; k2 = 2; k3 = 3;
%
block order
[y1,si1,OC] = filt2_rc(bq(k1,:),aq(k1,:),xq,si,w);
fprintf('(1) Overflow counter = %g\n',OC)