ブログ

割とコンピュータよりの情報をお届けします。

2019年7月15日

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();

≫ 続きを読む

2019/07/15 コンピュータ   TakeMe