Matlab function Mfiles for the Book
"Quantization Noise"
Simulation tools for arbitraryprecision floatingpoint
and
fixedpoint roundoff
Several function Mfiles have been developed for Matlab,
for the simulation and analysis of roundoff in fixedpoint and
floatingpoint calculations, to support the ideas in the book.
For a short overview, see the
appendix on simulation of finite word length
in Matlab.
The basic idea is that roundoff can be modelled as
ideally precise operations followed by a roundoff quantizer.
"Ideally precise" means a very well approximating and a precise solution:
 the builtin Matlab precision
(IEEE double, that is, p = 53), see the roundoff toolbox  this
is very good approximation;
 increasedprecision (110bit) calculations with exact roundoff, see
the qdsp toolbox.
Roundoff Toolbox
An example of the use of files to simulate calculations in any
precision lower than in IEEE double precision (that is, p < 53,
e.g. IEEE single precision: p = 24):
Q = qstruct('single'); %IEEE single precision quantizer
a = roundq(1.2,Q); b=roundq(1.24,Q); %two quantized numbers
c = roundq(a*b,Q); %This rounds result after multiplication
The native number representation of Matlab is IEEE double precision,
therefore to use
this, no extra simulation file is needed.
Installation:
 click (Shiftclick) on the link "Roundoff toolbox",
and download the file roundoff.zip,
 extract its contents (files roundoff\*.m) into a directory you prefer
(this will be denoted "[DIR]" below),
 add the path to Matlab, e.g. execute
addpath('[DIR]\roundoff','end'),
or add this line to your own file startup.m in the working directory you
use,
 type 'help roundoff',
 try a few examples:
a = 1; b = 1+2^(23);
one_plus_eps = roundq(a*b,'single') %basic usage: operation + quantization
two = roundq(1 + roundq(a*b,'single'),'single') %exactly 2
ulp(two,'single') %ULP for 2: 1.1921e007=2*2^(24)=2^(p+1)
lsb(two,'single') %LSB for 2: 2.3842e007=2*2^(23)=2^(p+1)
binstr = num2bin(one_plus_eps,'single') %binary string
binplusdecstr = num2bin(one_plus_eps,'single','decimal') %exponent shown as decimal
roundq(1+2^(24),'single')1 %single precision, returns 0
roundq(1+2^(23),'single')1 %single precision, returns 2^(23)=1.1921e007
roundq(realmin/2,struct('ufl','f'),'list') %flush to zero, returns 0
roundq(realmin/2,struct('ufl','g')) %gradual underflow
%realmin/2=2^(10221)=1.1125e308
Quantization and DSP Simulation Toolbox (QDSP)
More advanced tools are also available. These allow the use
of 110 mantissa bits, thus allow to study the roundoff of IEEE
double precision, and perform bitwise precise calculations. Installation:
 click (Shiftclick) on the link "QDSP toolbox",
and download the file qdsp.zip,
 extract its contents (files qdsp\*.m, qdsp\private\*.m, etc.) into a
directory you prefer (this will be denoted "[DIR]" below),
 add the path to Matlab, e.g. execute
addpath('[DIR]\qdsp','end'),
or add this line to your own file startup.m in the working directory you
use,
 type 'help qdsp',
 try a few examples:
qdspstart %hints how to start
Q=qmake('Qs','single'); %IEEE single prec
a=qdata(1.22,Q); b=qdata(2.1,Q); %define numbers
c=a*b; %perform quantized multiplication
get(c) %show number and associated quantizer
x=qdata(1,'BigFP') %110bit number
y=randn(x) %normally distributed 110bit number
y=rand(x) %uniformly distributed 110bit number

These pages and the associated software are maintained by
István Kollár.
