Python에서 고속 푸리에 변환(FFT) 플로팅
Shivam Arora
2023년1월30일
이 Python 튜토리얼 기사에서는 Fast Fourier Transform을 이해하고 Python으로 플롯할 것입니다.
푸리에 분석은 주기적 구성 요소의 집합체로서의 기능을 전달하고 구성 요소에서 해당 신호를 추출합니다. 함수와 그 변환이 이산 부분으로 교환되면 푸리에 변환으로 표현됩니다.
FFT는 주로 실행 속도를 높이기 위해 계산 알고리즘과 함께 작동합니다. 필터링 알고리즘, 곱셈, 이미지 처리는 응용 프로그램의 일부입니다.
고속 푸리에 변환을 위해 Python scipy.fft
모듈 사용
고속 푸리에 변환에서 측정해야 할 가장 중요한 점 중 하나는 타임스탬프가 균일한 데이터에만 적용할 수 있다는 것입니다. scipy.fft
모듈은 주어진 시간 영역을 주파수 영역으로 변환합니다. 길이 N 시퀀스 x[n]
의 FFT는 fft()
함수로 계산됩니다.
예를 들어,
from scipy.fftpack import fft
import numpy as np
x = np.array([4.0, 2.0, 1.0, -3.0, 1.5])
y = fft(x)
print(y)
출력:
[5.5 -0.j 6.69959347-2.82666927j 0.55040653+3.51033344j
0.55040653-3.51033344j 6.69959347+2.82666927j]
높은 계산을 필요로 하기 때문에 잡음이 있는 신호를 사용할 수도 있습니다. 예를 들어 numpy.sin()
함수를 사용하여 사인 시리즈를 만들고 플롯할 수 있습니다. 시리즈를 플로팅하기 위해 Matplotlib
모듈을 사용합니다.
다음 예를 참조하십시오.
import scipy.fft
import matplotlib.pyplot as plt
import numpy as np
N = 500
T = 1.0 / 600.0
x = np.linspace(0.0, N * T, N)
y = np.sin(60.0 * 2.0 * np.pi * x) + 0.5 * np.sin(90.0 * 2.0 * np.pi * x)
y_f = scipy.fft.fft(y)
x_f = np.linspace(0.0, 1.0 / (2.0 * T), N // 2)
plt.plot(x_f, 2.0 / N * np.abs(y_f[: N // 2]))
plt.show()
scipy.fft
모듈은 더 많은 추가 기능과 업데이트된 기능으로 scipy.fftpack
모듈에 구축되었습니다.
고속 푸리에 변환을 위해 Python numpy.fft
모듈 사용
numpy.fft
는 scipy.fft
모듈과 유사하게 작동합니다. scipy.fft
는 numpy.fft
에서 일부 기능을 내보냅니다.
numpy.fft
는 2D 배열을 다룰 때 더 빠른 것으로 간주됩니다. 구현은 동일합니다.
예를 들어,
import matplotlib.pyplot as plt
import numpy as np
N = 500
T = 1.0 / 600.0
x = np.linspace(0.0, N * T, N)
y = np.sin(60.0 * 2.0 * np.pi * x) + 0.5 * np.sin(90.0 * 2.0 * np.pi * x)
y_f = np.fft.fft(y)
x_f = np.linspace(0.0, 1.0 / (2.0 * T), N // 2)
plt.plot(x_f, 2.0 / N * np.abs(y_f[: N // 2]))
plt.show()