プログラミングで DFT / IDFT を計算する際は通常はFFT (Fast Fourier Transform : 高速フーリエ変換) と IFFT (逆高速フーリエ変換) を利用します。
ただし、どうしても FFT /IFFT を使いたくない場合は
の様に DFT 係数を実数成分 A[k] と虚数成分 B[k] に分けてプログラミングすると楽です。
オイラー公式を使うと A[k] と B[k] は次の様になります。
ここで
f[i] ・・・ 周期 N [点] の周期性時間領域ディジタル信号
A[k] ・・・k 番目のDFT係数の実数成分、実数の定数
B[k] ・・・k 番目のDFT係数の虚数成分、実数の定数
このようにすると DFT の演算中に複素数が含まれなくなるので、普通に外側が k、内側が i の 2 重 for ループを作って A[k] と B[k] を求められます。
また次の様にして DFT 係数の絶対値と偏角も簡単に求められます。
※ プログラミング言語によっては atan2(A[k],B[k]) の順の場合もあります
同様に IDFT を A[k] と B[k] を使って書き直すと次のようになります。
ここで
f[i] ・・・ 周期 N [点] の周期性時間領域ディジタル信号
A[k] ・・・k 番目のDFT係数の実数成分、実数の定数
B[k] ・・・k 番目のDFT係数の虚数成分、実数の定数
この場合は外側が i、内側が k の 2 重 for ループを作って A[k] と B[k] から f[i] を復元できます。
f[i]が複素信号、つまり
f[i]=a[i]+j⋅b[i]の場合のDFTは次のようになります
ここで
a[i] ・・・ 周期 N [点] の周期性時間領域複素ディジタル信号 f[i] の実数成分
b[i] ・・・ 周期 N [点] の周期性時間領域複素ディジタル信号 f[i] の虚数成分
A[k] ・・・k 番目のDFT係数の実数成分、実数の定数
B[k] ・・・k 番目のDFT係数の虚数成分、実数の定数
IDFTは次の通りです。
ここで
a[i] ・・・ 周期 N [点] の周期性時間領域複素ディジタル信号 f[i] の実数成分
b[i] ・・・ 周期 N [点] の周期性時間領域複素ディジタル信号 f[i] の虚数成分
A[k] ・・・k 番目のDFT係数の実数成分、実数の定数
B[k] ・・・k 番目のDFT係数の虚数成分、実数の定数