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



こないだ最初に試したほうの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/

ゴールデンラッキー。



コメント ( 0 )