バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は、ATLABとPython(Numpy)のフーリエ変換、逆フーリエ変換for文無し版の動作確認を実施。
共に問題無く動作した。
for文無しにはできるが、元のfor文あり版で今後は進めて行く。
前回まではシンプルなsin波の合成波形だったが、
今回からは、具体的な個別株のデータを入れていく。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
今後の予定
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
とりあえず、FFTじゃない本当のフーリエ変換ベースのコードはできたわけだけど、
今後はどうする?
もう個別株を入れちゃう?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうだね。
まずは、フーリエ変換後の逆フーリエ変換をして元波形に戻るか。
その後に、抽出したい周波数範囲を特定。
最後にFFT、IFFTでやったのと同じく極大値、極小値のタイミングとその時の単価特定。
って感じだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
まぁ着実に固めて行った方が良いね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
なんかしくじってる可能性もあるし。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
しかし、この手のプログラムでしくじってるとかあると問題特定とかできるのか?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
基本は数式から見直すことになるね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
そうだよねー。
ブレークポイント貼ってステップ実行で確認とかってタイプのデバッグにはならないよねぇ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
それができないことが欠点とも言えるし、
それをしなくても良いことが利点とも言えるから、
どっちもどっちだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
(これを利点と言えるレベルになりたい・・・。)
MATLABコード修正箇所
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
で、今回もコード修正が入るのかな?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ほぼ変化はないな。
MATLAB内で波形を作るか、csvファイルから読み取るかの差だけだな。
念のため差分を書くとこんな感じだ。
L=pi; % 波形の期間(-L~L)
w_max = 20; % 取りたい最大周波数
x=linspace(-L,L,255);
ft=sin(x)+sin(3*x)+sin(7*x); % 変換用波形読み込み
N=length(ft); % 波形のplot数取得
↓
L=pi; % 波形の期間(-L~L)
w_max = 125; % 取りたい最大周波数
stock=csvread('TM1.csv'); % 変換用波形読み込み
N=length(stock); % 波形のplot数取得
ft=stock-mean(stock); % 波形を行ベクトルへ
ft=ft';
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
csvreadでよむだけだね。
で、csvの並び的に列ベクトルになるから、
ft=ft’
で行ベクトルに転置してるだけか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そうそう。
これで前回のコード構成を変更せずに使いまわせる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
いつもそうなんけど、
列ベクトルをデフォルトとして扱うべきか
行ベクトルとデフォルトとして扱うべきかは悩むね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
数学的には列ベクトルをデフォルトとすべきっぽいが、
MATLABのベクトル、数列を生成する機能のほとんどが行ベクトルなんだよね。
だから、MATLABに於いては行ベクトルをデフォルトとした方が利便性は高いな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
なるほど。
ツール側の性格に合わせた方がトータルでは楽そうってことか。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 今後の予定について検討。
- 個別株の波形に対して以下を実施。
- フーリエ変換後の逆フーリエ変換をして元波形に戻るか。
- 抽出したい周波数範囲を特定。
- 極大値、極小値のタイミングとその時の単価特定。
- 個別株の波形に対して以下を実施。
- MATLABの場合、行ベクトルをデフォルトとした方が利便性が高い。
バックナンバーはこちら。
コメント