This code does the same as matlab's idct with a few improvements:
1) on the first call, it's a bit faster than the builtin idct
2) on subsequent calls, due to persistent variables, it's about 2x or more faster than the builtin idct, and only about 1.5x slower than a fft call
3) you can specify which version of the type II IDCT you want: either matlab's orthogonal version, or the standard version (cf. fftw website, or wikipedia). With the "fftw" version, there are two further choices: 1) compute the true inverse (up to scaling) to the forward "fftw" type II DCT, or 2) compute the adjoint (i.e. transpose) to the forward "fftw" type II DCT.
4) If the forward transform sampled the "rows" of the (implicit) DCT matrix, then giving the dimension and the index of sampled rows will allow idctt to return the appropriate inverse or adjoint.
This complements the code "dctt".
The extra "t" at the end of the filename has no meaning other than to distinguish it from the builtin dct.
Type "help idctt" for usage instructions.
Ex. test if dctt and idctt (w/o fftw arguments) are really adjoints:
n = 10;
F = dctt(eye(n));
Ft = idctt(eye(n));
F.' - Ft % this should be a zero matrix |