こないだ最初に試したほうのmbedのFFTライブラリ。
コンパイルで100個以上のエラーが出ちゃって、
そのままそっと閉じた方のライブラリ。
ふと、公開されているプログラム一式を眺めて、
もしかして、やっぱり動くんじゃね?って思って、
新しいプログラム使ってやり直してみた。
https://developer.mbed.org/users/TareObjects/code/FRDM_MAG3110/
このページのプログラムでは、「fftsg」じゃなく、
「fft4g」をincludeしてるので、それを使ってみる
ことに。
#include "mbed.h"
#include "fft4g.h"
#define NN 64
#define NSQ 8 /* sqrt(NN) = 8 */
//Serial pc(USBTX, USBRX); // tx, rx
Serial pc(P0_19, P0_18); // tx, rx
DigitalOut myled(LED1);
void dataout(double *d, char *s) {
pc.printf("FFT test (%s)\r\n", s);
for (int i = 0; i "%f , %f\r\n", d[i*2], d[i*2+1]);
}
pc.printf("");
}
int main() {
double data[NN * 2]; // real + imaginal
int ip[NSQ + 2]; // bit reversal table ( + 2 pointers for sin/cos)
double w[NN * 2 / 2]; // twiddle factor (real + imaginal)
double mlt1 = 2.0; // mutiple value for frequency for sin
double mlt2 = 8.0; // mutiple value for frequency for cos
for (int i = 0; i sin(2*3.141593 * i / NN * mlt1)
+ cos(2*3.141593 * i / NN * mlt2);
data[i*2+1] = 0;
}
ip[0] = 0; // first time only ( for initialize )
dataout(data, "input-data"); // dump input-data
myled = 1;
cdft(NN * 2, 1, data, ip, w); // exec FFT
myled = 0;
dataout(data, "output-data"); // dump output-data
while(1) {
}
}
動いた。
当然ながら、入力に与えたデータに対して、結果のデータ
もちゃんと想定どおりに出てきた。なんだろうな?
fft4gだと動くのかな?
sinとcos、別々の周波数で足し合わせたのを入力。
これをFFT掛けると、
ちゃんとこう出る。出てる周波数のばしょも大丈夫。
さて、このライブラリデータ形式がdouble型。今使いたい
用途から考えると、ちょっとオーバースペック。FPUが
入ってないseeeduino archだと、処理速度にも問題。
まず、これで1000回ループしたときの時間を計測してみる。
64点FFTだと13秒、256点FFTだと、79秒。(実測値)
やっぱ遅い。時間かかりすぎ感ある。
プログラム、ヘッダファイル、ライブラリファイルの
3ファイルの、「double」を「float」に置換してみる。
コンパイルさくっと通った。実行してみる。
64点FFTだと2.5秒、256点だと18秒。(実測値)
float型で64点なら、1回当たり2.5m秒。これなら、
たいていの用途で遅延無く使えそうな感じ。悪くない。
FPU無しで実数演算でFFT掛けて、このくらいの時間で
済むなら、わざわざ整数型にする必要もないかもしれない
けど、でも、整数型なら、1回あたりの計算がもっと速い
はずだからなぁ。そっちも試せるなら試してみたいよなぁ。
https://www.youtube.com/watch?v=WybKefW5eL4
いったい、なにがあったんだろう?なんでこんな風に?
すごい事故。フロントがぴょん吉になってる。多分、
https://clubmini.jp/usedcar/CU4986655207.html
これだよなぁ。ミニが、ミニミニになっている。
https://www.pc-koubou.jp/products/detail.php?product_id=277071
なかなかいいな。ちっちゃくて。普段使いならこれで
全然オッケーなんだよな。
https://www.reddit.com/r/funny/comments/4kuyop/faceplant/
ゴールデンラッキー。