C言語でフーリエ級数展開を実装したコードは、各行が信号処理の重要なステップを示しています。本記事では、先に紹介したサンプルコードを一つ一つ解説し、どのようにしてフーリエ係数を計算し信号を近似するのかを理解できるようにします。
ヘッダファイルのインクルード
#include <stdio.h>は標準入出力を使うために必要です。printfで結果を表示する際に必須です。
#include <math.h>は三角関数(sinやcos)を使用するために必要です。
定数定義
#define PI 3.14159265358979323846は円周率の定義です。三角関数計算に使います。
#define N 100はサンプル数、#define M 10は展開するフーリエ級数の項数を表しています。
メイン関数とサンプル信号生成
int main() { ... }はプログラムの開始点です。
double x[N];は入力信号を格納する配列、a0は直流成分、a[M], b[M]はフーリエ係数を格納する配列です。
次に、forループでx[n] = sin(2*PI*n/N);により、サンプル信号(正弦波)を生成しています。
フーリエ係数の計算
直流成分a0はfor(n=0;n<N;n++) a0+=x[n];で合計を取り、a0 = a0/N;で平均を計算します。
各項a_n, b_nはネストしたforループで計算されます。a[k-1] += x[n]*cos(2*PI*k*n/N);、b[k-1] += x[n]*sin(2*PI*k*n/N);で和を取り、最後に*2/Nで正規化します。
結果の表示
printf("a0 = %f\n", a0);で直流成分を表示し、forループで各係数a_n, b_nを出力します。
まとめ
このコードの各行は、フーリエ級数展開の計算手順を順に示しています。入力信号生成、係数計算、結果出力の流れを理解することで、C言語でのフーリエ解析の基礎を学べます。

コメント