This is where navigation should be.

DCTI - Discrete Cosine Transform type I

Usage

c=dcti(f);
c=dcti(f,L);
c=dcti(f,[],dim);
c=dcti(f,L,dim);

Description

dcti(f) computes the discrete cosine transform of type I of the input signal f. If f is a matrix then the transformation is applied to each column. For N-D arrays, the transformation is applied to the first non-singleton dimension.

dcti(f,L) zero-pads or truncates f to length L before doing the transformation.

dcti(f,[],dim) or dcti(f,L,dim) applies the transformation along dimension dim.

The transform is real (output is real if input is real) and it is orthonormal.

This transform is its own inverse.

Let f be a signal of length L, let \(c=dcti(f)\) and define the vector w of length L by

\begin{equation*} w\left(n\right)=\begin{cases}\frac{1}{\sqrt{2}} & \text{if }n=0\text{ or }n=L-1\\\\1 & \text{otherwise}\end{cases} \end{equation*}

Then

\begin{equation*} c\left(n+1\right)=\sqrt{\frac{2}{L-1}}\sum_{m=0}^{L-1}w\left(n\right)w\left(m\right)f\left(m+1\right)\cos\left(\frac{\pi nm}{L-1}\right) \end{equation*}

The implementation of this functions uses a simple algorithm that require an FFT of length 2L-2, which might potentially be the product of a large prime number. This may cause the function to sometimes execute slowly. If guaranteed high speed is a concern, please consider using one of the other DCT transforms.

Examples:

The following figures show the first 4 basis functions of the DCTI of length 20:

% The dcti is its own adjoint.
F=dcti(eye(20));

for ii=1:4
  subplot(4,1,ii);
  stem(F(:,ii));
end;

References:

K. Rao and P. Yip. Discrete Cosine Transform, Algorithms, Advantages, Applications. Academic Press, 1990.

M. V. Wickerhauser. Adapted wavelet analysis from theory to software. Wellesley-Cambridge Press, Wellesley, MA, 1994.