見出し画像

TWSNMP FC:STL分析のパニック対策、FFT分析のグラフ改善

今朝は猫が4時ピッタリに起こしてくれました。雨なのでベランダに出てびしょ濡れになりながら雨水を舐めていました。6時には、かみさんを起こして庭にでて、またまたびしょ濡れになりながらサンダルに溜まった雨水や葉っぱについた雨水を舐めていました。かなり嬉しそうです。
昨日の午後からポーリングを追加してSTL分析とFFT分析のテストを行っているといろいろ問題がみつかりました。
一つは大きな問題でSTL分析でパニックが発生するものです。

panic: setup workspace: Not yet implemented: native matrix for colmajor or unpacked matrices

いろいろ調べていると、どうやら分析するポーリングログの件数が少ないために発生していました。昨日の夜、いろいろ対策を考えましたが、頭が働かないのでよい解決策が見つからないまま寝てしまいました。
今朝改めて元にしたサンプルコードでデータ数を減らして実験したみたところパラメータの周期数より小さいと、このエラーがでることがわかりました。STLのライブラリのソースコードも見て

	if xxx, err = native.Tensor3F64(s.data); err != nil {
		panic(errors.Wrap(err, "setup workspace"))
	}

でエラーの時にパニックを発生させていることもわかりました。ライブラリとしてはあまり好ましくない作り方です。githubでforkして自分で書き換えようかとも思いまいしたが、他にも作りたいものが沢山あるので、我慢することにしました。
このパニックを回避するためにデータ数が少ない時はSTL分析を行わないで

画像1

のようにエラーを表示するように対策しました。

次にFFT分析のグラフのX軸を周波数(Hz)で表示していると

画像2

の0.0056Hzは、いったい何を示しているのかわかりません。音声なら440Hzや20kHzの表現で何となく音の高さを示していることがわかります。
何か他の表現がないか悩みました。周波数についていろいろ調べていると、

をみてふと思いつきました。そもそも、知りたいのは周波数ではなく周期でした。ログが10分毎に出力されているとか、24時間毎に応答が遅くなるとかです。
そこで、周波数と周期を切り替えられるようにしました。同じデータを周期で表示すると、

画像3

「おお 3分(180秒)毎に出力されるログがある」ということが発見できました。これは使えそうです。
SyslogやNetFlowの分析にも組み込みたくなってきました。そのためには、

を使ってJavaScriptでFFT分析する方法にしようかと思っています。
今朝の開発は、

です。
明日に続く

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。