DFTとFFT
これからフーリエ変換について学ぶ。
サンプリングされた信号のフーリエ変換はDFT(離散フーリエ変換)と呼ばれ、以下の式で計算することができる。
変換
[式1]
逆変換
[式2]
フーリエ変換をして得た数列を、再度逆フーリエ変換すると、元の信号に戻る。
もしこの計算の結果、x(n)=y(n)になれば、デジタルフーリエ変換し、逆変換すると元の信号に戻ることになる。
以下では scilabを使って、このようにフーリエ変換した結果を再度逆フーリエ変換すると、元の信号に戻ることを確認しよう。
scilabによるフーリエ変換
X(k)のかわりに xxと書くことにする。
xx=fft(x,-1);
注意: xx, yの添え字は1から始まるので、数式とは添え字が1ずれる。
scilabによる逆フーリエ変換
y=fft(xx,1);
注意: xx, yの添え字は1から始まるので、数式とは添え字が1ずれる。
フーリエ変換と逆フーリエ変換の実験
まず適当な数列を作り、それをフーリエ変換して、逆フーリエ変換し、元の数列に戻るかを確認してみよう。
x 元の数列 xx フーリエ変換の結果 y xxを逆フーリエ変換した結果 とする。3行目で、x(111)~x(115)に適当な数列を入れている。
w=101:130;
x(44100)=0;
x(111:115)=[0.7,-0.3,0.5,0.8,-0.4]';
xx=fft(x,-1);
y=fft(xx,1);
xとyが同じかどうかを確認しよう。以下は1行づつ実行する。1行目ではx, 2行目ではyがプロットされる。3行目では比較のために, yを +1 上にプロットしているが、完全に同じ波形が再現されていることがわかる。
plot2d(w,x(w));
plot2d(w,y(w));
plot2d(w,[x(w)';y(w)'+1]');
以下のように数値を比べてみても、誤差は非常に小さいことがわかる。
x(110:120)
y(110:120)
逆フーリエ変換の誤差は、純粋に計算誤差だけだ。計算精度を上げれば、逆フーリエ変換の結果を限りなく元の値に近づけることができる。