[include(틀:관련 문서, top1=이산 푸리에 변환)] [목차] == 개요 == Discrete Cosine Transform (DCT) [[이산 푸리에 변환]](DFT)과 매우 유사한 변환이며 주로 DCT로 줄여서 부른다. == 공식 == DCT에는 여러 방법이 존재하나 '''DCT-I'''과 '''DCT-II'''의 두 가지가 주로 사용된다. [math(\displaystyle n, k, N ∈ \mathbb{Z})]이며 [math(\displaystyle α[n] = \begin{cases} \frac{1}{2} & (n=0, N-1) \\ 1 & (1 \leq n \leq N-2) \end{cases})] 일 때, '''DCT-I'''과 그 역변환(inverse)은 각각 다음과 같이 정의된다. ||
'''DCT-I : ''' [math(\displaystyle X[k] = 2\sum_{n=0}^{N-1} α[n] x[n] \cos\!\left\{\frac{\pi}{N-1} n k \right\} (0 \leq k \leq N-1))] || ||
'''iDCT-I : ''' [math(\displaystyle x[n] = \frac{1}{N-1}\sum_{k=0}^{N-1} α[k] X[k] \cos\!\left\{\frac{\pi}{N-1} n k \right\} (0 \leq n \leq N-1))] || [math(\displaystyle β[k] = \begin{cases} \frac{1}{2} & (k=0) \\ 1 & (1 \leq k \leq N-1) \end{cases})]일 때, '''DCT-II'''와 그 역변환은 다음과 같다. ||
'''DCT-II : ''' [math(\displaystyle X[k] = 2\sum_{n=0}^{N-1} x[n] \cos\!\left\{\frac{\pi}{N} \left(n+\frac{1}{2}\right) k \right\} (0 \leq k \leq N-1))] || ||
'''iDCT-II : ''' [math(\displaystyle x[n] = \frac{1}{N}\sum_{k=0}^{N-1} β[k] X[k] \cos\!\left\{\frac{\pi}{N} \left(n+\frac{1}{2}\right) k \right\} (0 \leq n \leq N-1))] || 참고로 [math(\displaystyle \tildeβ[k] = \begin{cases} \frac{1}{\sqrt 2} & (k=0) \\ 1 & (1 \leq k \leq N-1) \end{cases})]일 때, '''DCT-II'''와 그 역변환을 다음과 같이 정의하기도 한다. ||
'''DCT-II : ''' [math(\displaystyle \tilde X[k] = \sqrt {\frac{2}{N}} \sum_{n=0}^{N-1} x[n] \cos\!\left\{\frac{\pi}{N} \left(n+\frac{1}{2}\right) k \right\} (0 \leq k \leq N-1))] || ||
'''iDCT-II : ''' [math(\displaystyle x[n] = \sqrt {\frac{2}{N}} \sum_{k=0}^{N-1} \tilde β[k] \tilde X[k] \cos\!\left\{\frac{\pi}{N} \left(n+\frac{1}{2}\right) k \right\} (0 \leq n \leq N-1))] || 다음과 같이 N=32인 임의의 수열이 주어졌을 경우, ||
[[파일:Time_series_N_32.jpg]] || '''DCT-II'''를 거쳐 최종적으로 변환된 수열은 다음과 같이 나타난다. ||
[[파일:Time_series_DCT_II.jpg]] || 만약 원본 수열을 DFT로 변환한다면, 결과는 다음과 같은 실수부와 허수부의 결합으로 나타난다. ||
[[파일:Time_series_DFT.jpg]] || 즉 [[푸리에 변환]]과 역 푸리에 변환이 주어진 수열을 복소 지수 함수와의 일차 결합으로 표현하도록 정의된다면, DCT는 복소 지수 함수가 아닌 [[코사인]] 함수를 사용해서 주어진 길이 N의 유한한 수열을 실수 계수로 재구성하도록 정의되는 것이다.[* [[오일러 공식]]을 보면 알겠지만, 복소 지수 함수는 코사인 함수 급수와 사인 함수 급수를 모두 포함하고 있다. 사인 함수 급수는 특정 인수의 치역을 나타내는 것이므로 즉 이산 코사인 변환은 한 함수에서의 특정 인수의 정의역을 나타내는 데 특화된 변환이다.] == 유용성 == 위에서 보다시피 DCT, 그 중에서도 '''DCT-II'''는 변환 결과물이 항상 실수가 나오고 변환된 계수들이 낮은 인덱스에 몰려 있다는 특징이 있다. 이 특징을 응용하여, 위의 '''DCT-II''' 및 DFT 결과물에서 각각 몇 개의 계수를 0으로 만들고, 이를 다시 역변환하여 본래 수열과의 오차를 나타내면 다음과 같다. ||
[[파일:DCT_DFT_compression.jpg]] || 보다시피 DFT는 조금만 잘라도 원본과의 차이가 계속 늘어나지만, '''DCT-II'''는 25개까지 잘라도 오차가 크게 증가하지 않는다는 것을 알 수 있다. 이와 같이 DCT는 특정한 계수 이상의 값을 잘라내기 좋아서 오디오, 영상 등의 신호처리에서 널리 사용된다. 예를 들면 TV에는 동영상을 처리하기 위해 Inverse-DCT를 계산하는 회로가 들어 있고, [[JPEG]]의 경우 주어진 데이터를 DCT한 후 양자화를 통해 눈이 잘 인식하지 못하는 고주파 성분을 날리는 방식으로 정보량을 줄인다. == 기타 == DCT는 수식을 바로 계산하면 계산량이 매우 많기 때문에 FFT처럼 버터플라이[* 신호가 흘러가는 모습이 나비 모양과 닮았다고 해서 버터플라이라는 이름이 붙었다.]를 적용해 연산량을 줄여서 계산할 수 있다. [[분류:해석학(수학)]]