Python で高速フーリエ変換(FFT)をプロットする
    
    
            Shivam Arora
    2023年1月30日
    
    Python
    
 
この Python チュートリアル記事では、高速フーリエ変換を理解し、Python でプロットします。
フーリエ解析は、周期成分の集合体として関数を伝達し、成分からそれらの信号を抽出します。関数とその変換の両方が離散部分と交換されるとき、それはフーリエ変換として表されます。
FFT は主に、実行速度を上げるための計算アルゴリズムと連携します。フィルタリングアルゴリズム、乗算、画像処理は、そのアプリケーションのいくつかです。
高速フーリエ変換に Python scipy.fft モジュールを使用する
高速フーリエ変換で測定する最も重要なポイントの 1つは、タイムスタンプが均一なデータにのみ適用できることです。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()

        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe