++C++; // 未確認飛行 C 避けて通れない「非同期処理」を克服しよう

Top総合 目次ディジタル信号処理

フーリエ級数展開

このエントリーをはてなブックマークに追加

目次

キーワード

概要

フーリエ級数展開の基本となる概念は19世紀の前半にフランスの数学者 フーリエ(Fourier、1764-1830)が熱伝導問題の解析の過程で考え出したものです。 そして、その基本アイディアは「任意の周期関数は三角関数の和で表される」というものです。

フーリエ級数展開(および、フーリエ変換)について詳細に説明しようとすると、それだけで本が1冊書けるほどになってしまいます。 そのため、ディジタル信号処理などの工学的な応用に必要になる部分に絞って説明していきたいと思います。

基本アイディア

フーリエは「任意の周期関数は三角関数の和で表される」という仮定の下で、 周期関数を三角関数を使って級数展開する方法(フーリエ級数展開と呼ばれています)を考案しました。 すなわち、周期Tの関数f(t)

f(t) = a0
n=1
( ancos
2πnt
T
+ bnsin
2πnt
T
)

というように、三角関数の和で表すことができると主張し、 係数an, bnを求める方法を導き出したわけです。

もちろん、厳密には「任意の周期関数は三角関数の和で表される」という仮定が正しいかどうかをまず議論する必要がありますが、この議論には少し難しい知識が必要とされます。 一方、厳密な議論は後回しにして、とりあえずこの仮定が正しいとした上で話を進めるなら、高校レベルの知識でも十分に理解できます。 また、工学的な応用に用いる限りには厳密な議論は後回しにしても全く差し支えありません。

実際、歴史的にも、厳密な議論よりも物理学への応用が先になされ、 その後から「任意の周期関数は三角関数の和で表される」という仮定に関する厳密な議論が行なわれました。

以上のことから、ここでは厳密な議論は抜きにして(知りたい人は専門書を読んで自分で勉強してもらうものとして)説明していきます。

三角関数の直交性

三角関数の性質として、任意の自然数m, nに対して以下の式が成り立つというものがあります。

 π
 
-π
sin (mt) dt = 0
 π
 
-π
cos (mt) dt = 0
 π
 
-π
sin (mt) sin (nt) dt = {
π  (m = n のとき)
0  (m ≠ n のとき)
 π
 
-π
cos (mt) cos (nt) dt = {
π  (m = n のとき)
0  (m ≠ n のとき)
 π
 
-π
sin (mt) cos (nt) dt = 0

すなわち、三角関数の積分値は、 sinどうし、またはcosどうしを掛けた物で、 m = nの場合にのみ非0となり、 その他の場合には必ず0になります。 このような性質は三角関数の直交性と呼ばれています。

フーリエ級数展開

説明を単純化するため、まずは周期の関数に絞って説明していきたいと思います。 このとき、 「基本アイディア」 で示した式は以下のようになります。

f(t) = a0
n=1
( ancos nt + bnsin nt )

三角関数の直交性」 で示した式から、この両辺を-π~πの範囲で積分すると、a0の項だけが残ります。

 π
 
-π
f(t)dt =
 π
 
-π
a0dt = 2π a0

同様に、 両辺にcos(nt) を掛けてから積分するとamの項だけが、 sin(nt) を掛けてから積分するとbmの項だけがのこります。

 π
 
-π
f(t)cos(nt)dt =
 π
 
-π
amcos2(nt)dt = π an
 π
 
-π
f(t)sin(nt)dt =
 π
 
-π
bmsin2(nt)dt = π bn

したがって、以下の計算式で係数an, bnを計算できます。

a0
1
 π
 
-π
f(t)dt
an
1
π
 π
 
-π
f(t)cos(nt)dt
bn
1
π
 π
 
-π
f(t)sin(nt)dt

このようにして得られた級数 f(t) = a0

n=1
( ancos t + bnsin t ) をフーリエ級数、係数an, bnをフーリエ係数などといいます。 また、このように、周期関数をフーリエ級数に展開することをフーリエ級数展開といいます。

周期T以外の関数に関しては、変数t

2πt
T
で置き換えることにより、

a0
1
T
 T/2
 
-T/2
f(t)dt
an
2
T
 T/2
 
-T/2
f(t)cos(
2πnt
T
)dt
bn
2
T
 T/2
 
-T/2
f(t)sin(
2πnt
T
)dt
f(t) = a0
n=1
( ancos
2πnt
T
+ bnsin
2πnt
T
)

となる。

複素形フーリエ級数展開

三角関数と指数関数の間には、

e ixcosx + i sinx
cosx =
eixe-ix
2
sinx =
eixe-ix
2i

という関係式があります。 この関係式を用いて、先ほどのフーリエ級数展開の式を以下のように書き換えることが出来ます。

cn
1
T
 T/2
 
-T/2
f(t)exp(-i
2πnt
T
)dt
f(t) =
n=-∞
cnexp( i
2πnt
T
)

この式を複素形フーリエ級数展開、係数cnを複素フーリエ係数などと呼びます。 (フーリエ級数展開という呼称で複素形の方をさす場合もあります。) 複素形では、複素数が出てきてしまう代わりに、式をシンプルに書き表すことが出来ます。

ちなみに、この係数cnと先ほどの係数an, bnとの間には、以下のような関係が成り立っています。

c0 = a0
cn
an - i bn
2
c-n
an + i bn
2

また、この係数cnを、整数から複素数への写像(離散関数)とみなしてF[n]と書き表すこともあります。

F[n]
1
T
 T/2
 
-T/2
f(t)exp(-i
2πnt
T
)dt
f(t) =
n=-∞
F[n]exp( i
2πnt
T
)

以後、特に断りのない限り、 f(t)のように()付き表記の関数は連続関数を、 f[n]のように[]付き表記の関数は離散関数を表すものとします。

フーリエ級数展開の例

いくつか、フーリエ級数展開の例を挙げます。

矩形波

以下のような周期関数のフーリエ変換を考えてみましょう。

f(t){
-1  (π≦x<0)
1  (0≦x<π)
, f(t+2π) = f(t)

この周期関数で表されるような信号は(周期πの)矩形波と呼ばれ、下図のような波形を示します。

図1: 矩形波の波形

矩形波のフーリエ係数は以下のようになります。

an
1
π
 π
 
-π
f(t)cos(nt)dt = 0
bn
1
π
 π
 
-π
f(t)sin(nt)dt =
2
π
 π
 
0
sin(nt)dt = {
4
π n
  
(nが奇数)
0  (nが偶数)

したがって、矩形波のフーリエ級数展開は以下のようになります。

f(t)
4
π
k=0
1
2k + 1
sin(2k + 1)t

この式は無限級数になっていますが、 実用上は級数を途中までで打ち切って近似式として利用します(フーリエ級数近似)。

f(t)
4
π
K
k=0
1
2k + 1
sin(2k + 1)t

K の値が大きいほど近似の精度は高くなりますが、 計算手間が増大します。 以下にK = 0, 1, 3, 7, 15の場合のフーリエ級数近似の1周期分のグラフを示します。

図2: 矩形波のフーリエ級数近似

鋸波

以下の周期関数で表される信号を(周期πの)鋸(のこぎり)波と呼びます。

f(t) = t, f(t+2π) = f(t)

図3: 鋸波の波形

鋸波のフーリエ係数は以下のようになります。

an
1
π
 π
 
-π
t cos(nt)dt = 0
bn
1
π
 π
 
-π
t sin(nt)dt =
1
π
[ -x
cos(nx)
n
]
π
 
-π
1
π
 π
 
-π
cos(nx)
n
dt = (-1)n+1
2
π

したがって、鋸波のフーリエ級数近似式は以下のようになります。

f(t)
N
n=0
(-1)n+1
2
n
sin(nt)

以下にN = 1, 3, 7, 15, 31の場合のフーリエ級数近似の1周期分のグラフを示します。

図4: 矩形波のフーリエ級数近似

インパルス列

以下の周期関数で表される信号を(周期πの)インパルス列と呼びます。

f(t) = δ(t), f(t+2π) = f(t)

図5: インパルス列

δ関数の性質から、インパルス列の複素形フーリエ係数は全て1となり、 フーリエ級数近似式は以下のようになります。

f(t)
N
n=-N
exp(-i n t) = 1+
N
n=0
2 cos(n t)

以下にN = 1, 3, 7, 15, 31の場合のフーリエ級数近似の1周期分のグラフを示します。

図6: 矩形波のフーリエ級数近似

まとめ

表1: フーリエ級数展開の公式

フーリエ級数展開
a0
1
 π
 
-π
f(t)dt
an
1
π
 π
 
-π
f(t)cos(nt)dt
bn
1
π
 π
 
-π
f(t)sin(nt)dt
f(t) = a0
n=1
( ancos nt + bnsin nt )
フーリエ級数展開(複素形)
cn
1
T
 T/2
 
-T/2
f(t)exp(-i
2πnt
T
)dt
f(t) =
n=-∞
cnexp( i
2πnt
T
)

[お問い合わせ](q)