# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

# idct

Inverse discrete cosine transform

## Syntax

x = idct(y)
x = idct(y,n)
x = idct(y,n,dim)
y = dct(___,'Type',dcttype)

## Description

example

x = idct(y) returns the inverse discrete cosine transform of input array y. The output x has the same size as y. If y has more than one dimension, then idct operates along the first array dimension with size greater than 1.

x = idct(y,n) zero-pads or truncates the relevant dimension of y to length n before transforming.

x = idct(y,n,dim) computes the transform along dimension dim. To input a dimension and use the default value of n, specify the second argument as empty, [].

example

y = dct(___,'Type',dcttype) specifies the type of inverse discrete cosine transform to compute. See Inverse Discrete Cosine Transform for details. This option can be combined with any of the previous syntaxes.

## Examples

collapse all

Generate a signal that consists of a 25 Hz sinusoid sampled at 1000 Hz for 1 second. The sinusoid is embedded in white Gaussian noise with variance 0.01.

rng('default')

Fs = 1000;
t = 0:1/Fs:1-1/Fs;
x = sin(2*pi*25*t) + randn(size(t))/10;

Compute the discrete cosine transform of the sequence. Determine how many of the 1000 DCT coefficients are significant. Choose 1 as the threshold for significance.

y = dct(x);

sigcoeff = abs(y) >= 1;

howmany = sum(sigcoeff)
howmany = 17

Reconstruct the signal using only the significant components.

y(~sigcoeff) = 0;

z = idct(y);

Plot the original and reconstructed signals.

subplot(2,1,1)
plot(t,x)
yl = ylim;
title('Original')

subplot(2,1,2)
plot(t,z)
ylim(yl)
title('Reconstructed')

Verify that the different variants of the discrete cosine transform are orthogonal, using a random signal as a benchmark.

Start by generating the signal.

s = randn(1000,1);

Verify that DCT-1 and DCT-4 are their own inverses.

dct1 = dct(s,'Type',1);
idt1 = idct(s,'Type',1);

max(abs(dct1-idt1))

dct4 = dct(s,'Type',4);
idt4 = idct(s,'Type',4);

max(abs(dct4-idt4))
ans =

1.3323e-15

ans =

1.3323e-15

Verify that DCT-2 and DCT-3 are inverses of each other.

dct2 = dct(s,'Type',2);
idt2 = idct(s,'Type',3);

max(abs(dct2-idt2))

dct3 = dct(s,'Type',3);
idt3 = idct(s,'Type',2);

max(abs(dct3-idt3))
ans =

4.4409e-16

ans =

1.1102e-15

## Input Arguments

collapse all

Input discrete cosine transform, specified as a real-valued or complex-valued vector, matrix, N-D array, or gpuArray object.

See GPU Computing (Parallel Computing Toolbox) and GPU System Requirements for details on gpuArray objects.

Example: dct(sin(2*pi*(0:255)/4)) specifies the discrete cosine transform of a sinusoid.

Example: dct(sin(2*pi*[0.1;0.3]*(0:39))') specifies the discrete cosine transform of a two-channel sinusoid.

Data Types: single | double
Complex Number Support: Yes

Inverse transform length, specified as a positive integer scalar.

Data Types: single | double

Dimension to operate along, specified as a positive integer scalar.

Data Types: single | double

Inverse discrete cosine transform type, specified as a positive integer scalar from 1 to 4.

Data Types: single | double

## Output Arguments

collapse all

Inverse discrete cosine transform, returned as a real-valued or complex-valued vector, matrix, N-D array, or gpuArray object.

collapse all

### Inverse Discrete Cosine Transform

The inverse discrete cosine transform reconstructs a sequence from its discrete cosine transform (DCT) coefficients. The idct function is the inverse of the dct function.

The DCT has four standard variants. For a transformed signal y of length N, and with δkℓ the Kronecker delta, the inverses are defined by:

• Inverse of DCT-1:

$x\left(n\right)=\sqrt{\frac{2}{N}}\sum _{k=1}^{N}y\left(k\right)\frac{1}{\sqrt{1+{\delta }_{k1}+{\delta }_{kN}}}\frac{1}{\sqrt{1+{\delta }_{n1}+{\delta }_{nN}}}\mathrm{cos}\left(\frac{\pi }{N-1}\left(k-1\right)\left(n-1\right)\right)$

• Inverse of DCT-2:

$x\left(n\right)=\sqrt{\frac{2}{N}}\sum _{k=1}^{N}y\left(k\right)\frac{1}{\sqrt{1+{\delta }_{n1}}}\mathrm{cos}\left(\frac{\pi }{2N}\left(2k-1\right)\left(n-1\right)\right)$

• Inverse of DCT-3:

$x\left(n\right)=\sqrt{\frac{2}{N}}\sum _{k=1}^{N}y\left(k\right)\frac{1}{\sqrt{1+{\delta }_{k1}}}\mathrm{cos}\left(\frac{\pi }{2N}\left(k-1\right)\left(2n-1\right)\right)$

• Inverse of DCT-4:

$x\left(n\right)=\sqrt{\frac{2}{N}}\sum _{k=1}^{N}y\left(k\right)\mathrm{cos}\left(\frac{\pi }{4N}\left(2k-1\right)\left(2n-1\right)\right)$

The series are indexed from n = 1 and k = 1 instead of the usual n = 0 and k = 0, because MATLAB® vectors run from 1 to N instead of from 0 to N – 1.

All variants of the DCT are unitary (or, equivalently, orthogonal): To find the forward transforms, switch k and n in each definition. In particular, DCT-1 and DCT-4 are their own inverses, and DCT-2 and DCT-3 are inverses of each other.

## References

[1] Jain, A. K. Fundamentals of Digital Image Processing. Englewood Cliffs, NJ: Prentice-Hall, 1989.

[2] Pennebaker, W. B., and J. L. Mitchell. JPEG Still Image Data Compression Standard. New York: Van Nostrand Reinhold, 1993.

[3] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.