본문 바로가기

푸리에 변환, 신호/푸리에 변환의 모든 것

07. FFT (Fast Fourier Transform, 고속 푸리에 변환)

반응형

앞에서 살펴봤던 DFT의 수식을 그대로 이용해서, 실제 신호에 대한 푸리에 변환을 하기에는 무리가 있다. 계산량이 너무 많기 때문이다.

 

DFT:Y(k)=N1n=0y(n)ei2πNkn,0k<N

 

식(1)의 DFT 수식에 따르면 실수와 복소수와의 곱 연산을 N2회 수행하고, 덧셈 연산은 N(N-1)회 이루어진다. 

 

N=4096 으로 하면, 신호 한 블록에 대해 16,777,216번의 연산이 필요하고, 이러한 연산을 1초 안에 수행하기에는 고속의 CPU를 사용해도 무리가 따른다. (펜티엄 2.2 GHz의 경우, 일반 실수에 대한 곱 연산을 초당 8×107개 정도 수행할 수 있다 한다.  실수가 아닌 복소수와의 곱이고, 덧셈 연산도 부가되고 하면, CPU의 모든 파워를 사용해도 4096 DFT를 1초 내에 수행하지 못할 것이다.)

 

더군다나 일반 산업용 기기나 임베디드 시스템의 경우 CPU 속도가 더 느리기에, DFT를 그대로 사용할 수 없다.

 


DFT의 계산 속도는 O(N2)이다. N이 작을 때는 큰 문제 안되나, N=1024 정도만 돼도 문제가 발생한다. 

FFT(Fast Fourier Transform, 고속 푸리에 변환)는 O(NlogN) 시간에 DFT와 동일한 계산이 이루어지도록하는 알고리즘이다. O(NlogN) 이면 N=8192여도 감내할만한 계산량이겠다.

 

N 크기에 따른 계산량

N을 크게 하는 것은 주파수 해상도(=주파수 분해능)와 관련이 있다. 

음성신호의 경우 일반적으로 44.1kHz로 샘플링한다. 이 경우 한 N=1024이면 주파수 해상도는 43Hz이다. (44100Hz1024=43Hz)

N=4096으로 증가시키면 주파수 해상도는 10.7Hz가 된다. 따라서, N을 증가시킬수록 세밀한 주파수 분석이 가능하다.

FFT를 실현하는 몇 개의 알고리즘이 있는데, 분할 정복(Divide and Conquer)을 사용하여 O(NlogN)시간에 DFT 계산이 가능하도록 하는 "쿨리-튜키 알고리즘(Cooley Tukey algorithm)"이 가장 잘 알려져 있다. 

 

먼저 쿨리-튜키 알고리즘에 의한 FFT 원리를 알아보고, 엑셀 및 C에서 구현하고 활용하는 것을 알아보겠다.

 

  • 07-1. FFT의 유도
  • 07-2. 손으로 FFT 따라해보기
  • 07-3. FFT의 구현 (엑셀 VBA)
  • 07-4. FFT의 구현 (C, C++)

 

 

-끝-

 이전글: 06-8. DFT 수식에 대한 해석 --> 작성중
 다음글: 07-1. FFT의 유도
 다음다음글: 07-2. FFT 예제를 손으로 풀어보며 이해하기

 

반응형