24.07.2013 Views

Discrete Cosine Transform (DCT)

Discrete Cosine Transform (DCT)

Discrete Cosine Transform (DCT)

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Discrete</strong> <strong>Cosine</strong> <strong>Transform</strong> (<strong>DCT</strong>)<br />

1


<strong>DCT</strong> is a Fourier-related transform similar to<br />

DFT, but using only real numbers. It is<br />

equivalent to a DFT roughly twice the<br />

transform length, operating on real data with<br />

“Even symmetry” (since Fourier transform of<br />

a real and even function is real and even).<br />

The most common variant of <strong>DCT</strong> is the type-<br />

II <strong>DCT</strong> and its inverse is the type-III <strong>DCT</strong>.<br />

2


Two related transform are the discrete sine<br />

transform (DST), which is equivalent to a DFT<br />

of “Real and odd” functions, and the modified<br />

<strong>DCT</strong> (M<strong>DCT</strong>), which is based on a <strong>DCT</strong> of<br />

overlapping data.<br />

The other interesting transform is the discrete<br />

Hartley transform (DHT) in which<br />

Even part of DHT = Real part of DFT<br />

Odd part of DHT = Imaginary part of DFT<br />

3


<strong>DCT</strong> is often used in signal and image processing,<br />

especially for lossy data compression, because it has<br />

a strong “Energy Compaction” property: most of the<br />

signal information tends to be concentrated in a few<br />

low-frequency components of the <strong>DCT</strong>, approaching<br />

the KLT for signals based on certain limits of Markov<br />

processes.<br />

<strong>DCT</strong> is used in JPEG image compression, MJPEG and<br />

MPEG video compression.<br />

M<strong>DCT</strong> is used in MP3, AAC, etc. audio compression.<br />

4


Formulation:<br />

<strong>DCT</strong> is a linear and invertible function<br />

F: R n →R n (where R denotes the set of real<br />

numbers.), or equivalently on nxn matrix.<br />

<strong>DCT</strong>-I:<br />

1<br />

f j = ( x<br />

2<br />

0<br />

+ ( −1)<br />

j<br />

x<br />

n−1<br />

)<br />

+<br />

∑ − n 2<br />

k = 1<br />

x<br />

k<br />

π<br />

cos[<br />

n −1<br />

jk]<br />

5


A <strong>DCT</strong>-I of n=5 real numbers abcde is exactly<br />

equivalent to a DFT of 8 real numbers<br />

abcdedcb (even symmetry), here divided by 2.<br />

(In contrast, <strong>DCT</strong>-II ~ IV involve a halfsample<br />

shift in the equivalent DFT.)<br />

Note that <strong>DCT</strong>-I is not defined for n less than<br />

2. (All other <strong>DCT</strong> types are defined for any<br />

positive n.)<br />

6


<strong>DCT</strong>-II:<br />

f<br />

j<br />

=<br />

∑ − n 1<br />

k = 0<br />

x<br />

k<br />

π<br />

cos[ j(<br />

k +<br />

n<br />

1<br />

)]<br />

2<br />

Some authors further multiply the f o term by<br />

1/<br />

2<br />

(see below for the corresponding<br />

change in <strong>DCT</strong>-III) . This makes the <strong>DCT</strong>-II<br />

matrix orthogonal (up to a scale factor), but<br />

breaks the direct correspondence with a realeven<br />

DFT of half-shifted input.<br />

7


<strong>DCT</strong>-III:<br />

f<br />

j<br />

=<br />

1<br />

2<br />

x<br />

0<br />

+<br />

∑ − n 1<br />

k = 1<br />

x<br />

k<br />

π<br />

cos[ ( j<br />

n<br />

Some authors further multiply the x 0 term<br />

by 1/<br />

2 , this makes the <strong>DCT</strong>-III matrix<br />

orthogonal (up to a scale factor), but breaks<br />

the direct correspondence with a real even<br />

DFT of half-shifted output.<br />

+<br />

1<br />

) k]<br />

2<br />

8


<strong>DCT</strong>-IV:<br />

f<br />

j<br />

=<br />

∑ − n 1<br />

k = 0<br />

x<br />

k<br />

π<br />

cos[ ( j<br />

n<br />

<strong>DCT</strong>-IV matrix is orthogonal (up to a<br />

scale factor).<br />

M<strong>DCT</strong> is based on <strong>DCT</strong>-IV with<br />

overlapped data.<br />

+<br />

1<br />

)(<br />

2<br />

k<br />

+<br />

1<br />

)]<br />

2<br />

9


<strong>DCT</strong> V-VIII:<br />

<strong>DCT</strong> types I-IV are equivalent to real-even<br />

DFTs of even order; therefore, there are 4<br />

additional types of <strong>DCT</strong> corresponding to<br />

real-even DFTs of logically odd order,<br />

which have factors of (n + 1/2) in the<br />

denominators of the cosine arguments.<br />

These variants seem to be rarely used in<br />

practice.<br />

10


Inverse <strong>Transform</strong>s:<br />

I<strong>DCT</strong>-I is <strong>DCT</strong>-I multiplied by 2/(n-1).<br />

I<strong>DCT</strong>-IV is <strong>DCT</strong>-IV multiplied by 2/n.<br />

I<strong>DCT</strong>-II is <strong>DCT</strong>-III multiplied by 2/n (and<br />

versa).<br />

11


Computation<br />

Direct application of the above formulas<br />

would require O(n 2 ) operations, as in the<br />

FFT it is possible to compute the same<br />

thing with only O(nlogn) complexity by<br />

factorizing the computation. (One can also<br />

compute <strong>DCT</strong>s via FFTs combined with<br />

O(n)) pre- and post-processing steps.)<br />

12


References:<br />

1. Rao and Yip, <strong>Discrete</strong> <strong>Cosine</strong> <strong>Transform</strong>:<br />

Algorithms, Advantages, Applications; Academic<br />

Press, Boston, 1990.<br />

2. Arai, Agui, Nakajima, A Fast <strong>DCT</strong>-SQ scheme<br />

for Images, Trans. On IEICE-E, 71(11), 1095, Nov.<br />

1998.<br />

3. Tseng and Millen, On Computing the <strong>DCT</strong>, IEEE<br />

Trans. On Computers, pp. 966-968, Oct. 1978.<br />

4. Frigo and Johnson, The Design and<br />

Implementation of FFTW3, IEEE Proceedings, vol.<br />

93, no. 2, pp. 216-231, 2005.<br />

13


The implementation of the 2D-I<strong>DCT</strong><br />

Let the 8-point 1-D <strong>DCT</strong> of input data<br />

f(x) be:<br />

S<br />

8<br />

( u)<br />

=<br />

C<br />

2<br />

u<br />

7<br />

∑<br />

x=<br />

0<br />

( 2x<br />

+ 1)<br />

πu<br />

f ( x)<br />

cos<br />

16<br />

First the 1-D <strong>DCT</strong> is applied to all the<br />

rows of the 2-D input f(y,x):<br />

S<br />

8r<br />

( y,<br />

u)<br />

=<br />

C<br />

2<br />

u<br />

7<br />

∑<br />

x=<br />

0<br />

( 2x<br />

+ 1)<br />

πu<br />

f ( y,<br />

x)<br />

cos<br />

16<br />

(1)<br />

(2)<br />

14


Then the 1-D <strong>DCT</strong> is applied to the<br />

columns of the results of (2):<br />

S(<br />

v,<br />

u)<br />

=<br />

C<br />

2<br />

u<br />

7<br />

∑<br />

y=<br />

0<br />

S<br />

8r<br />

( y,<br />

u)<br />

cos<br />

y + 1)<br />

πv<br />

16<br />

By substitution we get the formulation<br />

of the 2-D <strong>DCT</strong>:<br />

S(<br />

v,<br />

u)<br />

=<br />

C<br />

2<br />

v<br />

C<br />

2<br />

u<br />

7<br />

7<br />

∑∑<br />

y= 0 x=<br />

0<br />

( 2<br />

( 2x<br />

+ 1)<br />

πu<br />

( 2y<br />

+ 1)<br />

πv<br />

f ( y,<br />

x)<br />

cos cos<br />

16 16<br />

(3)<br />

(4)<br />

15


Fast 1-D <strong>DCT</strong> Algorithms<br />

Define<br />

Eqn. (1) can be written as:<br />

Since<br />

2πux<br />

πu<br />

α = , β = , and H = α + β.<br />

16 16<br />

7<br />

7<br />

Cu<br />

( 2x<br />

+ 1)<br />

πu<br />

Cu<br />

S8 ( u)<br />

= ∑ f ( x)<br />

cos = ∑ f ( x)<br />

cos( α + β )<br />

2<br />

16 2<br />

2cos<br />

x=<br />

0<br />

H cos β = 2cos(<br />

α + β ) cos β =<br />

↑<br />

( HW )<br />

x=<br />

0<br />

2xπu<br />

2(<br />

15 − x)<br />

πu<br />

cos + cos<br />

16 16<br />

16


4<br />

C<br />

u<br />

πu<br />

cos S<br />

16<br />

8<br />

( u)<br />

=<br />

7<br />

∑<br />

x=<br />

0<br />

2xπu<br />

2(<br />

15 − x)<br />

πu<br />

f ( x)[cos<br />

+ cos ]<br />

16 16<br />

If we constitute a sequence of elements<br />

f(k), k = 0, 1, …, 15 with<br />

f<br />

( k)<br />

=<br />

⎧<br />

⎨<br />

⎩<br />

f ( k),<br />

∀k<br />

< 8<br />

f ( 15 − k),<br />

∀k<br />

≥ 8<br />

(5)<br />

17


We can re-write (5) as<br />

4<br />

C<br />

u<br />

πu<br />

cos S<br />

16<br />

When<br />

j<br />

8<br />

=<br />

( u)<br />

=<br />

−1<br />

15<br />

2kπu<br />

16<br />

∑ f ( k)<br />

cos = Re{ ∑<br />

k= 0<br />

k=<br />

0<br />

2kπu<br />

− j<br />

16<br />

Decaese the 16-point DFT is defined by<br />

F<br />

16<br />

( u)<br />

=<br />

15<br />

∑<br />

k = 0<br />

f<br />

( k)<br />

e<br />

2kπu<br />

− j<br />

16<br />

15<br />

f ( k)<br />

e<br />

}<br />

18


We have the following <strong>DCT</strong> v.s. DFT<br />

relationship<br />

4<br />

C u<br />

u<br />

cos<br />

16<br />

π : only the first 8 values<br />

S ( u)<br />

= Re{ F ( u)}<br />

are needed.<br />

8<br />

Instead of performing an I<strong>DCT</strong> an IDFT of<br />

twice the length is performed. IDFT can be<br />

implemented by IFFT with complexity<br />

O(NlogN)!<br />

16<br />

19


4 πu<br />

cos<br />

The multiplication by Cu 16 seems not so<br />

efficient. However, bear in mind that the last<br />

operation before the I<strong>DCT</strong> is the<br />

“Quantization”. That means every value is to<br />

be multiplied with a certain constant<br />

(1/Quantization factor) depending on its<br />

position in <strong>DCT</strong> matrix. So we can merge the<br />

4 πu<br />

multiplications by cos<br />

C and the multiplication<br />

u 16<br />

by Quantizer dependent constant together.<br />

As a result, the Quantization and <strong>DCT</strong>-DFT<br />

transform is performed in one step.<br />

20


Let<br />

X M = (f(0), f(1), f(2), f(3), f(4), f(5), f(6),<br />

f(7)): original data<br />

<br />

1 1 1 1 1<br />

FM = ( 16 F(0), F(1), F(2), F(3), F(4),<br />

8<br />

1<br />

8 8<br />

1<br />

8<br />

1<br />

8 8 8<br />

F(5), F(6), F(7)): scaled transformed<br />

data<br />

Define P(a,b) =<br />

2π<br />

a 2πb<br />

cos +<br />

cos<br />

16 16<br />

We can establish a matrix T M:<br />

21


22<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

=<br />

)<br />

56<br />

,<br />

49<br />

(<br />

)<br />

63<br />

,<br />

42<br />

(<br />

)<br />

70<br />

,<br />

35<br />

(<br />

)<br />

77<br />

,<br />

28<br />

(<br />

)<br />

84<br />

,<br />

21<br />

(<br />

)<br />

91<br />

,<br />

14<br />

(<br />

)<br />

98<br />

,<br />

7<br />

(<br />

)<br />

105<br />

,<br />

0<br />

(<br />

)<br />

48<br />

,<br />

42<br />

(<br />

)<br />

54<br />

,<br />

36<br />

(<br />

)<br />

60<br />

,<br />

30<br />

(<br />

)<br />

66<br />

,<br />

24<br />

(<br />

)<br />

72<br />

,<br />

18<br />

(<br />

)<br />

78<br />

,<br />

12<br />

(<br />

)<br />

84<br />

,<br />

6<br />

(<br />

)<br />

90<br />

,<br />

0<br />

(<br />

)<br />

40<br />

,<br />

35<br />

(<br />

)<br />

45<br />

,<br />

30<br />

(<br />

)<br />

50<br />

,<br />

25<br />

(<br />

)<br />

55<br />

,<br />

20<br />

(<br />

)<br />

60<br />

,<br />

15<br />

(<br />

)<br />

65<br />

,<br />

10<br />

(<br />

)<br />

70<br />

,<br />

5<br />

(<br />

)<br />

75<br />

,<br />

0<br />

(<br />

)<br />

32<br />

,<br />

28<br />

(<br />

)<br />

36<br />

,<br />

24<br />

(<br />

)<br />

40<br />

,<br />

20<br />

(<br />

)<br />

44<br />

,<br />

16<br />

(<br />

)<br />

48<br />

,<br />

12<br />

(<br />

)<br />

52<br />

,<br />

8<br />

(<br />

)<br />

56<br />

,<br />

4<br />

(<br />

)<br />

60<br />

,<br />

0<br />

(<br />

)<br />

24<br />

,<br />

21<br />

(<br />

)<br />

27<br />

,<br />

18<br />

(<br />

)<br />

30<br />

,<br />

15<br />

(<br />

)<br />

33<br />

,<br />

12<br />

(<br />

)<br />

36<br />

,<br />

9<br />

(<br />

)<br />

39<br />

,<br />

6<br />

(<br />

)<br />

42<br />

,<br />

3<br />

(<br />

)<br />

045<br />

(<br />

)<br />

16<br />

,<br />

14<br />

(<br />

)<br />

18<br />

,<br />

12<br />

(<br />

)<br />

20<br />

,<br />

10<br />

(<br />

)<br />

22<br />

,<br />

8<br />

(<br />

)<br />

24<br />

,<br />

6<br />

(<br />

)<br />

26<br />

,<br />

4<br />

(<br />

)<br />

28<br />

,<br />

2<br />

(<br />

)<br />

30<br />

,<br />

0<br />

(<br />

)<br />

8<br />

,<br />

7<br />

(<br />

)<br />

9<br />

,<br />

6<br />

(<br />

)<br />

10<br />

,<br />

5<br />

(<br />

)<br />

11<br />

,<br />

4<br />

(<br />

)<br />

12<br />

,<br />

3<br />

(<br />

)<br />

13<br />

,<br />

2<br />

(<br />

)<br />

14<br />

,<br />

1<br />

(<br />

)<br />

15<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

2<br />

)<br />

0<br />

,<br />

0<br />

(<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

P<br />

T M


F M = X M x (1/8)T M<br />

Because<br />

cosα<br />

= cos( −α<br />

);<br />

cos( 2πn<br />

+ α)<br />

= cosα;<br />

Define<br />

k<br />

2<br />

= −cosα<br />

= cos( π −α<br />

) = cos( π + α)<br />

π 2π<br />

π 2<br />

= cos ; k4<br />

= cos = cos = ; k6<br />

8 8 4 2<br />

3π<br />

π<br />

= cos = sin<br />

8 8<br />

23


24<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

+<br />

−<br />

−<br />

+<br />

−<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

−<br />

+<br />

+<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

+<br />

+<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

+<br />

+<br />

+<br />

=<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

2<br />

2<br />

4<br />

4<br />

6<br />

6<br />

6<br />

6<br />

4<br />

4<br />

2<br />

2<br />

4<br />

4<br />

4<br />

4<br />

4<br />

4<br />

4<br />

4<br />

6<br />

6<br />

4<br />

4<br />

2<br />

2<br />

2<br />

2<br />

4<br />

4<br />

6<br />

6<br />

6<br />

6<br />

4<br />

4<br />

2<br />

2<br />

2<br />

2<br />

4<br />

4<br />

6<br />

6<br />

4<br />

4<br />

4<br />

4<br />

4<br />

4<br />

4<br />

4<br />

2<br />

2<br />

4<br />

4<br />

6<br />

6<br />

6<br />

6<br />

4<br />

4<br />

2<br />

2<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

k<br />

T M


25<br />

X M = F M x (8T M -1 ) = FM x L; (L = 8T M -1 )<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

+<br />

−<br />

−<br />

−<br />

+<br />

+<br />

+<br />

−<br />

−<br />

−<br />

−<br />

+<br />

+<br />

−<br />

−<br />

−<br />

−<br />

+<br />

−<br />

−<br />

+<br />

−<br />

−<br />

−<br />

+<br />

−<br />

+<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

+<br />

−<br />

+<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

−<br />

+<br />

+<br />

−<br />

−<br />

−<br />

+<br />

−<br />

+<br />

+<br />

−<br />

−<br />

−<br />

−<br />

+<br />

−<br />

+<br />

−<br />

−<br />

−<br />

+<br />

−<br />

+<br />

−<br />

−<br />

−<br />

+<br />

−<br />

−<br />

−<br />

+<br />

−<br />

−<br />

+<br />

−<br />

+<br />

−<br />

−<br />

=<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

1<br />

2<br />

2<br />

4<br />

2<br />

4<br />

6<br />

2<br />

4<br />

6<br />

4<br />

2<br />

2<br />

4<br />

4<br />

4<br />

4<br />

6<br />

6<br />

4<br />

6<br />

4<br />

2<br />

6<br />

4<br />

2<br />

4<br />

6<br />

6<br />

6<br />

6<br />

4<br />

6<br />

4<br />

2<br />

6<br />

4<br />

2<br />

4<br />

6<br />

6<br />

4<br />

4<br />

4<br />

4<br />

2<br />

2<br />

4<br />

2<br />

4<br />

6<br />

2<br />

4<br />

6<br />

4<br />

2<br />

2<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

L


Where<br />

C<br />

C<br />

2<br />

6<br />

π 2π<br />

= 2cos<br />

; C4<br />

= 2cos<br />

=<br />

8<br />

8<br />

3π<br />

π<br />

= 2cos<br />

= 2sin<br />

8 8<br />

The matrix L can be factored as:<br />

L = B1 x M x A1 x A2 x A3<br />

with:<br />

2<br />

26


27<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

−<br />

−<br />

−<br />

−<br />

=<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

0<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

B<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

−<br />

−<br />

=<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

2<br />

6<br />

4<br />

6<br />

2<br />

4<br />

C<br />

C<br />

C<br />

C<br />

C<br />

C<br />

M


28<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

−<br />

−<br />

−<br />

−<br />

=<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

1<br />

0<br />

1<br />

A<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

−<br />

−<br />

=<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

2<br />

A


29<br />

So the IDFT can be<br />

performed by 5<br />

steps:<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎥<br />

⎦<br />

⎤<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎢<br />

⎣<br />

⎡<br />

−<br />

−<br />

−<br />

−<br />

=<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

3<br />

A


30<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎩<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎨<br />

⎧<br />

+<br />

=<br />

−<br />

=<br />

−<br />

=<br />

+<br />

=<br />

+<br />

=<br />

−<br />

=<br />

+<br />

=<br />

−<br />

=<br />

=<br />

=<br />

2<br />

1<br />

)<br />

7<br />

(<br />

8<br />

1<br />

)<br />

1<br />

(<br />

8<br />

1<br />

2<br />

1<br />

)<br />

5<br />

(<br />

8<br />

1<br />

)<br />

3<br />

(<br />

8<br />

1<br />

2<br />

)<br />

7<br />

(<br />

8<br />

1<br />

)<br />

1<br />

(<br />

8<br />

1<br />

1<br />

)<br />

3<br />

(<br />

8<br />

1<br />

)<br />

5<br />

(<br />

8<br />

1<br />

)<br />

6<br />

(<br />

8<br />

1<br />

)<br />

2<br />

(<br />

8<br />

1<br />

)<br />

6<br />

(<br />

8<br />

1<br />

)<br />

2<br />

(<br />

8<br />

1<br />

)<br />

4<br />

(<br />

8<br />

1<br />

)<br />

0<br />

(<br />

16<br />

1<br />

:<br />

1<br />

7<br />

6<br />

5<br />

4<br />

3<br />

2<br />

1<br />

0<br />

temp<br />

temp<br />

a<br />

F<br />

F<br />

a<br />

temp<br />

temp<br />

a<br />

F<br />

F<br />

temp<br />

F<br />

F<br />

temp<br />

F<br />

F<br />

a<br />

F<br />

F<br />

a<br />

F<br />

F<br />

a<br />

F<br />

a<br />

F<br />

a<br />

B<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎩<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎨<br />

⎧<br />

=<br />

+<br />

−<br />

=<br />

=<br />

+<br />

−<br />

=<br />

=<br />

=<br />

=<br />

=<br />

7<br />

7<br />

2<br />

6<br />

6<br />

4<br />

6<br />

4<br />

5<br />

5<br />

6<br />

6<br />

2<br />

4<br />

4<br />

3<br />

3<br />

4<br />

2<br />

2<br />

1<br />

1<br />

0<br />

0<br />

)<br />

(<br />

)<br />

(<br />

:<br />

a<br />

b<br />

C<br />

a<br />

C<br />

a<br />

b<br />

C<br />

a<br />

b<br />

C<br />

a<br />

C<br />

a<br />

b<br />

a<br />

b<br />

c<br />

a<br />

b<br />

a<br />

b<br />

a<br />

b<br />

M


31<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎩<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎨<br />

⎧<br />

=<br />

=<br />

=<br />

=<br />

+<br />

=<br />

−<br />

=<br />

−<br />

=<br />

−<br />

=<br />

−<br />

=<br />

7<br />

7<br />

3<br />

6<br />

4<br />

5<br />

4<br />

1<br />

0<br />

3<br />

3<br />

2<br />

2<br />

1<br />

0<br />

1<br />

5<br />

0<br />

7<br />

6<br />

3<br />

3<br />

3<br />

:<br />

1<br />

b<br />

n<br />

b<br />

n<br />

b<br />

n<br />

temp<br />

n<br />

b<br />

b<br />

n<br />

b<br />

b<br />

n<br />

b<br />

b<br />

n<br />

b<br />

temp<br />

n<br />

b<br />

b<br />

temp<br />

A<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎩<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎨<br />

⎧<br />

−<br />

=<br />

−<br />

=<br />

−<br />

=<br />

+<br />

=<br />

+<br />

=<br />

=<br />

=<br />

=<br />

0<br />

5<br />

7<br />

6<br />

3<br />

6<br />

2<br />

1<br />

5<br />

6<br />

3<br />

4<br />

2<br />

1<br />

3<br />

4<br />

2<br />

0<br />

1<br />

7<br />

0<br />

:<br />

2<br />

n<br />

n<br />

m<br />

n<br />

n<br />

m<br />

n<br />

n<br />

m<br />

n<br />

n<br />

m<br />

n<br />

n<br />

m<br />

n<br />

m<br />

n<br />

m<br />

n<br />

m<br />

A<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎩<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎪<br />

⎨<br />

⎧<br />

−<br />

=<br />

−<br />

=<br />

+<br />

=<br />

+<br />

=<br />

−<br />

=<br />

−<br />

=<br />

+<br />

=<br />

+<br />

=<br />

0<br />

4<br />

2<br />

3<br />

1<br />

5<br />

7<br />

6<br />

7<br />

6<br />

1<br />

5<br />

2<br />

3<br />

0<br />

4<br />

)<br />

7<br />

(<br />

)<br />

6<br />

(<br />

)<br />

5<br />

(<br />

)<br />

4<br />

(<br />

)<br />

3<br />

(<br />

)<br />

2<br />

(<br />

)<br />

1<br />

(<br />

)<br />

0<br />

(<br />

:<br />

3<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

m<br />

m<br />

f<br />

A


32<br />

In part M, a simplification can be made:<br />

So define<br />

)<br />

(<br />

)<br />

(<br />

)<br />

(<br />

)<br />

(<br />

)<br />

(<br />

6<br />

2<br />

6<br />

6<br />

4<br />

6<br />

6<br />

6<br />

6<br />

6<br />

2<br />

6<br />

6<br />

4<br />

2<br />

6<br />

6<br />

4<br />

2<br />

6<br />

2<br />

4<br />

6<br />

4<br />

6<br />

6<br />

4<br />

6<br />

4<br />

6<br />

6<br />

2<br />

4<br />

6<br />

6<br />

2<br />

4<br />

4<br />

C<br />

C<br />

a<br />

a<br />

a<br />

C<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

b<br />

C<br />

C<br />

a<br />

a<br />

a<br />

C<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

C<br />

a<br />

b<br />

+<br />

+<br />

+<br />

−<br />

=<br />

+<br />

−<br />

+<br />

−<br />

=<br />

+<br />

−<br />

=<br />

−<br />

−<br />

+<br />

−<br />

=<br />

+<br />

−<br />

−<br />

−<br />

=<br />

+<br />

−<br />

=<br />

4<br />

4<br />

)<br />

(<br />

4<br />

and<br />

6<br />

6<br />

4<br />

4<br />

6<br />

4<br />

6<br />

6<br />

2<br />

6<br />

2<br />

temp<br />

Ra<br />

b<br />

temp<br />

Qa<br />

b<br />

a<br />

a<br />

C<br />

temp<br />

C<br />

C<br />

R<br />

C<br />

C<br />

Q<br />

−<br />

=<br />

−<br />

−<br />

=<br />

+<br />

=<br />

+<br />

=<br />

−<br />

=


If you count the operations you will get 29<br />

additions and 5 multiplications.<br />

Because an 8x8 2-D <strong>DCT</strong> can be computed by<br />

applying 8-point 1-D <strong>DCT</strong> to each row and<br />

each column of the 2D data. Therefore,<br />

2x8x29 = 464 additions and 2x8x5 = 80<br />

multiplications are required in total.<br />

A more efficient <strong>DCT</strong> algorithm has been<br />

proposed by Feig and Winograd in IEEE Trans.<br />

on ASSP, pp. 2174-2193, 1992.<br />

33

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!