|
Calculus`FourierTransform`
Mathematica カーネルは,指数形の記号フーリエ(Fourier)変換および逆フーリエ変換のそれぞれを計算するためのFourierTransform関数,InverseFourierTransform関数を提供している.また,記号フーリエ正弦変換,記号フーリエ余弦変換と各々の逆変換を計算するものとして,FourierSinTransform,InverseFourierSinTransform,FourierCosTransform,InverseFourierCosTransformも提供している.本パッケージにはこれらのフーリエ変換に数値近似を与える関数が含まれている.さらに,フーリエ級数,フーリエ係数,離散時間フーリエ変換を求める関数およびこれらに対する数値関数も提供する.数値近似では,厳密解を求めようと試みずに,直接Mathematica の数値積分と和分を使用する.

フーリエ変換の数値近似を求める
パッケージをロードする.
In[1]:= <<Calculus`FourierTransform`
以下は, における についての のフーリエ変換に対する数値近似を与える.
In[2]:= NFourierTransform[Exp[-t^2]/(1 + Abs[t]), t, 1]
Out[2]= 
数値フーリエ変換関数は,NIntegrateオプションをサポートするだけでなく,FourierParametersオプションもサポートする.このオプションにより,フーリエ変換を定義するために使用されるさまざまな規約から必要なものを選択することができる.

FourierParameters設定のフーリエ変換に対する効果

FourierParameters設定のフーリエ正弦変換に対する効果

FourierParameters設定のフーリエ余弦変換に対する効果
フーリエ変換は,一般に問題を連続的な「時間領域」から連続的な「周波数領域」に変換するために使われる.フーリエ変換は,周期関数を指数関数あるいは三角関数の重合せとして表すフーリエ級数展開を連続的にしたものとして捉えられることがある.指数フーリエ級数展開および三角級数展開は関数FourierSeries,FourierTrigSeriesを使って求めることができる.指数級数の係数はFourierCoefficientを使い,三角級数の係数はFourierSinCoefficientとFourierCosCoefficientを使って求める.オプションFourierParameters -> a, b が指定されているなら,連続関数 はデフォルトの周期 ではなく周期 を持つものとして扱われる.

フーリエ係数と級数の計算
下は と に最も近い整数との差を示すプロットである.これは から までを基本周期とする周期関数である.
In[3]:= rndplt = Plot[t - Round[t], {t, -1.5, 1.5}]

Out[3]= 
これは,相関関数のフーリエ三角級数の一部を与える.相関関数は特異なので,その三角級数には正弦しか含まれない.
In[4]:= FourierTrigSeries[t, t, 3]
Out[4]= 
切り捨てられた級数のプロットは関数のプロットと類似している.
In[5]:= Plot[%, {t, -1.5, 1.5}]

Out[5]= 
上の2つのプロットを同軸上にプロットしたものである.
In[6]:= Show[rndplt, %]

Out[6]= 

FourierParameters設定のフーリエ指数係数に対する効果

FourierParameters設定のフーリエ指数級数に対する効果

FourierParameters設定のフーリエ余弦係数に対する効果

FourierParameters設定のフーリエ正弦係数に対する効果

FourierParameters設定のフーリエ三角級数に対する効果
厳密な係数も記号的な係数も必要ではないが,係数の数値近似は必要な場合があるであろう.このような場合は,フーリエ級数関数の数値的なバージョンを使用することができる.数値近似関数はFourierParametersオプションを取るので,周期を指定することができる.

フーリエ係数と級数の数値近似を求める
以下は, から の区間上の のように見える関数の三角級数の一部である.他の区間の関数は,周期 でこれをを繰り返すことで得られる.
In[7]:= NFourierTrigSeries[Sin[Cos[t + 1/2]], t, 3]
Out[7]= 
3周期上の三角多項式のプロットである.
In[8]:= Plot[%, {t, -1.5, 1.5}]

Out[8]= 
関数FourierCoefficientは指数フーリエ級数の係数を与えるもので,連続的な時間領域から離散的な周波数領域への変換として考えられる.同様に,(無限和の)指数フーリエ級数は離散的な周波数領域から連続的な時間領域への逆変換として考えられる.この2つの変換はそれぞれFourierCoefficientとInverseFourierCoefficientで与えられ,これらに対する数値はNFourierCoefficientとNInverseFourierCoefficientにより与えられる.オプションFourierParameters -> a, b が指定されていると,元の関数の周期はデフォルトの ではなく となる.

連続時間と離散周波数変換のペア:厳密値と数値近似
周期 の の周期関数のプロットである.
In[9]:= (f = 1 + 2 Cos[3 Pi t] + 2 Cos[6 Pi t]; Plot[f, {t, -1, 1}])

Out[9]= 
FourierParametersオプションを使って関数の周期を指定することができる.
In[10]:= Chop[Table[ NFourierCoefficient[f, t, n, FourierParameters -> {0, 3/2}, AccuracyGoal->8, PrecisionGoal->8], {n, -10, 10}]]
Out[10]= 
フーリエ係数の逆は元の周期関数を与える.
In[11]:= (nifc = Chop[Table[ {t, NInverseFourierCoefficient[If[-2 <= n <= 2, 0.816497, 0], n, t, FourierParameters -> {0, 3/2}]}, {t, -1, 1, 1/30}]]; ListPlot[nifc, PlotJoined->True])

Out[11]= 

FourierParameters設定のフーリエ係数に対する効果
離散的な時間領域から連続的な周波数領域へのフーリエ変換は,通常離散時間フーリエ変換あるいはDTFourierTransformと呼ばれる.連続的な周波数領域から離散的な時間域への逆変換はInverseDTFourierTransformによって与えられる.Z変換が離散化されたラプラス変換に相当するように,離散時間フーリエ変換は離散化された連続時間フーリエ変換に相当する.オプションFourierParameters -> a, b が指定されていると,離散時間フーリエ変換はデフォルト周期の ではなく となる.

離散時間と連続周波数の変換ペア:厳密値と数値近似
以下は を中心とする離散時間矩形関数のフーリエ変換を計算する.
In[12]:= dtft = DTFourierTransform[ Sum[DiscreteDelta[n+j], {j, -1, 1}], n, \[Omega]]
Out[12]= 
以下は3周期上の振幅スペクトルのプロットである.
In[13]:= Plot[Abs[dtft], {\[Omega], -1.5, 1.5}]

Out[13]= 
以下は, のときの離散時間フーリエ逆変換の数値近似である.
In[14]:= Chop[Table[ NInverseDTFourierTransform[dtft, \[Omega], n, AccuracyGoal->8, PrecisionGoal->8], {n, -5, 5}]]
Out[14]= 
指数フーリエ級数と離散時間フーリエ変換は,どちらかが時間あるいは周波数の役割を交換すれば,数学的に同等である.

FourierParameters設定の離散時間フーリエ変換に対する効果
|