오늘은 MATLAB FFT () 함수의 처리 속도에 대해 알아보려 합니다.
오늘 포스팅은 아래 책을 참조 한 부분이 있음을 밝힙니다.
책 : MATLAB 을 이용한 디지털 신호처리
MATLAB 의 FFT() 는 아시는 바와 같이 Fast Fourier Transform 을 수행하는 함수입니다.
FFT 알고리즘은 그 크기가 2의 거듭제곱 일 때로 한정해서 이용하게 되는데
MATLAB 의 FFT ()함수를 사용해 보면 FFT size 에 관계없이 사용 할 수 있습니다.
이는 FFT() 함수 내부적으로 2의 거듭제곱인 경우에는 FFT 알고리즘을 이용하고, 그렇지 않을 때는 소인수들로 나누어져서 혼합 진수 FFT 알고리즘을 이용하게 된다고 합니다.
그리고 FFT size 가 소수라면 어쩔 수 없이 내부적으로 DFT 알고리즘을 이용하게 됩니다.
이에 대한 확인을 위해 FFT size에 따른 처리 속도를 측정하는 시뮬레이션을 해보려 합니다.
코드는 다음와 같습니다.
책에 있는 내용대로 하니 제 컴퓨터에서는 책과 동일한 결과가 나오지 않더군요.
그래서 각 FFT size 당 측정 횟수를 500회로 증가 시켰고, 이에 따른 평균을 구하는 부분 등을 추가 했습니다.
위 코드를 실행 시켜 보면 다음과 같은 그래프를 얻을 수 있습니다.
위 그래프를 보시면 2048 size 일 때는 2의 거듭제곱 크기이므로 FFT 알고리즘이 수행되서 3.6e-5 정도의 시간이 걸리는 것을 확인 할 수 있고, 1950 size 일때는 2의 거듭제곱 크기는 아니지만, 소인수 분해가 가능 하므로 혼합진수 FFT 가 수행됨을 확인 할 수 있습니다. 그리고 2011 size 일 때는 소수이므로 어쩔 수 없이 DFT 가 수행되서 그 크기가 2048 보다 작음에도 불구하고 속도는 약 8 배 정도 느린 것을 확인 할 수 있습니다.
위 실험을 해보면 FFT 가 정말 막강한 알고리즘 이라는 것을 확인 할 수 있으실 겁니다.
'programming language > MATLAB' 카테고리의 다른 글
MATLAB Fractal, Mandelbrot (만델브로) 집합의 아름다움..... (0) | 2012.05.25 |
---|---|
MATLAB Coil Spring (0) | 2012.05.11 |
MATLAB Euler's formula (0) | 2012.05.01 |
MATLAB 뫼비우스의 띠 (0) | 2012.03.23 |
MATLAB varargin, varargout (6) | 2012.03.12 |
MATLAB GUI 창 크기 조절 (4) | 2012.03.03 |
MATLAB GUI (4) | 2012.02.24 |
MATLAB figure ButtonDownFcn (0) | 2012.02.22 |
댓글