퓨리에 변환

minsoo kim·2025년 1월 12일

퓨리에 변환(Fourier Transform) 이해하기

퓨리에 변환(Fourier Transform)은 신호 처리와 데이터 분석에서 매우 중요한 도구로, 신호를 여러 개의 주파수 성분으로 분해하는 방법입니다. 이 포스팅에서는 퓨리에 변환의 기본 개념과 사용 사례를 간단히 설명합니다.


1. 퓨리에 변환이란?

장 퓨리에(Jean Fourier)는 모든 주기 함수는 삼각 함수의 합으로 표현할 수 있다고 제안했습니다. 퓨리에 변환은 이러한 아이디어를 확장하여, 비주기적인 함수도 주파수 도메인으로 변환할 수 있게 합니다.

수식 표현
연속 신호 ( f(t) )에 대한 퓨리에 변환:
F(ω)=f(t)ejωtdtF(\omega) = \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dt

이 수식은 시간 도메인 함수 ( f(t) )를 주파수 도메인 ( F(\omega) )로 변환합니다.


2. 퓨리에 변환의 직관적 이해

퓨리에 변환은 다음과 같은 아이디어를 기반으로 합니다.

  • 시간 도메인(Time Domain): 신호가 시간에 따라 어떻게 변화하는지 보여줍니다.
  • 주파수 도메인(Frequency Domain): 신호를 구성하는 주파수 성분과 각 주파수의 크기(진폭)를 나타냅니다.

예를 들어, 하나의 사인파는 특정 주파수를 가지며, 여러 사인파의 합은 더 복잡한 신호를 구성합니다. 퓨리에 변환을 사용하면 이 복잡한 신호를 주파수 성분으로 분해할 수 있습니다.


3. 이산 퓨리에 변환(DFT)

컴퓨터에서 신호를 처리할 때는 주로 이산 퓨리에 변환(Discrete Fourier Transform, DFT)을 사용합니다.
이산 퓨리에 변환은 다음과 같이 표현됩니다.

X(k)=n=0N1x(n)ej2πkn/NX(k) = \sum_{n=0}^{N-1} x(n) e^{-j2\pi kn/N}

여기서:

  • ( x(n) ): 입력 신호
  • ( X(k) ): 주파수 성분
  • ( N ): 신호의 샘플 수

4. FFT(Fast Fourier Transform)

FFT는 DFT를 빠르게 계산하는 알고리즘입니다. 실제 신호 분석에서는 FFT가 주로 사용됩니다.


5. 퓨리에 변환의 응용

  • 오디오 신호 처리: 음성 신호에서 특정 주파수를 필터링하거나 노이즈 제거에 사용
  • 이미지 처리: 이미지 압축이나 필터링
  • 전자공학: 필터 설계 및 신호 분석

6. 퓨리에 변환의 시각화

다음은 사각파의 퓨리에 변환 예시입니다.

  • 원본 신호: 사각파
  • 변환된 주파수 도메인: 기본 주파수와 그 배수 성분이 나타남.
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()

0개의 댓글