「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



昨日の、ESP32でFFT掛けてみたやつ、結論から言うと、
ちゃんとFFTの計算できてた。

サンプルに使ってたプログラム、入力データだけ
表示に変なデータが載ってたんだけど、なんだこれ?
って思ってたら、表示してた値の計算式が変だった。

平方和の平方根を取ってたとばかり思ってたら、
10の対数を取っていた。なので、関数の引数がゼロ
の時に「inf」になっちゃうし、sin波の1周期ごとに
ゼロに近づくせいで、ピコンと棘が出るという具合。

メモリの使用量多くてメモリ破壊しちゃったのかな?
とか、色々と調べまくったんだけど、結果は単純で、
例によってオイラの頭がバグってただけだった。


というわけで、ESP32のArduino用スケッチ一式zip。

fft_test1.zip

このFFTライブラリは、京都大学大浦先生のFFTライブラリ
だったはず。


実行すると、




こんな風にシリアルモニタでテキストにこんな具合に
表示される。左から、データの項番、実数、虚数、SQRT
の順で。最初はFFT実行前のデータテーブルを表示して、
その後でFFT実行後のデータテーブルが表示されると
言う具合。

このデータはcsv形式なので、表計算ソフトにコピペして、
グラフ化するとこんな感じ。

まず入力データ。sin波。



対数取るとこの黄色の線に棘が生えるんだけど、そもそも
入力データは対数取る必要なんて無かったんだよな。

出力はこんな。



実数(D列)は全部ほぼゼロ。虚数(E列)は、5番目あたり
(正の周波数)にマイナス値が、60番目あたり(負の周波数)
にプラス値が、それ以外はほぼゼロが出ている状態。
平方和の平方根をとると、それぞれのところに正の値で
棘が生える。

本当は、入力データの右端と左端が繋がっていない状態
なので、それ以外の周波数にも少しデータが載っている
んだけど、値が小さいので、平方和の平方根では表示
されない状態。


そういえば、デシベル表示することも考えると、やっぱ
対数表示も欲しいんだけど、そもそも値がゼロになって
しまう場合を考えると、どうするのがいいのかな?

やっぱ、if文でゼロ(付近)かどうか判別して、ゼロ
だったときだけ固定値でマイナス100dBとか適当に仮定
しちゃうのがいいのかな。
異常値の扱いって、あまり良く知らないんだよな。
そもそも異常値が出ない前提のプログラム書けって
習わされたから、異常値が実行時に出たら、それはバグ
っていう…。





https://twitter.com/new_yamato_2199/status/1032916471007961088

ヤマト2199、一気に無料配信だって。ほほう。





http://www.nicovideo.jp/watch/sm33714964

28日目来てた。あっという間に来てたな。しらなかった。

なんか、計算が色々すごいな。あんまりよくわかって
ないけど、何をやっていて、どういう風に困難なのかは
図を見てると解る。

それにしても、一気に日数のスケールが長くなったな。





https://twitter.com/jagarikin/status/1032816709088858113

野菜ぷよぷよ。これ、ホントに作ったら、ゲームとしては
かなり難易度高いんじゃないのかな?





https://inober.com/hr_topics/topic_6

ドイツの生産性。





https://twitter.com/NikuYork/status/1032086683108274176

葉加瀬太郎。




https://twitter.com/wired_jp/status/1032771969714925568

あ…ありのまま 今 起こった事を話すぜ!





https://twitter.com/ugmch/status/1031367512573730816

ホラー。





(追記)

https://twitter.com/Nabe_RMC/status/1032608357658505216

マジか!!!
来年、愛知と岐阜でWRCやるらしい。



コメント ( 0 )