TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 24 READS

원을 겹쳐 라마를 그린다: 푸리에 변환의 직관적 이해

원을 겹쳐 라마를 그린다: 푸리에 변환의 직관적 이해
SOURCE IMAGE · HACKER NEWS

신호 처리를 다뤄 본 개발자라면 '푸리에 변환'이라는 단어에 익숙할 것이다. 오디오 엔지니어가 곡에서 특정 주파수만 골라내 제거한 뒤 역변환으로 소리를 되돌리거나, 이미지 처리에서 가우시안 블러 같은 필터를 적용하고 JPEG 압축을 수행하는 일은 모두 이 변환에 기대고 있다. 그런데 같은 수학을 '그림 그리기'에 쓸 수 있다는 사실은 상대적으로 덜 알려져 있다. 최근 공개된 한 기술 해설 글은 원(circle)을 여러 개 겹쳐 물고기, 파이(π) 기호, 심지어 라마 같은 복잡한 그림을 그려내는 과정을 통해 푸리에 변환의 직관을 설명한다. 수식에 짓눌리지 않고 원리를 몸으로 이해하려는 실무자에게 유용한 접근이다.

회전하는 원으로 그림을 그린다는 것

핵심 아이디어는 이렇다. 연필을 종이에서 떼지 않고 한 번에 그릴 수 있는 어떤 경로가 있다고 하자. 이 경로를, 서로 다른 속도로 회전하는 여러 벡터를 꼬리에 머리를 잇는 방식으로 연결해 재현할 수 있다. 그러면 마지막 벡터의 끝점이 원래 스케치와 거의 같은 궤적을 그려낸다. 원이 하나뿐이면 단순한 형태밖에 못 그리지만, 바깥 원의 반지름을 줄이고 회전 속도를 높이면 직선에 가까운 형태나 사각형도 나온다. 원을 하나 더 더하면 곡선이 한층 정교해져 물고기 형태가 되고, 원 1024개에 각기 다른 주파수·반지름·시작 각도를 주면 라마처럼 복잡한 그림도 그려진다. 이렇게 원 위에 원을 얹어 만든 곡선을 주전원(epicycle)이라 부르며, 닫힌 곡선은 대부분 이 방식으로 표현할 수 있다.

원을 조작할 수 있는 값은 세 가지다. 얼마나 빠르게 도는지(주파수), 원이 얼마나 큰지(반지름), 어느 각도에서 출발하는지(위상)이다. 흥미로운 점은 이 세 조건이 단 하나의 복소수로 표현된다는 사실이다. 원을 많이 더할수록 더 복잡한 그림을, 그리고 같은 그림이라도 더 정밀하게 원본에 근접한 결과를 얻는다. 이 대응 관계가 곧 푸리에 변환이 시간 영역의 신호를 주파수 영역으로 옮겨 놓는 작업의 시각적 번역인 셈이다.

시간 영역에서 주파수 영역으로

푸리에 변환이 '시간 영역을 주파수 영역으로 바꾼다'는 말의 의미는 예시로 보면 명료하다. sin(2π×3t)라는 함수를 변환하면, 그 결과는 3Hz와 −3Hz 지점에 솟은 두 개의 뾰족한 봉우리로 나타난다. 다시 말해 어떤 대상 속에 어떤 주파수 성분이 들어 있는지를 찾아낸 뒤, 그 사인파들을 합쳐 원래 대상을 근사하는 작업이다. 그림 그리기 관점에서 보면 각 봉우리가 하나의 회전하는 원에 대응하고, 봉우리의 높이가 원의 반지름, 위치가 회전 속도에 해당한다.

이 대응을 지탱하는 도구가 복소수와 선형대수다. 복소수 3+4i는 실수부와 허수부를 가지며, 평면 위의 점 (3,4) 즉 2차원 벡터처럼 다룰 수 있다. 삼각함수와 복소지수 사이의 다리 역할을 하는 오일러 항등식 덕분에 이 표현이 특히 편리해진다. 한편 선형대수에서 임의의 2차원 벡터를 x축·y축 단위벡터의 조합으로 나타내듯, 서로 배수 관계가 아닌 두 벡터라면 무엇이든 기저로 삼아 다른 벡터를 표현할 수 있다.

내적, '얼마나 들어 있는가'라는 질문

그렇다면 어떤 벡터를 특정 기저로 표현할 때 각 기저를 얼마만큼 곱해야 하는지는 어떻게 알아낼까. 이때 쓰는 도구가 내적(dot product)이다. 원 글은 내적을 '어떤 벡터 안에 다른 벡터가 얼마나 들어 있는가'라는 질문으로 풀이한다. 이 직관이 푸리에 변환의 심장부다. 신호를 '주파수 f짜리 사인파가 얼마나 들어 있는가'라는 질문으로 분해하는 일이 곧 내적을 취하는 일이기 때문이다. 내적에는 두 성질이 중요하게 쓰인다. 벡터를 자기 자신과 내적하면 크기의 제곱이 되고, 서로 수직인 두 벡터의 내적은 cos(π/2)=0이므로 0이 된다. 직교하는 성분끼리는 서로 간섭하지 않는다는 뜻이며, 이것이 각 주파수 성분을 깔끔하게 분리해 낼 수 있는 근거가 된다.

실무적으로 눈여겨볼 대목은 이 내적 개념이 유한 차원 벡터에서 연속 함수로 자연스럽게 확장된다는 점이다. 벡터의 내적은 같은 성분끼리의 곱을 유한 개 더한 이산 합이지만, 함수의 경우 그 합을 무한히 잘게 쪼갠 적분으로 바꾼다. 다만 이때 함수는 구간 [0,T]에서 제곱적분 가능해야 한다는 조건이 붙는다. 복소 벡터를 다룰 때는 두 번째 인자의 켤레를 취해야 하며, 그 결과 내적이 한 인자에 대해서는 선형이지만 켤레를 취하는 인자에 대해서는 반선형이 된다는 세부 규칙도 있다. 실제 코드로 스펙트럼을 계산해 본 사람이라면 이 조건들이 왜 등장하는지 감이 올 것이다.

이 글의 미덕은 완결된 수학 강의가 아니라, 애니메이션이라는 감각적 결과에서 출발해 복소수·선형대수·내적·적분이라는 부품을 하나씩 끼워 맞추는 서술 방식에 있다. 반대로 한계도 분명하다. 발췌된 내용은 오일러 항등식을 '다음 절에서 다룬다'고 예고한 지점에서 멈춰 있어, 원 위의 회전과 복소지수 e^(iθ)를 잇는 결정적 연결 고리와 실제 변환 공식은 본문에서 확인해야 한다. 그럼에도 '직선의 정반대처럼 보이는 원으로 직선을 그린다'는 역설적 이미지 하나만으로도, 주파수 분해라는 추상을 손에 잡히게 만드는 좋은 출발점이 된다. FFT 라이브러리를 블랙박스로만 써 온 개발자에게는 그 내부에서 벌어지는 일을 다시 상상하게 하는 계기가 될 만하다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://adekau.github.io/posts/2020/llamas.html
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...