파이썬 Numpy의 `numpy.fft.ifftn` 함수 소개
`numpy.fft.ifftn` 함수는 N차원 역 이산 푸리에 변환(Inverse N-Dimensional Discrete Fourier Transform)을 계산하는 함수입니다. 다차원 푸리에 변환을 통해 얻어진 주파수 도메인 데이터를 다시 시간 도메인으로 변환하는 데 사용됩니다. 이 글에서는 `numpy.fft.ifftn` 함수의 사용법과 예제 코드를 통해 이 함수의 기능을 설명합니다.
`numpy.fft.ifftn` 함수란?
`numpy.fft.ifftn` 함수는 다차원 배열의 주파수 도메인 데이터를 다시 원래의 시간 도메인 또는 공간 도메인으로 변환합니다. N차원 푸리에 변환의 결과를 해석할 때 사용되며, 이미지 처리나 신호 처리와 같은 여러 분야에서 유용하게 사용됩니다.
함수 문법
numpy.fft.ifftn(a, s=None, axes=None, norm=None)
- a: 변환할 입력 데이터 (다차원 배열)
- s: 각 축에서 변환할 크기 (기본값은 입력 배열 크기)
- axes: 변환할 축 (기본값은 모든 축)
- norm: 정규화 방식 (예: "ortho" 사용 시 정규화)
예제 1: 3차원 배열의 역 푸리에 변환
다음 예제는 3차원 배열에 대해 `numpy.fft.ifftn` 함수를 사용하여 3D 역 푸리에 변환을 수행하는 방법을 보여줍니다.
import numpy as np
# 3차원 배열 생성 (예: 3D 사인파)
x = np.linspace(0, 4 * np.pi, 100)
y = np.linspace(0, 4 * np.pi, 100)
z = np.linspace(0, 4 * np.pi, 100)
X, Y, Z = np.meshgrid(x, y, z)
data = np.sin(X) + np.sin(Y) + np.sin(Z)
# 3D 푸리에 변환
fft_result = np.fft.fftn(data)
# 3D 역 푸리에 변환 수행
ifft_result = np.fft.ifftn(fft_result)
# 결과 출력 (일부 값)
print("3D IFFT 결과 샘플:\n", ifft_result.real[:2, :2, :2])
이 예제에서는 3차원 사인파 데이터를 생성하고, 먼저 `numpy.fft.fftn`을 사용해 푸리에 변환을 수행한 후, `numpy.fft.ifftn`을 통해 다시 원래의 데이터로 변환합니다. 이를 통해 주파수 도메인에서의 데이터 복원을 확인할 수 있습니다.
예제 2: 2D 이미지의 다차원 역 푸리에 변환
이 예제에서는 2D 이미지의 푸리에 변환 후, 역 변환을 통해 원래 이미지를 복원하는 방법을 보여줍니다.
import numpy as np
import matplotlib.pyplot as plt
from scipy import misc
# 예제 이미지 로드
image = misc.face(gray=True)
# 2D 푸리에 변환 수행
fft_image = np.fft.fftn(image)
# 2D 역 푸리에 변환 수행
ifft_image = np.fft.ifftn(fft_image)
# 원본 이미지와 역변환된 이미지 시각화
plt.subplot(1, 2, 1)
plt.imshow(image, cmap='gray')
plt.title('원본 이미지')
plt.subplot(1, 2, 2)
plt.imshow(np.abs(ifft_image), cmap='gray')
plt.title('역 푸리에 변환된 이미지')
plt.show()
이 예제에서는 먼저 2D 이미지에 대해 푸리에 변환을 수행하고, 다시 역 푸리에 변환을 통해 원본 이미지를 복원합니다. 이를 통해 푸리에 변환과 역 변환이 제대로 동작하는지 확인할 수 있습니다.
정규화된 역 푸리에 변환
푸리에 변환을 정규화하려면 `norm='ortho'` 옵션을 사용할 수 있습니다. 이 옵션을 사용하면 푸리에 변환과 역 푸리에 변환 과정에서 크기 손실이 발생하지 않도록 데이터를 유지합니다.
import numpy as np
# 2차원 배열 생성
x = np.linspace(0, 4 * np.pi, 100)
y = np.linspace(0, 4 * np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X) + np.sin(Y)
# 정규화된 2D FFT 수행
fft_result_norm = np.fft.fftn(Z, norm='ortho')
# 정규화된 2D IFFT 수행
ifft_result_norm = np.fft.ifftn(fft_result_norm, norm='ortho')
# 결과 출력
print("정규화된 2D IFFT 결과 샘플:\n", ifft_result_norm.real[:2, :2])
이 예제에서는 정규화된 푸리에 변환 및 역 푸리에 변환을 통해 데이터를 변환하는 방법을 보여줍니다. 정규화된 결과는 변환 과정에서 크기 손실이 발생하지 않습니다.
결론
`numpy.fft.ifftn` 함수는 다차원 데이터에 대해 주파수 도메인에서 시간 또는 공간 도메인으로 복원할 수 있는 강력한 함수입니다. 이 함수를 사용하면 이미지 처리, 신호 처리 및 3D 데이터 복원과 같은 다양한 분야에서 원본 데이터를 효과적으로 복원할 수 있습니다. `numpy.fft.fftn`과 함께 사용하여 N차원 데이터의 주파수 변환 및 복원 작업을 간편하게 수행할 수 있습니다.
더 많은 정보는 Numpy 공식 문서를 참고하세요.
'Python > numpy' 카테고리의 다른 글
파이썬 numpy.fft.ifftshift 함수 활용하기 (0) | 2024.10.31 |
---|---|
파이썬 numpy.fft.fftshift 함수 활용하기 (0) | 2024.10.30 |
파이썬 numpy.fft.fftn 함수 활용하기 (0) | 2024.10.28 |
파이썬 numpy.fft.ifft2 함수 활용하기 (0) | 2024.10.27 |
파이썬 numpy.fft.fft2 함수 활용하기 (0) | 2024.10.26 |