【FFT】MATLAB、Pythonで株価予測 その36【IFFT⑮】

【FFT】MATLAB、Pythonで株価予測 その36【IFFT⑮】 株価予測
【FFT】MATLAB、Pythonで株価予測 その36【IFFT⑮】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/

はじめに

前回までで、MATLABとPythonの論理インデックス検索と線形インデックス検索について確認。
そうほう似たような形で実施可能ではあるが、
行列の場合は若干異なる。
今回はベクトルに対して実施するため、恐らくオリジン以外の大きな差異は出ない。

そして、今回はPython(Numpy)側のバンドパスフィルタを実施する。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

Python(Numpy)によるバンドパスフィルタ

太郎くん
太郎くん

論理インデックスの話が出て途中になっちゃったけど、
バンドパスフィルタのPython(Numpy)側が残ってるね。

フクさん
フクさん

そうそう。
よって、今回はPython(Numpy)版のバンドパスフィルタを試してみる。

太郎くん
太郎くん

特に大きな差ってのは無いのかな?

フクさん
フクさん

基本的な流れは全く一緒だ。
余裕があればMATLABコードと比較して見ると良いだろう。

実際のコード

フクさん
フクさん

そして実際のコードがこれになる。

import numpy as np
import matplotlib.pyplot as plt

N=1024
L=np.pi
x=np.linspace(-L,L,N)
k=np.arange(-N/2,N/2)
ft=np.sin(x)+np.sin(3*x)+np.sin(7*x)

fig = plt.figure()

# 変換前波形
ax1 = fig.add_subplot(4, 1, 1)
ax1.plot(x,ft)
ax1.set_title('f(t)')

# FFT後にローテーション
Fw=np.fft.fft(ft)
Fw_tmp = np.roll(Fw,int(N/2))
ax2 = fig.add_subplot(4, 1, 2)
mask = (-10<=k) & (k<=10)
ax2.plot(k[mask],np.abs(Fw_tmp[mask]))
ax2.set_title(r'$F(\omega)$')

# 特定周波数のみ抽出
Fw_Filter=Fw_tmp;
Hz = 3;
Low = Hz-0.1;
High = Hz+0.1;
Fw_Filter[ ( k< -High) | ((-Low < k) & (k <= 0)) | ((0 <= k) & (k < Low)) | (High < k)]=0;

ax3 = fig.add_subplot(4, 1, 3)
ax3.plot(k[mask],np.abs(Fw_Filter[mask]))
ax3.set_title(r'$F(\omega)$ expansion')

# IFFT前にローテーション
fx=np.fft.ifft(np.roll(Fw_Filter,int(N/2)))

ax4 = fig.add_subplot(4, 1, 4)
ax4.plot(x,fx.real)
ax4.set_title('f(x)')

plt.show()

実行結果

フクさん
フクさん

そして結果がこれ。

Python(Numpy)によるバンドパスフィルタ、3Hz、f(t)、F(ω)、f(x)
太郎くん
太郎くん

MATLABの時と同じ結果になった。
Pythonでも問題無いってことだね。

フクさん
フクさん

まぁ同じことさせてるしね。
ダメだったらコード側がおかしいってことになるな。

まとめ

フクさん
フクさん

まとめだよ。

  • Python(Numpy)によるバンドパスフィルタのコード作成。
  • 上記コードを実行して見た。
    • MTALABと同じ結果が得られることを確認。
    • よって、MATLAB、Python双方でFFT、IFFTによる特性周波数の抽出が可能と言える。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました