フーリエ変換はさまざまな場面で出会うことになる. 地震の波形解析, 気候変動の解析, 地層の縞の解析などが典型的な例である. 今週と来週は離散データをフーリエ変換する手法を学ぶ. 今週は離散フーリエ変換のアルゴリズムを作成し, 来週はそれを用いる際の注意点および応用を学ぶ.
時間の関数h(t)が与えられたとしよう. h(t)のフーリエ変換, その逆変換は次式で与えられる. (注:一般には2πfではなくてωが用いられるが, ここでは計算の便利のため2πfを使う)
![]() |
(1) |
![]() |
(2) |
フーリエ変換を行うと関数h(t)は関数H(f)に変換される. H(f)は一般に複素数となる. その絶対値の二乗は, 周波数f〜f+dfに含まれるパワーになる. したがって, フーリエ変換すると, どの周波数成分が卓越しているかが分かる事になる. また,h(t)が実数の場合はH(-f)=H(f)*(H(f)の複素共役)となることに注意.
以下でフーリエ変換を議論するときは, 次の形式でデルタ関数を書いておくと都合がよい.
![]() |
(3) |
式(3)を用い, 式(1)から逆変換の式(2)を導け.
我々が得るデータは普通離散データである. この場合, 一定の時間間隔Δtで物理量が計測される. 次の時刻tnについてN個のデータが得られているとしよう.
![]() |
(4) |
Δtについて, ナイキストの臨界周波数という次式で定義される周波数が存在する.
![]() |
(5) |
ナイキストの臨界周波数がなぜ重要かというと, この周波数以上の成分は正しくフーリエ変換されないためである. このため, 離散フーリエ変換をする時の周波数の上限が決まる.
ナイキストの臨界周波数の存在から, 離散フーリエ変換を行った場合に我々が得ることのできるフーリエ変換成分は-fcからfcまでであることが分かった. データがN個あるものとすると, このデータから得られるフーリエ変換成分もたかだかN個しかない. そこで次の値についてフーリエ変換を求めることにしよう.
![]() |
(6) |
式(1)を和で置き換えると以下のようになる.
![]() |
![]() |
![]() |
|
![]() |
![]() |
(7) |
![]() |
(8) |
上の問題から, H-n=HN-nであることが分かる. もともと式(4 )においてnは-N/2からN/2まで変化していたが, 0からN-1まで変化させることにしよう. こうすると, 0からN/2までは周波数0からfcまで対応し, N/2からN-1までは周波数-fcから-1/NΔtまでが対応することになる. すると最終的に求めるべき離散フーリエ変換は次式となる.
![]() |
(9) |
![]() |
(10) |
また, 離散逆フーリエ変換は次式で与えられる.
![]() |
(11) |
![]() |
![]() |
![]() |
|
![]() |
![]() |
(12) |
1)式(9)を元に, 離散フーリエ変換を行うアルゴリズムを作成せよ. もとのデータは実数とする.
2)式(11)を元に, 離散フーリエ変換の結果を逆変換するアルゴリズムを作成せよ.
このセクションでは,作成したプログラムを用いて,様々な関数の離散フーリエ変換を行う.
このデータは,時間間隔 0.209439(=2π/30),時間領域 0< t < 2π において定数関数h(t)=1のデータである.データ数は30である.このデータをセーブしてgnupotでグラフを作成せよ.離散フーリエ変換を行い
h(t)=cos(t)のデータは,時間間隔 0.209439(=2π/30),時間領域 0< t < 2π においてcos(t)の値を出力したものである.データ数は30である.このデータをセーブしてgnupotでグラフを作成せよ.離散フーリエ変換を行い
次に,sin(t)から位相がずれてsin(t+Δ)となっている場合の離散フーリエ変換をおこなってみよ. h(t)=sin(t+Δ)のデータは,先ほどと同じ時間間隔,時間範囲においてsin(t+Δ)の値を出力したものである.
データ1は,h(t)=sin(20t)を時間間隔 0.209439(=2π/30)でサンプリングしたものである.この場合のナイキストの臨界周波数は,fc=1/2Δt=15/2πとなる.sin(20t)の周波数は20/2πであるので臨界周波数よりも大きい.このデータの離散フーリエ変換を行い,どの周波数が強くなっているか確認せよ.またデータ2は,h(t)=sin(50t)をサンプリングしたものである.gnuplotでデータ1と重ねてプロットしてみよ.
離散フーリエ変換は当然有限の時間範囲のデータを取り扱うことになる.ここ から引き起こされる現象を確認する.次の二つのデータは,時間間隔 Δ t=0.209439(=2π/30)で0&le t&le 999*Δtの範囲の1000個のサンプルである.一方は初めの10個が1,残りすべては0であり,もう一方は初めの100個が1で残りはゼロである.
先ほどと同じ時間間隔,時間範囲でh(t)=1/tのグラフを100*Δtまでサンプルしたものと10*Δtまでサンプルしたものをそれぞれ離散フーリエ変換し,その結果を比較せよ.この結果から,サンプリングする時間範囲を長くすればするほどリップルの効果が小さくなることが分かる.
実際に得られたデータのフーリエ変換を行ってみる.データに含まれている強い波の周期を読みとってみよ.