東北工業大学 工学部情報通信工学科 中川研究室


離散フーリエ変換(DFT)

プリプロセッサ #include <stdio.h> ← 入出力 scanf, printfを使うため #include <math.h> ← 数学関数 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 ); ←得られた結果を出力
}
}
でも、データが多い時とか、やり直すたびに手入力ではやってられないよね。
データファイルを開いて、そこから読めるようにならないとね。

中川研HOME