[파이썬] scipy에서 Fourier 변환 (scipy.fftpack)
Fourier 변환은 주어진 시간 도메인 데이터를 주파수 도메인으로 변환하는데 사용되는 중요한 신호 처리 기술입니다. 이를 통해 시간 도메인에서 발생하는 신호의 주파수 성분을 분석하고 이해할 수 있습니다. 파이썬의 scipy 라이브러리에는 Fourier 변환을 수행하는데 사용되는 scipy.fftpack 모듈이 있습니다.
scipy.fftpack 모듈
scipy.fftpack 모듈은 고속 푸리에 변환(Fast Fourier Transform, FFT)을 수행하기 위한 함수들을 제공합니다. 이 모듈은 NumPy의 배열을 입력으로 사용하고 주파수 도메인의 결과를 반환합니다. 다음은 scipy.fftpack에서 주로 사용되는 함수들입니다:
fft
: 1차원 신호에 대한 FFT를 계산합니다.ifft
: 1차원 신호에 대한 역 FFT를 계산합니다.fft2
: 2차원 신호에 대한 2D FFT를 계산합니다.ifft2
: 2차원 신호에 대한 2D 역 FFT를 계산합니다.fftn
: 다차원 신호에 대한 FFT를 계산합니다.ifftn
: 다차원 신호에 대한 역 FFT를 계산합니다.
예제 코드
다음은 scipy.fftpack을 사용하여 주어진 신호의 Fourier 변환을 계산하는 예제 코드입니다:
import numpy as np
from scipy.fftpack import fft
import matplotlib.pyplot as plt
# 입력 신호 생성
t = np.linspace(0, 1, 1000) # 0부터 1까지 1000개의 시간 데이터
signal = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t) # 50Hz와 120Hz의 신호 결합
# Fourier 변환 계산
transformed = fft(signal)
# 주파수 도메인에서의 결과 플로팅
freq = np.linspace(0, 1/(2*(t[1]-t[0])), len(t)//2)
plt.plot(freq, 2.0/len(t) * np.abs(transformed[0:len(t)//2]))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.show()
위 코드에서는 np.linspace
함수를 사용하여 0부터 1까지 1000개의 시간 데이터를 생성합니다. 이후 해당 시간 데이터에 50Hz와 120Hz의 신호를 결합하여 입력 신호를 생성합니다. FFT 함수인 fft
를 사용하여 입력 신호의 Fourier 변환을 계산하고, 결과를 주파수 도메인에서 플로팅합니다.
결론
scipy.fftpack 모듈을 사용하면 파이썬에서 간편하게 Fourier 변환을 수행할 수 있습니다. 이를 활용하여 신호 처리와 주파수 분석 등의 다양한 응용을 할 수 있습니다.