マイクに音を入力しarduinoで音の高低を調べるためのプログラムを作成しました。
intens[]に音の高さごとに数値が入り、ある高さの成分が大きければその数値が大きくなるというプログラムにしたつもりですが、どうでしょうか?アドバイス等あればよろしくお願いします。
double a[9], b[9], v[9], intens[9];
int data[512];//512個のデータを取る
int MAX =512;
int T;
double theta;
void setup() {
Serial.begin(9600);// シリアル通信の初期化
for(int i=0;i<MAX;i++){
intens[i]=0.0;
}
}
void loop() {
for(int i=0;i<MAX;i++){
data[i]=analogRead(1);//マイクからの入力をdata[]に代入
}
for (int idx = 0, T = MAX; T >= 2; T /= 2,idx++) {
a[idx] = b[idx] = v[idx] = 0.0;
for (int i = 0; i < MAX; i++) {
theta = 2.0 * M_PI * (double)i / (double)T;
a[idx] += sin(theta) * data[i];
b[idx] += cos(theta) * data[i];
v[idx] += data[i] * data[i];
}
v[idx] = sqrt(v[idx]);
a[idx] /= v[idx];
b[idx] /= v[idx];
intens[idx] = sqrt(a[idx] * a[idx] + b[idx] * b[idx]);
Serial.println(intens[idx]);//intens[]の中身を表示 }
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。