http://mantan-web.jp/2016/09/03/20160903dog00m200014000c.html
なんと!!!
こち亀が、連載終了になってしまうのか。残念だな。
ずっと、ずっと続くものとばかり思っていたけど、
始まりがあればいつか終わりがくるのか…。
https://twitter.com/anzainobuyuki/status/771984706384433152?ref_src=twsrc%5Etfw
日暮刑事、今回のオリンピックが最後になってしまった
のかな?それとも、次回はスポットで出てきたりする
のかな?
mbedで、FFTライブラリ使って、実際にアナログ信号を
FFT掛けてみることに。
といっても、ファンクションジェネレータを出すのが
面倒だったりしたので、3.3V版Arduinoで、適当に
100Hzの矩形波を作って、入力してみた。
アナログ入力ピンから信号を入力するタイミングは、
Tikerでタイマ割り込みすることにした。
どのくらいの間隔までアナログ入力が動くのか分んない
ので、とりあえず1000spsとしてみた。
入力データがこんな。
矩形波。(こっちのグラフに表示されてる単位は無視
してください。時間じゃなく、下のグラフと同じく
周波数が表示されちゃってるので)
1000spsで、64点FFTなので、左から右までが64m秒ほど。
大体こんな波形になるはずだろう。多分合ってそう。
結果がこんな。
窓関数を掛けてないので、DC付近にでっかいノイズが
乗ってるけど、とりあえずこれは無視するとして、
100Hz付近にちゃんとピークがある。
(グラフの一番左のピークがDCで、その右隣が100Hz付近)
で、矩形波なので、奇数倍音でピークが出るので、300Hz
付近でもデータが出てる。
まんなかより右側は、いわゆる負の周波数なので、ここでは
ひとまず無視。
というわけで、矩形波を入れると、ちゃんとその周波数と、
奇数倍音のところに、ピコンとピークが出てくる。
とってもよいかんじ。
どのくらいの周波数までアナログ入力が反応できるのか
が問題だな。まずは10Kspsは行って欲しいところ。できれば
20Kspsを超えてくれるとナイスなんだけどな。
ひとまず、現時点のプログラム。
#include "mbed.h"
#include "fft4g.h"
#define NN 64
#define NSQ 8 /* sqrt(NN) = 16 */
#define interval 1000.0 /* 1000 sps */
#define freq_unit (interval / NN)
#define max_freq (freq_unit * (NN / 2))
Serial pc(P0_19, P0_18); // tx, rx
AnalogIn ain(P0_11); // input via P0_11
Ticker tmr;
volatile int cnt;
float sample[NN]; // stock adc data
DigitalOut myled(LED1);
void dataout(float *d, char *s) {
pc.printf("FFT test (%s)\r\n", s);
for (int i = 0; i float f = (freq_unit * i);
if (f > max_freq) {
f = f - (2 * max_freq);
}
pc.printf("%f , %f , %f\r\n", f, d[i*2], d[i*2+1]);
}
pc.printf("");
}
void datain() {
sample[cnt] = ain.read();
cnt ++;
}
void sampling() {
cnt = 0;
tmr.attach(&datain, (1.0 / interval));
while (cnt detach();
}
int main() {
float data[NN * 2]; // real + imaginal
int ip[NSQ + 2]; // bit reversal table ( + 2 pointers for sin/cos)
float w[NN * 2 / 2]; // twiddle factor (real + imaginal)
sampling(); // input data from adc
for (int i = 0; i // convert to float
data[i*2] = sample[i]; // real
data[i*2 + 1] = 0.0; // imaginal
}
ip[0] = 0; // first time only ( for initialize )
dataout(data, "input data");
pc.printf("-- start fft --\r\n");
cdft(NN * 2, 1, data, ip, w); // exec FFT
pc.printf("-- end fft --\r\n");
dataout(data, "output data");
pc.printf("freqency unit = %f Hz\r\n", freq_unit);
pc.printf("max freqency = %f Hz\r\n", max_freq);
while(1) {
}
}
アナログ入力が、Arduinoのようなint値じゃなく、
0.0~1.0の間のfloat型なのを知らずに、さいしょ、
int型の配列に入れちゃって、波形が拾えずに四苦八苦。
(コメント文とかながめると、まだその名残がある)
とりあえず、動くところまで分ったので、今日はここまで。
https://twitter.com/RetroComPeople/status/771682874705580033
すごい。33年越しのバグ解明。
それにしても、FDD4ドライブって、なんとブルジョアな!
https://twitter.com/otoyanblog/status/770664977413713920
なぜこれをプラモに…
https://twitter.com/Nabe_RMC/status/770954202277216257
日産は、安く買い叩いたつもりで、けっこう高すぎる
買い物しちゃったんじゃないかな。
https://twitter.com/izayoi_0512/status/416523648153821184
かぐや姫。
http://jbpress.ismedia.jp/articles/-/47762
あぁ。こういうタイプ、いるんだよな。処理能力は
確かにあるのかも知れないけど、その人の周囲から、
どんどん人材が流出しちゃうパターン。
https://twitter.com/kmoriyama/status/771379143892054016
ロボットがまだ要介護レベル。わかる気がする。
https://twitter.com/longjie0723/status/771888062158647296
三権分立を習わなかったか、理解できてない人たち
の集まりだからな。トップの例の発言もあったしな。
そのうち、詭弁使って、
「立法、行政、司法を集約・融合して、
より効率的な政治に!!」
なんていいだすんじゃね?