오늘은 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 FFT 처리 속도  (0) 2012.03.19
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

+ Recent posts