■ フーリエ解析(18): 高速フーリエ変換を体験しよう (JavaScript版)

 関数 f(t)の離散フーリエ変換(DFT)、離散フーリエ逆変換(IDFT)は次式で定義されます。
  F (k) = n=0N-1 f (n)W nk

  f (n) = (1/N)k=0N-1 F (k)W -nk

  ここで、 W = e-j2π/N

 離散フーリエ変換、離散フーリエ逆変換ではデータ量 N が大きくなると計算量も膨大となります。 そこで、通常は離散フーリエ変換の高速演算法である高速フーリエ変換(Fast Fourier Transform:FFT)を用います。

 FFT はDFTの計算アルゴリズムの規則性をうまく利用することによって演算回数の大幅な削減を図っています。 ただし、FFTではデータ量 N が2のべき(N = 2i = 2, 4, 8, ..)である必要があります。

 次のアプリは、各種関数や疑似音声データを1次元信号 f(t) [ t = 0, 1, 2, .., N-1 ]と考えて、FFT および IFFT(高速フーリエ逆変換: Inverse FFT)を行って結果を表示するものです。 演算時間の比較のため、通常のフーリエ変換(DFT、IDFT)での計算もできます。

・グラフでは、F(k)の実数部が青、虚数部が緑、絶対値(振幅スペクトル)が赤で表示されます。
・「任意折線」、「任意曲線」を選択した場合は通過点を左から順にクリックして入力します(但し、長方形領域内)。
  また、grid入力モードをONにすると、最も近いgrid点が入力されます。
・疑似音声データ1、2はその都度、乱数を用いて生成されます。
・逆変換次数Mとして、データ数Nより小さい値を指定すると高周波成分がカットされた波形が得られます(ローパスフィルタ)。
・「フーリエ解析(17): 1次元離散フーリエ変換を体験しよう」と表示形式が異なります。
・通常のフーリエ変換でデータ数Nが大きい場合は若干計算に時間がかかります。
  変換結果が表示されるまで待って下さい。

矩形波 3角波 ノコギリ波 台形波 半楕円波 正弦波
任意折線 任意曲線 音声データ 1 音声データ 2 .   grid入力
データ数 N 逆変換次数 M 高速フーリエ変換   
通常フーリエ変換   


[参考文献]
 1.Wikipedia:高速フーリエ変換
 2.末松良一、他: 画像処理工学、コロナ社(2001)

ホーム