バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/
はじめに
前回は現状のVTIチャートのまま、とりあえず周波数特性を出してみることで決定した。
注意点として、IFFTで抽出して波形の振幅がかなり小さいことが予想されるため、元のVTIチャートと比較する際はある程度増幅しておいた方が良いという点。
今回は、それのMATLABコードと結果を確認。
登場人物
博識フクロウのフクさん

イラスト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
とりあえず作って来たMATLABコード

と、とりあえず、それっぽい感じのMATLABコードは作って来た・・・。

ほう?
大丈夫そう?

コードとしては大丈夫だと思うけど、一応確認してもらえると助かるかな。

そこはちゃんと見よう。

というわけで作って来たMATLABコード。
VTI=csvread('VTI.csv'); % VTIチャート読み込み
N=length(VTI);
L=N/2;
x=linspace(-L,L-1,N);
ft=VTI;
% 変換前波形
subplot(5,1,1)
plot(ft)
title('f(t)');
grid();
% FFT後にローテーション
Fw=fft(ft);
Fw_tmp=circshift(Fw,L);
subplot(5,1,2);
mask = (-50<=x & x<=50);
plot(x(mask),abs(Fw_tmp(mask)));
title('F(\omega)');
grid();
% 拡大
subplot(5,1,3);
mask = (0<=x & x<=10);
plot(x(mask),abs(Fw_tmp(mask)));
title('F(\omega) expansion');
grid();
% 特定周波数のみ抽出
Fw_Filter=Fw_tmp;
Hz = 5;
Low = Hz-0.5;
High = Hz+0.5;
Fw_Filter( x< -High | (-Low < x & x <= 0) | (0 <= x & x < Low) | High < x)=0;
subplot(5,1,4);
mask = (-10<=x & x<=10);
plot(x(mask),abs(Fw_Filter(mask)));
title('F(\omega) Filter');
grid();
% IFFT前にローテーション
fx = ifft(circshift(Fw_Filter,L));
subplot(5,1,5);
plot(real(fx),'r');
hold on
max_fx=max(fx);
max_ft=max(ft);
plot(ft*(max_fx/max_ft));
title('f(x)');
grid();
コード確認

まぁパッと見た感じだと問題らしい問題は見受けられないな。

あと、前回の注意点で、IFFT後の波形の振幅はこのコードで調整してる。
max_fx=max(fx);
max_ft=max(ft);
plot(ft*(max_fx/max_ft));

なるほど。
それぞれの波形の最大値を取って、それの比率を元に増幅してるのね。
これだったら、IFFT後の波形の振幅がどうなっていても比較可能な状態にはなるね。
なかなかうまい工夫だと思うよ。

あ、珍しく褒められた!

(えー、普段から結構誉めてるつもりなんだけどなー。)
動作結果

そして動作結果がこれ。


動作結果も問題は無いな。
動作結果は・・・。

そうなんだよねー。
これは自分で動かしたときにすでに感じていて・・・。

まぁここの追及はPython側を始末してからだな。

Pythonも僕がやるの・・・?

流れは全く一緒だし、以前のコードを元にすればできるとは思うよ。

まぁMATLABで書けたからちょっとは自信も付いた感じもあると言えばあるのだけど。

じゃ、次回までによろしく。

(いつものやり取りの逆パターン!)
まとめ

まとめだよ。
- とりあえず、現状のVTIチャートに対してMATLABで5Hzを抽出するコードを作成。
- IFFT後の波形の振幅の増幅は最大値を比較して、その比率を使用して増幅係数を決定。
- 一応5Hzの抽出はできたが・・・。
- ここらへんの考察はPythonコードを作成した後に実施予定。
バックナンバーはこちら。
コメント