Python
 Computer >> コンピューター >  >> プログラミング >> Python

MatplotlibでX軸に正しい周波数を表示して信号のFFTをプロットする方法

matplotlibで信号のFFT(高速フーリエ変換)をプロットする際、X軸に正しい周波数を表示することは非常に重要です。ここでは、numpyのnp.fft.fftnp.fft.fftfreqを組み合わせて、正確な周波数軸を持つFFTスペクトルを作成する方法を解説します。

手順

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。

  • 2つの変数 N(サンプル数)と m(サイクル数)を初期化し、nu(正規化された周波数)を計算します。

  • numpyを使って信号(正弦波)を作成し、1次元離散フーリエ変換を計算します。

  • np.fft.fftfreqで離散フーリエ変換のサンプル周波数を取得します。

  • 周波数 freq とフーリエ変換のデータ点を実部の2乗+虚部の2乗(パワースペクトル)としてプロットします。

  • plt.show() メソッドで図を表示します。

コード例

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

N = 256
t = np.arange(N)
m = 4
nu = float(m)/N

signal = np.sin(2*np.pi*nu*t)

ft = np.fft.fft(signal)

freq = np.fft.fftfreq(N)

plt.plot(freq, ft.real**2 + ft.imag**2)

plt.show()

コードのポイント

このコードでは、まずサンプル数 N=256 の時間配列を作成し、m=4 サイクル分の正弦波信号を生成しています。正規化された周波数 nu は m/N で求められます。

np.fft.fft(signal) は複素数の配列を返すため、実部の2乗と虚部の2乗を足し合わせることでパワースペクトルを計算しています。さらに np.fft.fftfreq(N) が各FFTビンに対応する周波数を返すため、これをX軸に使うことで、正しい周波数スケールでスペクトルを可視化できます。

出力

上記のコードを実行すると、以下のようなグラフが出力されます。

MatplotlibでX軸に正しい周波数を表示して信号のFFTをプロットする方法

  1. Matplotlibでカラーバー付き2D行列をPythonでプロットする方法

    Pythonでカラーバー付きの2D行列をプロットするには、numpyを使って2次元配列(行列)を作成し、そのデータをimshow()メソッドに渡すのが最も簡単な方法です。手順numpyを使用して data2D という2次元配列を作成します。imshow() メソッドを使い、データを画像として(2次元の正規ラスタ上に)表示します。colorbar() メソッドに imshow() が返す ScalarMappable インスタンスを渡し、カラーバーを作成します。これにより、色と数値の対応関係がひと目でわかるようになります。図を表示するには、show() メソッドを使用します。コード例import

  2. MatplotlibでNaN値を含むデータをプロット・操作する方法を解説

    MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp