퓨리에 변환(Fourier Transform)은 신호 처리와 데이터 분석에서 매우 중요한 도구로, 신호를 여러 개의 주파수 성분으로 분해하는 방법입니다. 이 포스팅에서는 퓨리에 변환의 기본 개념과 사용 사례를 간단히 설명합니다.
장 퓨리에(Jean Fourier)는 모든 주기 함수는 삼각 함수의 합으로 표현할 수 있다고 제안했습니다. 퓨리에 변환은 이러한 아이디어를 확장하여, 비주기적인 함수도 주파수 도메인으로 변환할 수 있게 합니다.
수식 표현
연속 신호 ( f(t) )에 대한 퓨리에 변환:
이 수식은 시간 도메인 함수 ( f(t) )를 주파수 도메인 ( F(\omega) )로 변환합니다.
퓨리에 변환은 다음과 같은 아이디어를 기반으로 합니다.
예를 들어, 하나의 사인파는 특정 주파수를 가지며, 여러 사인파의 합은 더 복잡한 신호를 구성합니다. 퓨리에 변환을 사용하면 이 복잡한 신호를 주파수 성분으로 분해할 수 있습니다.
컴퓨터에서 신호를 처리할 때는 주로 이산 퓨리에 변환(Discrete Fourier Transform, DFT)을 사용합니다.
이산 퓨리에 변환은 다음과 같이 표현됩니다.
여기서:
FFT는 DFT를 빠르게 계산하는 알고리즘입니다. 실제 신호 분석에서는 FFT가 주로 사용됩니다.
다음은 사각파의 퓨리에 변환 예시입니다.
import numpy as np
import matplotlib.pyplot as plt
# 사각파 생성
t = np.linspace(0, 1, 500, endpoint=False)
square_wave = np.sign(np.sin(2 * np.pi * 5 * t))
# 퓨리에 변환 수행
freqs = np.fft.fftfreq(len(t), d=(t[1] - t[0]))
fft_values = np.fft.fft(square_wave)
# 시각화
plt.figure(figsize=(12, 5))
# 시간 도메인 신호
plt.subplot(1, 2, 1)
plt.plot(t, square_wave)
plt.title('시간 도메인: 사각파')
plt.xlabel('시간 (t)')
plt.ylabel('진폭')
# 주파수 도메인
plt.subplot(1, 2, 2)
plt.stem(freqs, np.abs(fft_values), use_line_collection=True)
plt.title('주파수 도메인')
plt.xlabel('주파수 (Hz)')
plt.ylabel('크기')
plt.tight_layout()
plt.show()