在 Python 中繪製快速傅立葉變換(FFT)
Shivam Arora
2023年1月30日
2021年10月2日
在這篇 Python 教程文章中,我們將瞭解快速傅立葉變換並在 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
被認為更快。實現是一樣的。
例如,
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()