불꽃남자 푸리에: 열전도부터 푸리에 변환까지
주기 함수와 신호 분석의 혁명, 현대에서의 응용 사례
불꽃남자 푸리에
푸리에, 장 바티스트 조세프 푸리에는 프랑스의 수학자 겸 물리학자다.
푸리에는 열전도, 다시 말해 고체에 열이 주어지면 온도가 어떻게 변하는가 라는 주제에 대한 연구를 했고, 열전도 방정식 (푸리에 방정식)을 유도해냈으며 아무튼 열 이라는 키워드에 아주 푹 빠졌다 하는 이야기가 있는데 그 이유로는
- 나폴레옹 따라다니면서 이집트 원정 가다보니 뜨거운 기후와 독특한 환경, 아무튼 열에 관심을 가져서 연구했다.
- 프랑스의 그르노블 (알프스 근처 추운도시)에 있다보니 열에 관심을 가졌다.
- 산업혁명 시기로 열 기관이 등장하면서 열에 관한 연구가 유망했다.
등 다양한 썰이 있긴 하다.
열전도 문제
아무튼 이 열전도 방정식의 핵심은 특정 위치에서 열이 이동하는 속도는 온도 기울기에 비례한다. 로 주변의 온도차가 클 수록 더 빠르게 열이 전도 된다. 이런 내용으로 볼 수 있겠다.
이 열전도 문제에서는 양 끝의 온도가 고정 된 막대에서 특정 위치에 대한 온도 분포 등을 계산한다.
여기서 온도가 고정된 부분을 막대 분자가 특정 주파수로 진동한다. 라고 볼 수 있으므로
특정 위치의 온도 f(x)는 여러 진동 함수 (= 주기 함수 = 삼각 함수)의 합으로 표현할 수 있다.
물론 실제로는 위 예시처럼 2개로 표현될 정도로 간단하진 않고 양 끝 외에도 무한히 많은 부분으로 부터 영향을 받기 때문에 무한히 많은 삼각함수의 합으로 표현된다. 이를 푸리에 급수라고 표현한다.
푸리에 급수
이 공식이 어떻게 저렇게 변환 되는지는 수학 하는 친구들이 진작에 보여줬으니 그냥 그렇다고만 생각해도 충분.
Get Jinhwan Kim’s stories in your inbox
Join Medium for free to get updates from this writer.
이 푸리에 급수가 가지는 의미는 주기 함수는 여러 삼각함수들의 합으로 분해할 수 있다. 라는 건데 이는 선형 회귀가 결과를 여러 변수들의 영향의 합으로 보는 것과 비슷하다고 생각한다.
불꽃남자 푸리에는 이렇게 삼각함수를 이리저리 가지고 놀다가, 주기 함수가 아닌 비주기 함수도 여러 개의 주기함수의 합으로 표현할 수 있다는 푸리에 변환을 발견하게 된다.
조금 복잡한 말인데, 푸리에 급수는 주기적인 신호에서의 모델링을 전제로 한다는 특징이 있다. 그런데 현실에서는 한 번만 발생하는 신호라든지, 계속 변하는 신호 등 주기적이지 않은 신호도 굉장히 많다.
이를 풀기 위한 방법으로 등장한 것이 푸리에 변환인데, 푸리에 급수에서 신호의 주기가 점점 길어진다고 가정해보는 것으로 시작한다. (예를 들어 고양이가 애옹 한번 하는 소리를 10억년에 한번씩 반복하는 주기성 신호로 가정해보자)
이는 비주기적인 신호는 연속적인 주파수 성분의 연속적인 적분 형태로 나눠볼 수 있다고 확장된다. (무슨 말인지 나도 슬슬 헷갈린다)
핵심은 아래의 4 음의 합으로 이루어진 맨 위의 하늘색 음악 소리는, 푸리에 변환을 통해서 어떤 음이 포함되어 있는지 계산할 수 있다는 의미.
조금 더 구체적으로 그러나 여전히 엄청 날려서 설명하면, 하늘색 음악 소리 f(x)에 각 음 d(x), a(x), f(x), c(x) …를 곱하면 나오는 값에 따라서 d(x)가 이 f(x)를 구성한다 하지 않는다를 판별할 수 있다.
예시 수식으로 계산 해보면 포함되어 있을때의 값과 아닌 값이 차이가 있다는 것을 볼 수 있다.
이게 왜 중요함?
입시 앞둔 학생을 제외하면 그렇게까지 중요하진 않다.
음성 데이터를 다루는 사람의 경우 FFT (고속 푸리에 변환) 코드를 접하게 된다. 다만 이 원리와 배경까지 알고 쓰는 사람 보다는 그냥 딸깍 쓰는 사람이 더 많지 않을까 싶기도 하고. 나도 코드 쓰다가 궁금해서 조금 찾아보고 재밌어서 썼음.
푸리에 변환과 고속 푸리에 변환의 차이는 모든 주파수를 다 곱하면 계산량이 너무 많기 때문에 이를 Cooley-Tukey 알고리즘 등을 활용해 데이터를 적당히 나눠가면서 계산하고 중복 되는 것을 패스하는 방식 정도로만 이해해도 충분하고. 이 결과 O(n²)를 O(N log N) 스케일로 엄청 후려쳐서 계산할 수 있다는 차이가 있어 실생활에서는 FFT를 기본으로 쓴다고 볼 수 있다.
마찬가지로 구체적으로는 몰라도 되고 그냥 numpy.fft.fft()이런 코드로 쓰면 된다.
아무튼 아래는 내가 저 위의 코드를 쓴 결과
TMI) 푸리에는 그르노블 대학에 이름이 붙어 조셉 푸리에 대학교(Université Joseph Fourier, Grenoble I)라고도 부른다.









