DTFT は無限長の非周期性時時間領域ディジタル信号に対する演算ですが、実際にはその様な信号をコンピュータで扱うのは不可能ですので、今回は時刻 $i < 0$ で $f[i]=0$、かつ有限の正整数 $\textrm{N}$ に対して $f[0]$から$f[\textrm{N}-1]$まで値が入っていて、残りは全て $f[i]=0, (i=\textrm{N},\textrm{N}+1,\cdots)$ である時間領域ディジタル信号

\[ \cdots, 0, f[0], f[1], f[2], \cdots, f[\textrm{N}-1], 0, \cdots \]

に対する DTFT をプログラミングで求めます。

この場合の DTFT は次の様になります。

有限長の時間領域ディジタル信号に対する DTFT \[ \textrm{F}(w) = \sum_{i=0}^{\text{N}-1} \left \{ f[i] \cdot \textrm{e}^{\{-j \cdot i \cdot w \cdot \tau \}} \right \} \]

$f[i]$ ・・・ 長さ $\text{N}$ の時間領域ディジタル信号

$\tau$ [秒] ・・・ サンプリング間隔

次にDFTのプログラミングの時と同様、$\textrm{F}(w)$ を

\[ \textrm{F}(w) = \textrm{A}(w) + \textrm{B}(w) \cdot j \]

の様に実数成分 $\textrm{A}(w)$ と虚数成分 $\textrm{B}(w)$ に分けます。

※ DFT の時の引数 $k$ は整数でしたが角周波数 $w$ は実数であることに注意

するとオイラー公式より $\textrm{A}(w)$ と $\textrm{B}(w)$ は次の様になります。

$\textrm{A}(w)$ と $\textrm{B}(w)$ の求め方 \begin{align*} \textrm{A}(w) &= \sum_{i=0}^{\textrm{N}-1} \left \{ f[i] \cdot \cos( i \cdot w \cdot \tau ) \right \} \\[10pt] \textrm{B}(w) &= -\sum_{i=0}^{\textrm{N}-1} \left \{ f[i] \cdot \sin( i \cdot w \cdot \tau ) \right \} \end{align*}

このようにすると DTFT の演算中に複素数が含まれなくなるので簡単に $\textrm{A}(w)$ と $\textrm{B}(w)$ を求められます。

また次の様にして $\textrm{F}(w)$ の絶対値 $|\textrm{F}(w)|$ と偏角 $\angle \ \textrm{F}(w)$ も簡単に求められます。

絶対値と偏角の求め方 \[ |\textrm{F}(w)| = \textrm{sqrt}(\textrm{A}(w)*\textrm{A}(w) + \textrm{B}(w)*\textrm{B}(w)) \] \[ \angle \ \textrm{F}(w) = \textrm{atan2}(\textrm{B}(w),\textrm{A}(w)) \]

※ プログラミング言語によっては $\textrm{atan2}(\textrm{A}(w),\textrm{B}(w))$ の順の場合もあります