Mathematics for Multimedia

Mladen Victor Wickerhauser

Cover of Springer/Birkhaeuser edition (2009) My book Mathematics for Multimedia, ISBN 978-0-8176-4879-4, was formerly managed by Elsevier/Academic Press. It is currently published by Birkhaeuser Verlag and should be available by November 24th, 2009.

An instructor's manual with more than 300 additional solved exercises is available. Please contact me by email for downloading instructions.

I would appreciate correspondence detailing any errors that readers may find. Please use the contact information maintained at the home page link below.

Cover of Elsevier/Academic Press edition (2003)


The Standard C implementations of the algorithms described in the book are available free to owners of the book. They are offered for their educational value and come with ABSOLUTELY NO WARRANTY of any kind.

All references are to the first printing, uncorrected. See my utility software page for links to free public Standard C compilers and PostScript graphics systems.
Chapter 1: Numbers and Arithmetic
  • quotrem.c: compute the quotient and remainder table in Sec.1.1.0, p.3.
  • gcd.c: Euclid's algorithm and its recursive version. Sec.1.1.0, p.4, and Sec.A.1, Solution 2, p.223.
  • quasiinv.c: compute the quasi-inverse of an integer with respect to a modulus. Sec.1.1.1, p.8, and Sec.A.1, Solution 5, p.224.
  • tobinary.c: compute the binary and hexadecimal digits of a decimal integer. Sec.1.1.2, p.9, and Sec.A.1, p.225.
  • pihex.c: compute the hexadecimal expansion of pi. Sec.1.1.2, p.9, and Sec.A.1, Solution 10, p.226.
  • sum.c: add up 100,000,000 1.0's to demonstrate single-precision truncation error. Sec.1.2.2, p.16, and Sec.A.1, Solution 12, p.226.
  • ieee32.c: interpret 32 ones and zeroes as an IEEE 32-bit floating-point number. Sec.1.2.2, pp.16-18, and Sec.A.1, Solution 13, pp.226-227.
Chapter 2: Space and Linearity
  • gramschm.c: orthonormalize three vectors in four-dimensional space using the Gram-Schmidt algorithm. Sec.2.1, pp.38-39, and Sec.A.2, p.230.
  • gepp.c: Gaussian elimination with partial pivoting gepp(); LU decomposition lupp(); matrix inversion mipp(); linear system solution from LU and pivoting data sslu(). Sec.2.2, pp.58-61.
Chapter 3: Time and Frequency
  • fray.c: midpoint fraying and splicing. Sec.3.1.2, pp.78-80.
  • fft.c: factored discrete Fourier transform, or FFT, and its inverse iFFT. Sec.3.2.1, p.98.
  • fht.c: factored discrete Hartley transform, or FHT, and its inverse iFHT. Sec.3.2.2, p.100.
Chapter 4: Sampling and Estimation
  • poly.c: polynomial algorithms from Sec.4.1, pp.108-116.
  • sincerr.c: integrate the tail of the sinc function. Sec.4.1.3, p.122.
  • gsincerr.c: integrate the tail of the Gaussian sinc function. Sec.4.1.3, p.122.
Chapter 5: Scale and Resolution
  • makefile: compilation instructions for all C codes from this chapter.
  • dwt.c: Mallat's discrete wavelet transform to specified depth, implemented by filter convolution. Sec.5.2.3, p.160.
  • pcqfilt.c and testpcqf.c: combined periodic conjugate quadrature filter transforms, with a program to test invertibility. Sec.5.2.3, p.162, and Sec.A.5, p.257.
  • pdwt.c: mallat's periodic discrete wavelet transform to specified depth, implemented by periodic filter convolution. Sec.5.2.3, p.163, and Sec.A.5, pp.257-258.
  • pdwt0.c: complete periodic discrete wavelet transform implemented by filter convolution. Sec.5.2.3, p.163.
  • haarlift.c: lifting implementation of the orthogonal Haar wavelet transform. Sec.5.2.4, p.166.
  • hsldht.c and hslift.c: half-sample symmetric lifting implementation of the biorthogonal discrete Haar wavelet transform. Sec.5.2.4, p.168, and Sec.A.5, pp.260-263.
  • wsl97.c and wslift.c: whole-sample symmetric lifting implementation of the JPEG-2000 biorthogonal 9-7 wavelet transform. Sec.5.2.4, pp.169-173, and Sec.A.5, pp.259-260.
  • plotting commands for Gnuplot to graph the output of wsl97.c, scaling function and wavelets produced by biorthogonal 9-tap and 7-tap filters. Sec.A.5, Solution 19, pp.259-260.
  • daub4.c and (commands for Gnuplot): prepare and plot data showing the graphs of the wavelet and scaling function produced by Daubechies' 4-tap orthogonal conjugate quadrature filters. Sec.A.5, Solution 17, pp.257-259.
Chapter 6: Redundancy and Information
  • hammcode.c: find a Hamming-type code of specified radius, size, and number of codewords. Sec.6.2.2, p.204, and Sec.A.6, Solution 12, pp.268-269.
  • checksum.c: compute checksums modulo 255 and 257. Sec.6.2.3, p.205.
  • polymod2.c: generate addition and multiplication tables for polynomials wih coefficients in the integers modulo 2. Sec.6.2.3, Table 6.3, pp.209-210.
  • mod2poly.c: functions to manipulate mod-2 polynomials of arbitrary size. Sec.6.2, pp.210-213.
  • intpoly2.c: functions to manipulate integer-sized mod-2 polynomials. Sec.6.2, pp.210-213.
  • irreduce.c: test whether a polynomial modulo 2 is irreducible. Sec.A.6, Solution 17, p.270.
  • cycle.c: determine the smallest N for which a given mod-2 polynomial divides (t to the N) plus 1. Sec.6.2.3, p.217, and Sec.A.6, Solution 19, pp.270-271.
  • elephant.c: encode some text strings concerning elephants. Sec.A.6, Solutions 20 and 21, pp.271-272.


Latest erratum is listed first, with its date in brackets. All references are to the first uncorrected 2003 printing, and have been corrected in the 2009 edition.

Questions? Return to M. Victor Wickerhauser's home page for contact information.