- ベストアンサー
デルタ関数のフーリエ変換
デルタ関数をフーリエ変換するプログラムを作成したいと思っています。 フーリエ変換自体のプログラムは出来上がりました。(いくつかの計算例で確認しました。) そこで質問ですが、デルタ関数はどのように入力すれば良いのでしょうか? F( 1 )=大きな数字、 F( 2 以降) =0 でしょうか? デルタ関数をフーリエ変換すると、『1』になるのを確認したいと思っています。 プログラム言語は『Fortran』を使用しています。 以上、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
本物のデルタ関数は入力できません。 巾と高さの積が1になる擬似デルタ関数をいろいろ作って 変換してみるのがおもしろいと思いますよ。 擬似デルタ関数と離散フーリエ変換では予想と違うものが 計算されると思います。
その他の回答 (1)
- stomachman
- ベストアンサー率57% (1014/1775)
「フーリエ変換」と一口に仰るけれども、(Mathematicaのような数式処理プログラムなら話は別ですが)Fortranで書いた数値計算プログラムが周期のない連続関数(たとえばf(x)=exp(-(x^2))))をフーリエ変換できる筈がありませんよね。そのプログラム(DFT: discreet Fourier transform)で扱えるのは、「周期関数をサンプリングしたもの」だけです。 「周期関数」ってのは、入力する関数がたとえばF(1), F(2), …, F(1024)でおしまいであって、その前(F(0), F(-1), …)も後(F(1025), F(1026), …)も与えられていないということ。その数学的な意味は、「F(m)のmはどんな整数でもいいのだけれど、周期を持っていて F(m) = F(m+1024) という関係を満たす。なので、F(1), F(2), …, F(1024)を指定すれば全部決まる」ということです。 また「サンプリングしたもの」というのは、入力が連続関数ではないということ。F(1), F(2), …の値は与えられているが、その中間、たとえばF(√2)が幾らなのか、ということは与えられていない、ってことです。これを数学的に表すと、入力関数は実は無限個のδ関数の和 f(x) = Σ{n=-∞~∞} F(n)δ(x - 2π(n-1)/1024) に他ならない。δ関数の中心の位置が一定間隔(2π/1024)で並んでいる訳です。 このとき、f(x)のフーリエ変換 g(ω) = ∫{x=-∞~∞) f(x) exp(-2πiωx) dx (iは虚数単位) もまた、 g(ω) = Σ{n=-∞~∞} G(n)δ(ω - 2π(n-1)/1024) というδ関数の和になり、G(n) = G(n+1024)という周期を持つ。(証明するのはなかなか大変ですが。)で、ご質問のプログラムが計算するのはこのG(n)の値です。 というわけで、「デルタ関数を入力する」のに最も近いことをやるには、 F(1)=1, F(2)~F(1024)=0 とする。ただしこれで作れる関数f(x)は f(x) = Σ{N=-∞~∞} δ(x - 2πN) という、2πの周期を持つ周期関数であって、本物のδ関数ではない。なので、g(ω)は定数(これは連続関数)にはならず、上記の通りδ関数の和になります。そして、その係数G(n)がどのnについても同じ値になる。 やってみれば、これが確認できることでしょう。(ってか、何でまだやってないの?) なお、この計算の場合にはF(n), G(n)の虚数成分はすべて0だけれども、一般にはF(n), G(n)はどっちも複素数であることにご注意。
お礼
回答ありがとうございました。 参考になりました。
お礼
回答ありがとうございました。 早速、計算してみようと思います。