본문 바로가기
카테고리 없음

고속 푸리에 변환

by redcubes 2024. 8. 14.

푸리에 변환(Fourier Transform)과 고속 푸리에 변환(FFT, Fast Fourier Transform)에 대해 쉽게 설명해보겠다.

푸리에 변환이란?

푸리에 변환은 소리나 빛과 같은 신호를 분석할 때 쓰는 수학적 방법이다. 예를 들어, 여러 악기가 함께 연주될 때, 각 악기의 소리를 따로 떼어낼 수 있는 방법이 푸리에 변환이다. 쉽게 말해, 복잡한 신호를 여러 가지 주파수(소리의 높낮이)로 나누는 과정이다.

예시:

만약 피아노와 플루트가 함께 연주되고 있다고 하자. 푸리에 변환은 이 두 악기의 소리를 분석해서 피아노의 소리와 플루트의 소리를 따로따로 구분할 수 있게 도와준다.

고속 푸리에 변환(FFT)이란?

푸리에 변환은 유용하지만 계산이 복잡하고 오래 걸린다. 고속 푸리에 변환은 이 과정을 훨씬 빠르게 만들어 준다. 컴퓨터가 복잡한 신호를 분석할 때, 시간을 단축시켜주는 중요한 기술이다.

활용 예시:

고속 푸리에 변환은 음악 파일을 압축하거나, 영상에서 소리를 분석할 때 사용된다. 예를 들어, 우리가 스마트폰에서 음악을 들을 때, 음질을 좋게 하면서 파일 크기를 줄이는 데 FFT가 사용된다.

마무리

푸리에 변환은 소리나 신호를 분석하고, 고속 푸리에 변환은 이 과정을 빠르게 만들어 주는 방법이다. 이 두 가지는 우리가 매일 사용하는 여러 기술의 중요한 부분이다.

알고리즘에서의 FFT(Fast Fourier Transform)는 주로 신호 처리, 이미지 처리, 그리고 데이터 분석에서 사용된다. FFT는 푸리에 변환을 매우 빠르게 계산하는 알고리즘이다. 일반적으로 푸리에 변환의 시간 복잡도가 O(n2)O(n^2)인데 반해, FFT는 O(nlog⁡n)O(n \log n)의 시간 복잡도를 가진다.

다음은 파이썬에서 FFT를 사용하는 간단한 예시 코드이다.

import numpy as np
import matplotlib.pyplot as plt

# 샘플링 주파수
sampling_rate = 1000  # 1초에 1000번 샘플링
t = np.linspace(0, 1, sampling_rate, endpoint=False)  # 1초 동안의 시간 배열

# 5Hz와 50Hz의 두 주파수를 가진 신호 생성
signal = np.sin(2 * np.pi * 5 * t) + 0.5 * np.sin(2 * np.pi * 50 * t)

# FFT를 이용해 신호를 주파수 성분으로 변환
fft_result = np.fft.fft(signal)
frequencies = np.fft.fftfreq(len(fft_result), 1/sampling_rate)

# 결과의 절대값을 취해 주파수 성분의 크기를 구함
magnitude = np.abs(fft_result)

# 결과를 그래프로 표시
plt.figure(figsize=(10, 6))

plt.subplot(2, 1, 1)
plt.plot(t, signal)
plt.title("Time Domain Signal")
plt.xlabel("Time [s]")
plt.ylabel("Amplitude")

plt.subplot(2, 1, 2)
plt.stem(frequencies[:sampling_rate//2], magnitude[:sampling_rate//2], 'r', markerfmt=" ", basefmt="-b")
plt.title("Frequency Domain Signal")
plt.xlabel("Frequency [Hz]")
plt.ylabel("Magnitude")

plt.tight_layout()
plt.show()

코드 설명:

  1. 신호 생성:
    • 5Hz와 50Hz의 두 개의 주파수를 가진 신호를 만든다.
    • 이 신호는 시간 도메인(time domain)에서 생성된다.
  2. FFT 적용:
    • np.fft.fft 함수를 이용해 시간 도메인 신호를 주파수 도메인(frequency domain)으로 변환한다.
    • np.fft.fftfreq를 사용해 각 주파수 성분을 구한다.
  3. 결과 시각화:
    • 첫 번째 그래프는 원래의 시간 도메인 신호를 나타낸다.
    • 두 번째 그래프는 FFT 결과로 얻은 주파수 성분의 크기를 보여준다.

결과:

  • 시간 도메인 신호에서는 단순히 진동하는 신호가 보이지만, 주파수 도메인에서는 5Hz와 50Hz의 두 주파수가 명확히 구분된다. 이는 FFT가 신호를 주파수 성분으로 효과적으로 분해했음을 보여준다.