sin波のバイナリデータを直接生成してNumPyのFFTで表示してみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import numpy as np import matplotlib.pyplot as plt sample_rate = 44100 interval = 1 # 秒 dt = 1 / sample_rate # サンプリング周期 freq = 600 # 周波数(Hz) sp = np.arange(0, interval, dt) y_value = np.sin(2 * np.pi * freq * sp) N = len(y_value) X = np.fft.fft(y_value) f = np.fft.fftfreq(N, dt) fig, (grp1, grp2) = plt.subplots(ncols=2, figsize=(8, 4)) grp1.set_xlim(0, 0.004) grp1.plot(sp, y_value) grp2.set_xlim(0, 2000) grp2.plot(f[0:N//2], np.abs(X[0:N//2])/N) plt.show() |
とんでもなく短いコードで書けてしまうことに驚いた。
ただ気になるのは実行速度。 ネット上のPythonに関する記事を読んでいても、遅いと書いてある。 今回使った数値計算用モジュールのNumPyは、Cで書いてあるらしい。
このグラフを書かせるのに20秒もかかっている。 ゲームの開発もされているようなので、exeファイルに変換すれば速くなると思うんだけど..。