フーリエ変換はさまざまな場面で出会うことになる. 地震の波形解析, 気候変動の解析, 地層の縞の解析などが典型的な例である. 今週と来週は離散データをフーリエ変換する手法を学ぶ. 今週は離散フーリエ変換のアルゴリズムを作成し, 来週はそれを用いる際の注意点および応用を学ぶ.
時間の関数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) |
我々が得るデータは普通離散データである. この場合, 一定の時間間隔Δtで物理量が計測される. 次の時刻tnについてN個のデータが得られているとしよう.
![]() |
(4) |
Δtについて, ナイキストの臨界周波数という次式で定義される周波数が存在する.
![]() |
(5) |
ナイキストの臨界周波数がなぜ重要かというと, この周波数以上の成分は正しくフーリエ変換されないためである. このため, 離散フーリエ変換をする時の周波数の上限が決まる.
ナイキストの臨界周波数の存在から, 離散フーリエ変換を行った場合に我々が得ることのできるフーリエ変換成分は-fcからfcまでであることが分かった. データがN個あるものとすると, このデータから得られるフーリエ変換成分もたかだかN個しかない. そこで次の周波数についてフーリエ変換を求めることにしよう.
![]() |
(6) |
式(1)を和で置き換えると以下のようになる.
![]() |
![]() |
![]() |
|
![]() |
![]() |
(7) |
![]() |
(8) |
上の問題から, H-n=HN-nであることが分かる. 0からN/2までは周波数0からfcまで対応し, N/2からN-1までは周波数-fcから-1/NΔtまでが対応することになる. すると最終的に求めるべき離散フーリエ変換は次式となる.
![]() |
(9) |
![]() |
(10) |
また, 離散逆フーリエ変換は次式で与えられる.
![]() |
(11) |
![]() |
![]() |
![]() |
|
![]() |
![]() |
(12) |
このデータは,時間間隔Δt=0.209439(=2π/30),時間領域 0< t < 2π において定数関数h(t)=1のデータである.データ数は30である.このデータをセーブしてgnupotでグラフを作成せよ.
式(9)を元に, 離散フーリエ変換を行うプログラムを作成せよ. 結果のファイルに,周波数f (式6),パワー(実部**2+虚部**2), 実部,虚部 と並べて出力すること.上のデータを用いて離散フーリエ変換を行ってみよ.
どの周波数のパワーが強くなっているかをgnuplot でプロットすることによりそれぞれ確認せよ.
式(11)を元に, 離散フーリエ変換の結果を逆変換するプログラムを作成せよ. 結果のファイルに,時間,離散逆フーリエ変換成分の実部,虚部 と並べて出力すること.
このデータは,cos(t) ( t=kΔt, Δt=2π/N, N=30, 0&le k &le 29)の値を出力したものである.データ数は30である.このデータをセーブしてgnupotでグラフを作成せよ.離散フーリエ変換を行い
また, sin(t) ( t=kΔt, Δt=2π/N, N=30, 0&le k &le 29)のデータについても行うこと.これらの結果から,cos関数のフーリエ成分は実部に値をもち,sin関数の場合は虚部に値を持つことがわかる.
次に,sin(t)から位相がずれてsin(t+Δ) (t=kΔt, Δt=2π/N, N=30, 0&le k &le 29)となっている場合の離散フーリエ変換をおこなってみよ.
離散フーリエ変換においてΔtとNを変化させるとどうなるだろうか. データ4 は,Δt=2.09439(=2π/3)で 0&le t&le 10Δtでh(t)=1.,11Δt&le t&le 99Δtでh(t)=0.となっているデータである.データ5は,Δt=2.09439(=2π/3)で 0&le t&le 10Δtでh(t)=1.,11Δt&le t&le 49Δtでh(t)=0.である.どちらも矩形の関数でΔtは同一であるが,データの総数に違いがある.データ4のデータ数は100,データ5では50である.
データ6は,Δt=1.04719(=2π/6)で 0&le t&le 20Δtでh(t)=1.,21Δt&le t&le 199Δtでh(t)=0.となっているデータである.つまり,データ1と比べるとΔtが1/2となっていてデータ総数は二倍となっている.
実際に得られたデータのフーリエ変換を行ってみる.データに含まれている強い波の周期を読みとってみよ.