본문 바로가기
Python/numpy

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

by PySun 2024. 10. 28.
반응형

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

`numpy.fft.fftn` 함수는 N차원 이산 푸리에 변환(N-Dimensional Discrete Fourier Transform)을 계산하는 함수입니다. 이 함수는 다차원 배열의 주파수 영역으로 변환하는 데 사용됩니다. 특히, 2D 이미지, 3D 볼륨 데이터와 같은 고차원 데이터의 주파수 분석에 유용하게 사용됩니다. 이 글에서는 `numpy.fft.fftn` 함수의 사용법과 예제 코드를 통해 이 함수의 기능을 설명합니다.

`numpy.fft.fftn` 함수란?

`numpy.fft.fftn` 함수는 다차원 배열의 이산 푸리에 변환을 계산합니다. 이 함수는 기본적으로 N차원 데이터에서 주파수 성분을 추출하는 데 사용되며, 다양한 데이터 처리 및 분석 작업에서 유용하게 사용됩니다. 특히, 이미지 처리, 신호 처리 및 3D 데이터 분석과 같은 분야에서 많이 활용됩니다.

함수 문법

numpy.fft.fftn(a, s=None, axes=None, norm=None)
  • a: 변환할 입력 데이터 (다차원 배열)
  • s: 각 축에서 변환할 크기 (기본값은 입력 배열 크기)
  • axes: 변환할 축 (기본값은 모든 축)
  • norm: 정규화 방식 (예: "ortho" 사용 시 정규화)

예제 1: 3차원 배열의 푸리에 변환

다음 예제는 3차원 배열에 대해 `numpy.fft.fftn` 함수를 사용하여 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)

# 결과 출력 (일부 값)
print("3D FFT 결과 샘플:\n", fft_result[:2, :2, :2])

이 예제에서는 3차원 사인파 데이터를 생성하고, 해당 데이터에 대해 `numpy.fft.fftn`을 사용하여 3차원 푸리에 변환을 수행한 후 일부 결과를 출력합니다. 이 과정을 통해 고차원 데이터의 주파수 성분을 분석할 수 있습니다.

예제 2: 2D 이미지의 다차원 푸리에 변환

이 예제에서는 2D 이미지에 대해 N차원 푸리에 변환을 수행한 후, 해당 결과를 시각화하는 방법을 보여줍니다.

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)

# 주파수 스펙트럼 시각화를 위해 log 스케일로 변환
magnitude_spectrum = np.log(np.abs(fft_image))

# 결과 시각화
plt.imshow(np.fft.fftshift(magnitude_spectrum), cmap='gray')
plt.title('이미지의 2D 푸리에 변환')
plt.show()

이 예제에서는 `fftn`을 사용하여 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')

# 결과 출력
print("정규화된 2D FFT 결과 샘플:\n", fft_result_norm[:2, :2])

이 예제에서는 정규화된 푸리에 변환을 사용하여 데이터를 변환하는 방법을 보여줍니다. 정규화된 결과는 변환 과정에서 크기 손실이 없는 데이터로 반환됩니다.

결론

`numpy.fft.fftn` 함수는 다차원 데이터에 대해 푸리에 변환을 수행할 수 있는 강력한 함수입니다. 이 함수를 사용하면 2D 이미지, 3D 볼륨 데이터와 같은 고차원 데이터를 주파수 영역으로 변환하여 다양한 분석 작업을 수행할 수 있습니다. 데이터 처리 및 이미지 처리 등 여러 분야에서 유용하게 사용할 수 있는 도구입니다.

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

반응형