ハンダ付け作業台、4980円 |
もちろん(と威張って言うことではないのですが)自分では書けないので、あちこちで公開されているライブラリを漁ってみたのですが…私の目的に一番フィットしていたのがこれでした。
Modified 8bit FFT in c
Webに貼ってあるfix_fft.hとfix_fft.cppをテキストにしてArduinoライブラリフォルダに入れておく。それからArduino IDEを起動しSketchで以下のようなコードを実行(「マイコンボードへの書き込みが完了しました」という表示が出たところで、すぐにツール>シリアルモニタを開き、ボーレートが違っていたら57600に設定する)すると、意図したようなスペクトル数列が得られました。
#include <fix_fft.h>
char im[128];
char data[128];
char buf[20];
void setup() {
Serial.begin(57600);
}
void loop(){
int i;
char buf[6];
for (i = 0; i < 128; i++) {
// data[i] = (i % 16) * 16 - 120; // 三角波
// data[i] = (((i >> 4) & 1) * 255) - 128; // 方形波
// 2つの正弦波を合成した波形
float d = (float)i * (PI * 2.00) / 128.00; // ラジアンへ変換:dは0〜2pi
float f = (sin(d * 2.00) * 0.66 + sin(d * 30.00) * 0.33) * 127.00; // 2fと30fの正弦波
data[i] = f;
// 虚数部をクリア
im[i] = 0;
}
Serial.println("");
dispData("Source : ", data, 128);
Serial.println("");
fix_fft(data, im, 7, 0); // full scale 2^7=128, FFT mode
for (i = 0; i < 64; i++) {
data[i] = sqrt(data[i] * data[i] + im[i] * im[i]);
}
dispData("Results : ", data, 64);
Serial.println("");
while(1) ;
}
void dispData(char *inMsg, char *inData, int inN) {
Serial.print(inMsg);
for (int i = 0; i < inN; i++) {
sprintf(buf, "%5d", inData[i]);
Serial.print(buf);
}
}
よかった良かった。ここ数日これに睡眠時間を削られていたので、安眠できます。
…でも、中学生ぐらいからずっと欲しかったハンダ付け作業台が昨日Amazonから届いたので、やっぱり睡眠不足は続く予感:-)
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。