요즘 영상이나 음성과 같음 미디어 컨텐츠들이 많이 사용되고 있습니다.
이런 미디어 파일들은 데이터 량이 굉장히 크기 때문에 손실 압축 방식으로 그 데이터를 줄이는 압축 기술들이 많이 사용되는데~
이런 기술에 많이 이용되는 것이 바로 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 이나 마찬가지라는 것을 확인 할 수 있죠~
'programming language > MATLAB' 카테고리의 다른 글
MATLAB 윈도우에서의 파일 쓰기 줄 바꿈 (8) | 2012.06.17 |
---|---|
MATLAB log 저장하기 diary (0) | 2012.06.16 |
MATLAB Harmonographs (0) | 2012.06.11 |
MATLAB MAP data structure (0) | 2012.06.10 |
Simulink From/To workspace 블록 사용하기 (0) | 2012.05.28 |
MATLAB Fractal, Mandelbrot (만델브로) 집합의 아름다움..... (0) | 2012.05.25 |
MATLAB Coil Spring (0) | 2012.05.11 |
MATLAB Euler's formula (0) | 2012.05.01 |
댓글