Matlab function M-files for the Book 
"Quantization Noise" 
Simulation tools for arbitrary-precision floating-point 
and 
fixed-point roundoff
Several function M-files have been developed for Matlab, 
for the simulation and analysis of roundoff in fixed-point and 
floating-point 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 built-in Matlab precision 
(IEEE double, that is, p = 53), see the roundoff toolbox - this 
is  very good approximation;
 - increased-precision (110-bit) 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 (Shift-click) 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.1921e-007=2*2^(-24)=2^(-p+1)
lsb(two,'single')  %LSB for 2: 2.3842e-007=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.1921e-007
roundq(realmin/2,struct('ufl','f'),'list')  %flush to zero, returns 0
roundq(realmin/2,struct('ufl','g'))  %gradual underflow 
          %realmin/2=2^(-1022-1)=1.1125e-308
  
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 (Shift-click) 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') %110-bit number
y=randn(x) %normally distributed 110-bit number
y=rand(x) %uniformly distributed 110-bit number
  
-------------------- 
These pages and the associated software are maintained by 
Zsolt Kollár.
 |