본문 바로가기
programming language/MATLAB

MATLAB Fast DCT(Discrete cosine transform) algorithm

by __observer__ 2012. 5. 29.
반응형

요즘 영상이나 음성과 같음 미디어 컨텐츠들이 많이 사용되고 있습니다.

 

이런 미디어 파일들은 데이터 량이 굉장히 크기 때문에 손실 압축 방식으로 그 데이터를 줄이는 압축 기술들이 많이 사용되는데~

 

이런 기술에 많이 이용되는 것이 바로 DCT(Discrete cosine transform) 라고 합니다.

 

mp3, jpg 같은 파일 형식들이 다~~ DCT 를 사용한다고 하니깐 정말 우리 생활과 너무나 밀접한 기술이라 할 수 있을 것 같네요.

 

DCT 위키 피디아 : http://en.wikipedia.org/wiki/Discrete_cosine_transform

 

위 주소의 내용을 보면 DFT 는 periodic 신호의 비연속 특성 때문에 고주파가 많이 올라오는 반면에 DCT 는 연속적이어서 고주파 성분이 적고 ~ 그에 따라 저주수에 신호 파워가 몰리는 특징이 있더군요.

 

따라서 특정 Threshold 보다 작은 고주파 신호를 없앤다 해도 DFT 에 비해 신호의 왜곡이 덜 할 것이라는 것을 예상해 볼 수 있습니다.

 

DCT 도 DFT 와 유사하기 때문에 FAST DCT 알고리즘이 존재 합니다.

 

FAST DCT 에 대한 내용들이 정리되어 있는 페이지 : http://fourier.eng.hmc.edu/e161/lectures/dct/node2.html

 

오늘은 위 주소의 내용들을 참조하여 FAST DCT 에 대해 간단히 소개해 보려 합니다.

 

일반적으로 흔히 말하는 DCT 수식은 다음과 같고 DCT-II 라고 합니다.

 

 

Inverse DCT 는 DCT-III를 말하며 다음 수식과 같죠.

 

 

FAST DCT 의 과정은 다음과 같이 세 단계로 구성되더군요.

 

FAST DCT 과정

 

 

 

 

FAST IDCT 과정

 

 

 

 

이론을 알아 봤으니깐 간단하게 MATLAB으로 확인해 볼까요~

 

MATLAB Signal Processing Toolbox 가 있으신 분들은 dct(), idct() 라는 함수를 사용하실 수 있습니다. 두 함수들은 DCT,IDCT matrix 를 orthogonal 하게 만들어 주기 위해서 특정 scale factor 들을 곱해 줬는데요.

 

위에서 서명했던 DCT-II, DCT-III 수식을 MATLAB 의 orthogonal 한 DCT 수식들과 같게 만들기 위해서는 다음과 같이 scale factor 를 곱해 주어야 합니다.

 

DCT-II 의 경우는 X(0) 에 을 곱해 주고 X 전체에 를 곱해 주면 되고~

 

DCT-III 의 경우는 X(0) 에 을 곱해 주고 전체에 곱해 주면 MATLAB 내장 함수들과 동일한 결과를 얻을 수 있습니다.

 

코드는 다음과 같습니다.


 

 

실행 결과에 대해 command 창에서 확인해 보면 에러가 10-15 정도니까~~~ 0 이나 마찬가지라는 것을 확인 할 수 있죠~

 


반응형

댓글