본문 바로가기

IT/수학 이론

[DSP] 푸리에 변환, DFT와 FFT (Fast Fourier Transform) - 1

반응형

서  론

FFT의 기본식

FFT란 무엇인가?

프로그래밍을 하다보면, 특히 영상처리, 인공지능(머신러닝/딥러닝), 디지털 신호처리(DSP), 임베디드 시스템, 등을 하다보면 FFT라는 말이 자주 나온다.

그리고 공대생이라면 대학교 1학년이나 2학년 과정에서 자주 들어봤을 단어이기도 하다. (특히 공업수학/공학수학에서...)

 

FFT란 Fast Fourier Transform의 약자이며 고속 푸리에 변환이라는 뜻이다.

그렇다면 고속 푸리에 변환이 있다면 중속 푸리에 변환과 저속 푸리에 변환도 있을까?

 

우선 이러한 개념을 익히기 위해 푸리에 변환에 대해 알아야 한다.

 

푸리에 변환은 기본적으로 시간 도메인(Time Domain)을 주파수 도메인(Frequency Domain)으로 변환시키는, 즉 시간에 대한 함수(혹은 신호)를 구성하고 있는 주파수 성분으로 분해하는 과정이다.

 

그렇다면 이게 왜 중요하고 왜 자주 쓰이는 것일까?

 

우리는(사람은) 시간 도메인에서 살아간다.

그리고 모든 신호와 함수는 시간을 토대로 흘러간다.

하지만 실제로 우리가 해당 신호 혹은 함수를 분석하고 사용하기 위해서는 그 신호의 주기를 알아야 한다.

 

예를 들어,

현업에서 사용되는 위와 같은 화재 감지기는, 불을 불이라고 인식하기 위해 여러 과정을 겪는다.

사람은 불을 보면 불이야! 하고 바로 인식을 할 수 있지만, 기계가 불을 오인식 없이 불이라고 인식하기는 쉬운 과정이 아니다.

 

위 제품만 보더라도, 간단한 화재 감지기가 3개의 센서를 내장하고 있는 것을 볼 수 있을 것이다.

위 3개의 센서는 각각 화염 센서, 인체 감지 센서, 태양광 센서로 이루어진 제품인데, 이 3개의 센서에서 수집한 데이터만으로는 이게 불인지 사람/동물의 움직임인지, 분사기에 의한 분사 가루인지, 태양광인지, 용접광인지, 등등 당최 알 수가 없다.

 

여기서 수집된 데이터는 각각 FFT를 거쳐 주파수 도메인으로 분해되고, 해당 주파수들을 각 회사들만의 독특한 알고리즘으로 분석하여 불인지 아닌지를 확정짓게 된다.

 

또한, 다른 예시로,

아이폰의 시리, 갤럭시의 빅스비, 안드로이드OS의 구글 어시스턴트, AI 스피커의 전자 비서 등 많은 전자 비서 시스템은 FFT, 혹은 FFT에서 파생되거나 유사한 주파수 분석 기법을 활용하고 있다. (물론 그것만으로 음성 분석을 할 수는 없다. 다만 기본이 될 뿐이다.)

 

이렇듯 많은 분야에서 FFT가 활용된다.

아마 FFT를 처음 맞닥뜨린다면 아직도 왜 FFT를 사용해야 하는지, 그게 어떻게 활용되는지 감이 잘 오지 않을 것이다.

특히 2학년이 되고 푸리에 변환을 처음 배운 공학도들은 더더욱이 이해가 안 갈 것이다.

 

더럽게 어렵기만한(?) 이게 어떻게 활용이 될 것인지,

활용이 되긴 될 것인지 의아할 것이다.

 

특히 SW에서 어떤 식으로 활용되는지는 더더욱 의문일텐데,

신호 처리, 즉 DSP를 하다보면 지겹도록 만나는 것이 FFT이기도 하다.

또한 Computer Vision 분야에서도 지겹도록 자주 쓰이며, 인공지능 전처리 분야에서도 자주 쓰인다.


Fourier Transform 기본 공식

출처: Wikipedia
출처: Wikipedia
출처: Wikipedia

위 사진들은 푸리에 변환에서 자주 사용되는 공식들이다.

알아두면 좋다.


Fourier Transform 기본 원리

왼쪽이 실제 시그널, 중앙이 분해된 sin과 cos 함수들, 오른쪽이 FFT 결과이다.

본문에서 푸리에 변환은 기본적으로 시간 도메인(Time Domain)을 주파수 도메인(Frequency Domain)으로 변환시키는, 즉 시간에 대한 함수(혹은 신호)를 구성하고 있는 주파수 성분으로 분해하는 과정이다, 라고 설명했다.

 

그렇다면 시간에 대한 함수를 구성하고 있는 성분들을 어떻게 주파수 성분으로 분해할까?

 

위 그림은 효과적으로 원본 함수(혹은 신호)에서 FFT 결과로 이어지는 과정을 한 그림 안에 표현해냈다.

하지만 이것만으로는 이해가 어렵다.

아래 그림은 위 그림을 순차적으로 보여줘서 과정을 손쉽게 알 수 있다.

FFT에 대한 완벽한 설명이다.

(참고로 위 신호는 BIBO Stable한 신호로 생각보다 현실 세계에서 자주 접할 수 있는 신호 유형이다.)

 

물론 Fourier Transform에 대해서, 더 나아가 Fast Fourier Transform에 대해서 깊은 이해를 하려면 수학적, 수식적 이해가 동반되어야겠지만 그것은 추후 포스팅에서 다뤄볼까한다.

 

일단 개념이 이해가 됐다면,

저렇게 f(x) → F(u)로 변환되면 우리는 시간 도메인(Time Domain)에서 주파수 도메인(Frequency Domain)으로 Shift된 함수를 볼 수 있을 것이다.

Time Domain → Frequency Domain

위 사진은 시간 도메인에서의 함수의 수평 이동이 불러오는 주파수 도메인에서의 함수 변화를 직관적으로 보여준다.

 

이 정도만 되어도 푸리에 변환이 왜 필요한지,

그리고 원리는 (간단하게) 무엇인지,

그리고 과정은 (간단하게) 무엇인지에 대해 이해가 되었으리라 생각한다.

 

최대한 쉽게 풀어내려고 하다 보니 많은 부분이 누락되었는데,

깊은 이해를 위해선 추후 포스팅할 글에서 다루는 심화 주제에서 공부해보도록 하자.

 

우선 다음 포스팅은 DFT와 FFT에 대한 것을 다루도록 하겠다.


반응형