Python numpyでFFTを実行する.周波数軸はどうしたら2
以前の記事「Python numpyでFFTを実行する.周波数軸はどうしたら」ではlinspaceを使って周波数リストを出力していたが,numpy.fft.fftfreqでもよい.
以下のようになる.実は,折り返しが始まった周波数より上はnumpy.fft.fftfreqで作った方が正しい.というのはlinspaceで周波数リストを作ると折り返しは再現されないのだ.
fftfreqで作成すると絶対値だけは周波数を再現する.負符号で折り返しを表現する.
import numpy as np import matplotlib.pyplot as plt # 例の信号を作成 t = np.linspace(0.001, 4, 4000); z = 0.1 + 0.2 * np.sin(t * 10 * 2 * np.pi) + 0.2 * np.sin(t * 33 * 2 * np.pi); # サンプリング周波数 fsmp = 1 / (t[1] - t[0]); # 解析時間 t_len = t.max() - t.min(); Fz = np.fft.fft(z) / z.shape[0] * 2; # 折り返すのでパワーが2分の1になっている. Fz[0] = Fz[0] / 2; # 平均成分は折り返さない. Fz_abs = np.abs(Fz); freq = np.linspace(0, fsmp - 1/(t_len + t[1] - t[0]), num=len(t)); freq2 = np.fft.fftfreq(len(t), d=1.0/fsmp); plt.figure(1) plt.plot(freq, freq2 - freq); plt.show();