++C++; // 未確認飛行 C++

Google
Web ufcpp.net

離散フーリエ変換

目次

キーワード

概要

アナログとディジタルの違いを大雑把に説明すると、

  • アナログは連続量を取り扱う
  • ディジタルは離散量を取り扱う

となります。

ここでは、連続関数と離散関数の間の関係および離散関数に対するフーリエ変換(離散フーリエ変換)について説明します。

周期関数のフーリエ変換

フーリエ変換」 では、 非周期関数を、「関数の周期TT→∞としたものである」とみなすことで、 を拡張し、フーリエ変換を導き出しました。 これとは逆、すなわち、フーリエ変換の式に周期関数を代入することでフーリエ級数展開の式を導き出すことを考えてみます。

それでは早速、周期Tを持つ関数、すなわち、f(t+T) = f(t)を満たす関数f(t)に対してフーリエ変換を行なってみましょう。

F(ω)
 ∞
 
-∞
f(t)exp(-iωt) dt =
k=-∞
 (k+1)T
 
kT
f(t+kT)exp(-iωt) dt

この式中のtt+kTと置いて変数変換すると以下のようになります。

F(ω)
k=-∞
 T
 
0
f(t)exp(-iωt+iωkT) dt

さらに、 exp(iωkT)を積分の前に括りだすことで以下の式が得られます。

F(ω)(
k=-∞
exp(iωkT) ) ×
 T
 
0
f(t)exp(-iωt) dt

ここで、

k=-∞
exp(iωkT)は、ω=
2πn
T
nは整数)のときに∞、それ以外の時には0となるような関数になります。 すなわち、δ関数を用いて以下のように表すことが出来ます。 (詳しくは、 「δ関数級数」 参照。)

k=-∞
exp(iωkT) = ω0
n=-∞
δ(ω - nω0)

ただし、ω0

T
です。

また、

 T
 
0
f(t)exp(-iωt) dtは、ω = nω0
2πn
T
のとき、複素形フーリエ級数展開におけるフーリエ係数F[n]Tを掛けたものと一致します。

以上のことから、周期関数に対するフーリエ変換の式は以下のように書き換えることが出来ます。

F(ω)
n=-∞
T F[n]×ω0 δ(ω - nω0) = 2π
n=-∞
F[n]×δ(ω - nω0)

このように、周期関数に対するフーリエ変換F(ω)の結果は、 ω = nω0nは整数)という離散的な点でしか値を持たず、 その値はフーリエ級数展開係数F[n]にδ関数を掛けたものになります。

離散関数のフーリエ変換

周期関数のフーリエ変換」 の結果から、離散関数と連続関数はδ関数を用いて関係付けることで、離散関数に対するフーリエ変換が定義可能ではないかという類推が出来ます。 すなわち、離散関数f[k]に対して、 f(t)

k=-∞
f[k] ×δ(t - kTs) と置いて、この連続関数f(t)をフーリエ変換したものを、 離散関数f[k]のフーリエ変換として定義します。

フーリエ変換の式にこのf(t)を代入した結果は以下のようになります。

F(ω)
 ∞
 
-∞
f(t)exp(-iωt) dt =
k=-∞
 ∞
 
-∞
f[k]δ(t - kTs) exp(-iωt) dt =
k=-∞
f[k] exp(-ikTsω)

このF(ω)は周期ωs

Ts
を持つ周期関数になっています。 そのため、逆変換の式は以下のようになります。

f(t)
1
n=-∞
 (n+1)ωs
 
s
F(ω+nωs)exp(iωt) dω
  = (
n=-∞
exp(inωst) ) ×
1
 ωs
 
0
F(ω)exp(iωt) dω
  = ( Ts
k=-∞
δ(t - kTs) ) ×
1
 ωs
 
0
F(ω)exp(iωt) dω

以上のことをまとめると、離散関数f[k]のフーリエ変換は以下のようになります。

F(ω)
k=-∞
f[k] exp(-ikTsω)
f[k]
Ts
 ωs
 
0
F(ω)exp(ikTsω) dω

離散フーリエ変換

これまでの話から、 周期関数のフーリエ変換は離散関数になり、 離散関数のフーリエ変換は周期関数になるということがいえます。 となると、周期離散関数のフーリエ変換は周期離散関数になるということを容易に察することが出来ると思います。 この様子を以下の図に示します。ただし、ω0

T
ωs
Ts
です。

周期関数のフーリエ変換

図1: 周期関数のフーリエ変換

離散関数のフーリエ変換

図2: 離散関数のフーリエ変換

周期離散関数のフーリエ変換

図3: 周期離散関数のフーリエ変換

この周期離散関数のフーリエ変換の公式を導き出して見ましょう。 離散関数f[k]が周期Nを持つ、 すなわち、f[k + N] = f[k]が成り立つとき、 「離散関数のフーリエ変換」 の結果から、この関数のフーリエ変換は以下のようになります。

F(ω)
k=-∞
f[k] exp(-ikTsω)
  =
n = -∞
N-1
k = 0
f[k + nN] exp(-i(k + nN)Tsω)
  =
n = -∞
N-1
k = 0
f[k] exp(-ikTsω) × exp(-inNTsω)

式中の2つの∑は分離することができ、上式は以下のように変形することができます。

F(ω)
N-1
k = 0
f[k] exp(-ikTsω) ×
n = -∞
exp(-inNTsω)

ω0

N Ts
と置くと、右辺の×以降は以下のように書き換えることができます。 (詳しくは、 「δ関数級数」 参照。)

k=-∞
exp(inNTs)
N Ts
n=-∞
δ(ω - nω0)

また、 ω =

N Ts
n = n ω0とおき、 離散関数F[n]

F[n]
N-1
k = 0
f[k] exp(-ikTsω)
N-1
k = 0
f[k] exp(-i
2πkn
N
)

として定義します。 これらを踏まえて、先ほどの式を変形すると以下のようになります。

F(ω)
N Ts
n=-∞
F[n] δ(ω - nω0)

この式を離散関数の逆フーリエ変換の式に代入することで、 以下の式が得られます。

f[k]
Ts
×
N Ts
 ωs
 
0
n=-∞
F[n] δ(ω - nω0) exp(ikTsω) dω
  =
1
N
N-1
n = 0
F[n] exp(i Tsω0 kn)
  =
1
N
N-1
n = 0
F[n] exp(i
2πkn
N
)

以上のことをまとめると、以下の式が得られます。

F[n]
N-1
k = 0
f[k] exp(-i
2πkn
N
)
f[k]
1
N
N-1
n = 0
F[n] exp(i
2πkn
N
)

この式を離散フーリエ変換と呼びます。

離散フーリエ変換の性質

離散フーリエ変換はフーリエ変換に離散信号を代入し、式変形しただけのものなので、 フーリエ変換と同様に以下のような性質を持っています。

線形性

[ a f[k] + b g[k] ][n] = a [ f[k] ][n] + b [ g[k] ][n]

時間シフト

[ f(t±T) ][n]
  =
 ∞
 
-∞
f(t±T) exp(-iωt) dt
  =
 ∞
 
-∞
f[k] exp(-iωt±T) dt
  = exp(±iTω)
 ∞
 
-∞
f[k] exp(-iωt) dt
  = exp(±iTω) [ f[k] ][n]

積のフーリエ変換

f*g[k]
N-1
l=0
f[l] g[k-l]  (ただし、k-l<0のとき、g[k-l]=g[k-l+N]であるものとする)
[ f*g[k] ][n][ f[k] ] [n] × [ g[k] ] [n]

畳込み積f*gの定義の仕方が連続関数のフーリエ変換の場合と微妙に異なっていることに注意してください。

アナログ信号→ディジタル信号

ここでは、アナログ信号(連続関数で表される)からディジタル信号(離散関数)を得る方法について説明します。

標本化

通常、連続関数f(t)で表されるアナログ信号を一定周期Ts標本化(サンプリング: sampling)することでディジタル信号(離散関数f[k])を得ます。

f[n] = f(nTs)

当然、このような方法でディジタル信号(離散関数)を得ると、 標本点の間の情報が抜け落ちてしまいます。 そのため、一般的にはディジタル信号から元のアナログ信号(連続関数)を復元することはできません。

しかしながら、一定の条件下では標本化して得た離散関数から元の連続関数を完全に復元することができます。 以下では、このために必要となる条件について説明していきます。

標本化関数

離散関数のフーリエ変換」 で説明したように、離散関数と連続関数の間はδ関数を用いて関連付けることができます。 そこで、 連続関数f(t) 標本化して得た離散関数f[k]を用いて、 以下のような連続関数f'(t)を定義します。

f'(t)
k = -∞
f[k] δ(t - nTs)
k = -∞
f(nT) δ(t - nTs) = f(t)
k = -∞
δ(t - nTs) = f(t) δTs(t)

このことはすなわち、「標本化とは、インパルス列を掛け合わせることに相当する」とみなすことができます。

標本化

図4: 標本化

インパルス列のフーリエ変換がインパルス列となることおよび、 積のフーリエ変換が畳込み積となることから、 標本化関数のフーリエ変換F'(ω)は以下のようになります。

F'(ω) = ω0 F*δωs (ω)

ちなみに、Ts標本化周期、 その逆数fs

1
Ts
標本化周波数、 標本化周波数にを掛けたものωs = 2πfs
Ts
標本化角周波数といいます。

シャノンの標本化定理

前節で示したように、関数f(t)のフーリエ変換F(ω)と、それを標本化したものf'(t)のフーリエ変換F’(ω)の間には以下のような関係が成り立っています。

F'(ω) = ω0 F*δωs (ω)

δ関数の性質から、この式は以下のように表すことができます。

F'(ω) = ωs
n = -∞
F(ω - nωs)

この関数F'(ω)は離散化前の関数F(ω)ωsおきに複数ならべたものになっています。 そのため、F(ω)が非0となるような最大の周波数ωmF(ω)ωm以下の周波数成分を含まない)がωsの半分より小さい場合(m<ωs)には、 下図のように、元の関数の形が崩れません。 したがって、低周波数成分のみを通過させるようなフィルタ(ローパスフィルタ)を通すことで、元の連続関数を完全に再現することができます。

標本化関数のフーリエ変換(低周波)

図5: 標本化関数のフーリエ変換(低周波)

ところが、ωmがそれ以上の場合((m≧ωs))、 下図のように、関数の形に歪みが生じます。 そして、この歪みが原因で元の連続関数を再現することができなくなります。 このような関数形の歪みをエイリアシング(aliasing)と呼びます。

標本化関数のフーリエ変換(高周波)

図6: 標本化関数のフーリエ変換(高周波)

このような、 「m<ωsの場合には、 標本化関数から元の連続関数を完全に再現できる」 という結論は、発見者の名前を取ってシャノンの標本化定理と呼ばれています。

高周波数の関数を標本化すると

図7: 高周波数の関数を標本化すると

まとめ

表1: 離散フーリエ変換の公式

離散フーリエ変換
F[n]
N-1
k = 0
f[k] exp(-i
2πkn
N
)
f[k]
1
N
N-1
n = 0
F[n] exp(i
2πkn
N
)

表2: 離散フーリエ変換の性質

線形性
[ a f[k] + b g[k] ][n] = a [ f[k] ][n] + b [ g[k] ][n]
時間シフト
[ f(t±T) ][n]exp(±iTω) [ f[k] ][n]
積のフーリエ変換
f*g[k]
N-1
l=0
f[l] g[k-l]
(ただし、k-l<0のとき、g[k-l]=g[k-l+N]であるものとする)
[ f*g[k] ][n][ f[k] ] [n] × [ g[k] ] [n]

表3: 標本化定理

標本化定理

m<ωsの場合には、 標本化関数から元の連続関数を完全に再現できる」

Transtation into English

[お問い合わせ](q)