1. 푸리에 분석 - 왜 할까요
  2. 푸리에 분석 - 고속 푸리에 변환 증명하기
  3. 푸리에 분석 - 고속 푸리에 변환 구현하기

이 페이지는 최병선 교수님의 Wavelet 해석을 바탕으로 작성되었습니다. 그러나 책과는 달리 해석적으로 엄밀한 내용을 추구하지는 않습니다. 이산 푸리에 변환의 구현은 여기를 참고 바랍니다.

주기함수를 표현하는 방법

함수 는 너무 단순해서 이렇게만 표현하면 됩니다. 같은 함수도 다항식으로 충분히 표현할 수 있습니다. 하지만 삼각함수도 이렇게 쉽게 표현될까요? 역시 다항식으로 표현이 가능하지만, 이제는 위의 이차함수처럼 유한개의 항으로 표현할 수는 없게 됩니다. \begin{align} \sin x = \sum_{k=0}^{\infty} \frac{(-1)^{2k+1}x^{2k+1}}{(2k+1)!} \end{align}

삼각함수는 대표적인 주기함수입니다. 그런데 이런 삼각함수를 다항식으로 표현하니 너무 더러워집니다. 이건 다항함수가 본질적으로 주기함수가 아니기 때문입니다. 주기가 없는 함수로 주기가 있는 녀석을 표현하려니, 당연히 무리가 올 수밖에 없습니다. 그렇다보니 무한히 더하지 않으면 안 되게 되는 것이죠.

발상의 전환으로, 주기함수를 표현할 때 꼭 다항함수로 표현해야 할까요? 사실 주기함수는 주기함수로 표현하는 게 제일 좋을 것 같습니다. 왜냐하면 주기함수의 합 역시 주기함수거든요. 수학적으로 얘기하면, 주기함수를 표현할 때의 기저 벡터로 주기함수를 쓰자는 것입니다. 여기에서 기저 벡터라는 것은 쉽게 말해 기본이 되는 함수라고 생각하면 됩니다. 푸리에 분석은 바로 주기함수를 또 다른 주기함수인 삼각함수 - , - 로 표현하는 것에서 시작합니다.

일단 어떤 함수 가 있을 때, 이 함수를 삼각함수의 합으로 표현하였다고 해봅시다. 아마 다음과 같은 형태일 것입니다. \begin{align} f(t) = \sum_{k=0}^{\infty} a_k cos(k \pi t) + b_k sin(k \pi t) \cdots (1) \end{align}

왜 할까요

일단 어떤 함수 를 사인과 코사인의 합으로 표시는 해두었습니다. 마치 위에서 의 다항식으로 표현했듯이요. 저기 나와 있는 , 는 나중에 구하도록 하고, 왜 삼각함수로 표현하면 좋은지 한번 생각해보도록 하겠습니다.

첫째, 우리가 아는 주기함수가 몇 개 안 됩니다. 주기함수는 주기함수의 합으로 나타낼 수 있습니다. 그러면 어떤 주기함수를 써야 할까, 라는 고민이 나오게 되는데, 우리가 아는 가장 흔한 주기함수 중 하나가 삼각함수입니다.

둘째, 사인과 코사인은 서로 직교합니다. 선형대수학을 떠올려 보면, 벡터들 사이에 ‘각도’를 잴 수 있는 방법이 주어지게 될 수 있습니다. 우리는 이걸 내적이라고 불렀습니다. 이 내적이 0이 되었을 때 우리는 두 벡터가 직교한다고 합니다. 사인과 코사인이 그러면 벡터냐, 라고 물을 수 있는데, 원래 벡터공간이라는 게 대단히 추상적으로 정의된 공간이라서 정의하기에 따라서는 함수도 벡터로 볼 수 있습니다. 두 함수 , 에 대하여 내적을 다음과 같이 정의해봅시다. \begin{align} <f,g> &= \int_{a}^{b} f(t)g(t) dt \\ f, g &\in L^{2}[a,b] \\ \end{align} 이게 기존의 벡터의 내적과 어떻게 같냐! 라고 생각할 수도 있는데, 우리가 아는 벡터의 내적도 사실은 두 벡터의 원소들끼리 짝을 맞춰서 곱한 후에 다 더한 것이잖습니까? (연속)함수의 경우에는 그걸 무한히 해야 하니, 적분으로 퉁친 것이라고 생각하면 됩니다.

이제 삼각함수에 내적을 적용하게 되면, 놀랍게도 다음이 성립합니다(적분구간은 ). \begin{align} <cos (m \pi x), cos (n \pi x)> &= \delta_{m,n} \\ <cos (m \pi x), sin (n \pi x)> &= 0 \\ <sin (m \pi x), cos (n \pi x)> &= 0 \\ <sin (m \pi x), sin (n \pi x)> &= \delta_{m,n} \\ \end{align} 여기에서 는 크로네커 델타로, 일 때에만 이 됩니다.

우리는 주로 직교좌표계를 사용합니다. 비록 좌표계가 회전하고 이동할지언정, 그 좌표계의 기반이 되는 기저벡터들은 되도록이면 직교하기를 희망합니다. 그래야 점을 표현할 때 좌표가 딱 떨어지거든요. 함수의 세계도 마찬가지입니다. 직교하는 함수를 갖고 다른 함수를 표현하면 그 함수를 분석하기가 편해집니다. 그리고 주기함수의 경우에는 삼각함수가 그 역할에 제격입니다. 주기성이 있는데다가 서로 직교하기까지 하니까요.

, 이 직교하기 때문에(즉, 자기 자신과 같은 경우 외에는 모두 내적이 0이 되기 때문에) 식 (1)의 , 를 계산하는 것이 간편해집니다. \begin{align} a_k &= \frac{<f(t), cos(k \pi t)>}{<cos(k \pi t), cos(k \pi t)>} \\ b_k &= \frac{<f(t), sin(k \pi t)>}{<sin(k \pi t), sin(k \pi t)>} \\ \end{align}

푸리에 분석의 시작

이렇게 우리는 주기함수를 삼각함수로 표현하는 방법을 찾았습니다. 사실 이건 주기함수를 삼각함수로 분해하는 것이라고 생각해도 됩니다. 삼각함수는 일정한 주기를 갖고 파동이 반복되니까, 주기가 1인 경우에는 진폭이 얼마, 주기가 2인 경우에는 진폭이 얼마… 이런 식으로 생각할 수 있으니까요. 식 (1)에서 , 를 진폭, 를 주파수라고 생각해도 큰 무리는 없습니다.

푸리에 분석은 위의 , 를 찾기 위한 과정이라고 보면 됩니다. 즉, 주기함수 또는 신호를 삼각함수로 표현하는 과정입니다. 왜 이런 과정을 푸리에 분석이라고 부르냐면, 이걸 처음 제안한 사람이 장-바티스트 조제프 푸리에(Jean-Baptiste Joseph Fourier)이거든요. 비록 푸리에 본인은 본인이 제안한 푸리에 급수의 수렴성을 증명하지 못 했지만(왜냐하면 식 (1)이 수렴하리라는 보장이 없습니다. 에 따라서는 식 (1)이 수렴하지 않는 경우도 있거든요), 후대의 수학자들이 그의 아이디어를 이어나가서 푸리에 해석이 성립할 조건을 증명해나갑니다.

참고문헌

최병선, Wavelet해석, 세경사, 2001