본문 바로가기
Python/numpy

파이썬 numpy.fft.ifft 함수 활용하기

by PySun 2024. 10. 25.
반응형

파이썬 Numpy의 `numpy.fft.ifft` 함수 소개

`numpy.fft.ifft` 함수는 이산 푸리에 변환(DFT)의 역변환을 수행하는 함수로, 주파수 영역 데이터를 다시 시간 영역으로 변환할 때 사용됩니다. 이 함수는 `numpy.fft.fft` 함수와 짝을 이루며, 신호 처리 및 주파수 분석에 있어서 중요한 역할을 합니다. 이 글에서는 `numpy.fft.ifft` 함수의 사용법과 예제 코드를 통해 이해를 돕고자 합니다.

`numpy.fft.ifft` 함수란?

`numpy.fft.ifft` 함수는 주파수 영역 데이터를 시간 영역으로 변환하는 기능을 수행합니다. 푸리에 변환의 역연산으로 주파수 분석 후 다시 원래 신호로 복원할 때 사용됩니다.

함수 문법

numpy.fft.ifft(a, n=None, axis=-1, norm=None)
  • a: 입력 데이터(주파수 영역의 배열)
  • n: 역변환할 길이 (기본값은 입력 배열의 길이)
  • axis: 변환할 축 (기본값은 마지막 축)
  • norm: 정규화 방식 ("ortho"로 설정 시 직교 변환을 사용)

예제 1: 기본 사용법

다음은 `numpy.fft.ifft`를 사용하여 주파수 성분에서 다시 시간 영역으로 변환하는 예제입니다.

import numpy as np
import matplotlib.pyplot as plt

# 시간에 따른 신호 생성
x = np.linspace(0, 2 * np.pi, 1000)
y = np.sin(5 * x)  # 5Hz 주파수를 가진 사인파

# FFT 수행
y_fft = np.fft.fft(y)

# IFFT 수행 (역변환)
y_ifft = np.fft.ifft(y_fft)

# 실수부만 시각화 (복소수 결과)
plt.plot(x, y_ifft.real)
plt.title('IFFT 결과 - 원래 신호 복원')
plt.xlabel('시간')
plt.ylabel('신호 세기')
plt.show()

이 예제에서는 5Hz 사인파를 푸리에 변환 후 역변환하여 다시 원래 신호로 복원합니다. `numpy.fft.ifft` 함수는 FFT를 통해 주파수 영역으로 변환된 데이터를 다시 시간 영역으로 되돌립니다.

예제 2: 혼합 신호의 역변환

다음 예제에서는 혼합된 주파수 성분으로 이루어진 신호를 역변환하여 원래 신호로 복원합니다.

import numpy as np
import matplotlib.pyplot as plt

# 두 개의 주파수를 가진 신호 생성 (5Hz, 20Hz)
x = np.linspace(0, 2 * np.pi, 1000)
y = np.sin(5 * x) + 0.5 * np.sin(20 * x)  # 5Hz와 20Hz의 사인파 합성

# FFT 수행
y_fft = np.fft.fft(y)

# IFFT 수행 (역변환)
y_ifft = np.fft.ifft(y_fft)

# 실수부만 시각화
plt.plot(x, y_ifft.real)
plt.title('혼합 신호의 IFFT 결과 - 원래 신호 복원')
plt.xlabel('시간')
plt.ylabel('신호 세기')
plt.show()

이 예제에서는 5Hz와 20Hz 사인파의 합성 신호에 대해 FFT를 수행한 후, `numpy.fft.ifft`를 사용해 다시 시간 영역의 신호로 복원하는 과정을 보여줍니다. 역변환을 통해 원래 신호가 정확히 복원되는 것을 확인할 수 있습니다.

정규화된 IFFT

`numpy.fft.ifft` 함수에서 `norm` 파라미터를 사용해 정규화된 역변환을 수행할 수 있습니다. 직교 변환을 사용하려면 `norm='ortho'`를 설정합니다.

import numpy as np

# 사인파 신호 생성
x = np.linspace(0, 2 * np.pi, 1000)
y = np.sin(5 * x)

# FFT 및 정규화된 IFFT 수행
y_fft = np.fft.fft(y, norm='ortho')
y_ifft = np.fft.ifft(y_fft, norm='ortho')

# 결과 출력
print("정규화된 IFFT 결과: ", y_ifft[:10])

이 예제는 `norm='ortho'` 옵션을 사용해 직교 변환을 적용한 결과를 보여줍니다. 직교 변환을 통해 신호의 크기를 조정하여 좀 더 정밀한 결과를 얻을 수 있습니다.

결론

`numpy.fft.ifft` 함수는 주파수 영역 데이터를 다시 시간 영역으로 변환하는 데 사용되며, 푸리에 변환 후 신호 복원에 유용한 도구입니다. 주로 신호 처리 및 주파수 분석에서 중요한 역할을 하며, FFT와 함께 사용되어 시간과 주파수 영역 사이에서 데이터를 변환하는 강력한 기능을 제공합니다.

더 많은 정보는 Numpy 공식 문서를 참고하세요.

반응형