プリプロセッサ |
#include ← 入出力 scanf, printfを使うため
#include ← 数学関数 sin , cos を使うため
#define PI 3.14159265 ← 円周率には PIという名前を付けておく
#define KOSU 24 ← 24個で1周期のデータのとき
|
型宣言 |
void main(){
int m, k;
float f[KOSU], a, b, ang; ← 配列 f[0] 〜 f[ KOSU-1 ] を準備
|
データ入力 (手動) |
-
-
for ( k=0; k<KOSU; k++ ){
-
scanf("%f", &f[k] ); ← キーボードからの入力
}
|
DFT |
for ( m=0; m<=KOSU/2; m++ ){
|
|
-
-
a = 0.0;
b = 0.0;
for ( k=0; k<KOSU; k++ ){
-
ang = 2 * PI * m * k /KOSU;     ←角度 (aとbに2回使うので)
a = a + f[k] * cos( ang );
b = b + f[k] * sin( ang );
}
-
a = a * 2 /KOSU;
b = b * 2 /KOSU;
if( m == 0 || m == KOSU/2)} ←m = 0 または m=KOSU/2の時は特別
-
a = a/2;
b = b/2;
}
|
|
-
p = a* a + b* b; ←振幅を2乗するとパワーが求められます
printf("m= %d a= %f b= %f power= %f \n", m, a, b, p ); ←得られた結果を出力
}
}
でも、データが多い時とか、やり直すたびに手入力ではやってられないよね。
データファイルを開いて、そこから読めるようにならないとね。
|
|