在 Python 中繪製快速傅立葉變換(FFT)

Shivam Arora 2023年1月30日 2021年10月2日
  1. 使用 Python scipy.fft 模組進行快速傅立葉變換
  2. 使用 Python numpy.fft 模組進行快速傅立葉變換
在 Python 中繪製快速傅立葉變換(FFT)

在這篇 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()

python scipy fft 示例

請注意,scipy.fft 模組建立在 scipy.fftpack 模組之上,具有更多附加功能和更新的功能。

使用 Python numpy.fft 模組進行快速傅立葉變換

numpy.fft 的工作原理類似於 scipy.fft 模組。scipy.fftnumpy.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()

python numpy fft 示例