けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
信号処理を学ぼう!
~フーリエ解析編!!~ 良ければフォロー
して下さい
目次
0. 波形について復習
1. フーリエ級数
2. 複素フーリエ級数
3. 連続なフーリエ変換
4. 離散フーリエ変換 (DFT)
5. 高速フーリエ変換 (FFT)
これらについてやっていきます!
基礎からとことん解説していきま
す.
こちらの本を参考にしてます
<参考資料>
道具としてのフーリエ解析
涌井良幸/涌井貞美
モード解析入門
長松昭男
どっちも良書です
信号について (フーリエ級数への誘い)
x
y
f(x, y)
空間的な関数:画像とか
t
時空間的な関数:映像
f(x, y, t)
f(t)
時間的な関数:温度とか
f(t)
2,3次元の場合を考えると大変なので,1次元で考えることにする
色々な信号について
1次元の関数を「無限個の三角関数の和で表現する」
複雑(かもしれないよう)な関数 → 単純な関数を足したもの
複雑な信号を理解するためのツール!どのような特性があるのかがわかる
周期 T
1秒
v =
1
T
周期関数
t + Tt
1次元の時間関数(波形)に関する基本用語の復習
周波数(振動数) f
 単位時間に含まれる周期 T の個数
f(t + T) = f(t)
フーリエ変換後の空間である周波数領域が
信号処理を行う上でとても大事なものである
信号について (フーリエ級数への誘い)
この資料では,時間的な関数(波)を扱います.
そのため,基本的な用語や記号について復習しておきましょう!
波形の処理をする上でかなり大事な概念をちょっとだけ先に取り上げます.
θ
cos θ
sin θ
P(x, y)
x
y フーリエ変換は与えらた関数を三角関数(正弦波)で表す
正弦波は円と深く関わる
θを動的に捉え,動径OPが単位時間あたりに進む角を角周波数 ω とすると,
以下の関係が成り立つ
O
y = sin θ
x = cos θ
θ = ωt
角周波数 ω で動径が回転するとき,
その動径の単位時間あたりの回転数は振動数(周波数) fなので
f =
ω
2π
角周波数 ω は周期 T との関係だと,以下になる
f =
1
T
ω =
2π
T
単位円
角周波数
信号について (フーリエ級数への誘い)
フーリエ解析 その1
~フーリエ級数・直交基底~
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + a2 cos 2ω0t + b2 sin 2ω0t + ⋯
◼フーリエ級数って何???って人
∫
2
T
− 2
T
1 ⋅ sin nω0tdt =
∫
2
T
− 2
T
1 ⋅ cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
◼直交基底って何???って人
f(t) = a0 +
∞
∑
n=1
{an cos
2πn
T0
t + bn sin
2πn
T0
t}
けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
フーリエ級数
数や関数の列を無限に加え合わせたもの
f(t)
a0
a1 cos ω0t
a2 cos 2ω0t
b2 sin 2ω0t
b1 sin ω0t
・
・
・
・
・
・
関数 f(t) がある値の倍数の角周波数 ω0
をもつ正弦波に分解される
n = 0
n = 1
n = 2
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + a2 cos 2ω0t + b2 sin 2ω0t + ⋯
フーリエ級数で表したい関数
その関数から決められる定数
角周波数は定数倍になる → (1.5倍とか,2.3倍とか,半端な数字にならない)
フーリエ級数
   ・・・「関数が無限個の三角関数の和で表わせる」
   ・・・「グラフが正弦波の重ね合わせで表わせる」
フーリエ級数の基本周期と基本周波数について
   ・・・「基本周波数の整数倍の正弦波しか出てこないことになる」
フーリエ級数
a0
a1 cos ω0t
a2 cos 2ω0t
b2 sin 2ω0t
b1 sin ω0t
・
・
・
・
・
・
n = 0
n = 1
n = 2
f(t)
基本周期が 0.1s なら,基本周波数は 10Hz になる.

その整数倍しか現れないので,10Hz, 20Hz, 30Hzの成分,,,になる.
なぜなら,基本周期の中で,整数個の波が収まらないといけないため!
足し合わせて周期的な関数にするため
基本周期 T0
ω0 =
2π
T0
f0 =
1
T0
基本周期 T0 によって,
基本周波数 f0 が決まる
基本周波数 f0 によって
基本角周波数 ω0 が決まる
フーリエ級数
f(t)
t
a0
a1
a2
b2
b1
a3
b3
・
・
・
v =
n
T
ωn =
2nπ
T
角周波数
周波数
1, cos
2nπt
T
, sin
2nπt
T
1, cos ωnt, sin ωnt
時間領域
周波数領域
フーリエ級数の和を構成する基本波
フーリエ級数
f(t)
T
2
−
T
2
の間の関数を考える−
T
2
≤ t ≤
T
2
フーリエ級数は有限区間で考える.対象は周期関数である.
f(t) = a0 + (a1 cos
2πt
T
+ b1 sin
2πt
T
) + (a2 cos
4πt
T
+ b2 sin
4πt
T
) + ⋯ + (an cos
2nπt
T
+ bn sin
2nπt
T
) + ⋯
(幅が T であれば何でも良い)
・
・
・
a0 =
1
T ∫
2
T
− 2
T
f(t)dt an =
2
T ∫
2
T
− 2
T
f(t)cos
2nπt
T
dtbn =
2
T ∫
2
T
− 2
T
f(t)sin
2nπt
T
dt
フーリエ級数の理論
フーリエ級数展開・・・関数をフーリエ級数で表すこと
で定義されたフーリエ係数( a0, a1, a2, ・・・, b1, b2, ・・・)を求める−
T
2
≤ t ≤
T
2
→ 後ほど詳しく導出する
f(t) = a0 +
∞
∑
n=1
{an cos
2πn
T0
t + bn sin
2πn
T0
t}
フーリエ級数
f(t) = a0 + (a1 cos
2πt
T
+ b1 sin
2πt
T
) + (a2 cos
4πt
T
+ b2 sin
4πt
T
) + ⋯ + (an cos
2nπt
T
+ bn sin
2nπt
T
) + ⋯
a0
a1
a2
b2
b1
a3
b3
・
・
・
周期 T の周期関数 (繰り返す)
f(t)
T
2
−
T
2
a0
a1
a2
b2
b1
a3
b3
・
・
・
a0
a1
a2
b2
b1
a3
b3
・
・
・
フーリエ級数は,周期 T の関数 にすることf(t)
フーリエ級数は周期 T の周期関数である
関数 f(t) を直交する基底とな
る関数
で表したのがフーリエ級数
フーリエ級数
・関数を空間の1点とする
・点を指すベクトルが「基底」と呼ばれる1組のベクトルの一次結合になる
平面ベクトルは,直交す
る「基底ベクトル」の一
次結合で表される
P
e1
e2
O
OP = a1e1 + a2e2
f(t) = a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯
f(t)
cos ω0t
sin ω0t
1, cos nω0t, sin nω0t
フーリエ級数の理論は,関数空間でイメージすると分かりやすい
フーリエ級数
e1
e2 e1 ⋅ e2 = 0
∫
a
b
f(t)g * (t)dt関数の内積 (b ≤ t ≤ a)
関数の内積って
平面ベクトルと数学的に一緒
g * (t) = g(t)が実数の場合g(t)
直交とは!?
「基底」となる関数セットは直交性を持たなければいけない.
二つのベクトルが直交であるとき,内積は0
関数の内積ってどう書くのか!?
以上の関数の積分が0のとき,各関数は直交している
関数 f(t) を直交する基底とな
る関数
で表したのがフーリエ級数
フーリエ級数
f(t) = a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯
f(t)
cos ω0t
sin ω0t
1, cos nω0t, sin nω0t
∫
2
T
− 2
T
1 ⋅ sin nω0tdt =
∫
2
T
− 2
T
1 ⋅ cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t sin mω0tdt = 0
∫
2
T
− 2
T
cos nω0t cos mω0tdt = 0
∫
2
T
− 2
T
12
dt = T
∫
2
T
− 2
T
sin n2
ω0tdt =
∫
2
T
− 2
T
cos n2
ω0tdt =
T
2
「フーリエ係数の導出に必要な性質」
「直交基底」
フーリエ級数
「フーリエ係数( a0, an, bn )の導出」
cos nω0t, sin nω0t
a0 「全ての項に1を掛けて積分」 → 直交基底の性質(積分値=0)から導出できる
∫
2
T
− 2
T
f(t)dt =
∫
2
T
− 2
T
a0dt +
∫
2
T
− 2
T
a1 cos ω0tdt +
∫
2
T
− 2
T
b1 sin ω0tdt + ⋯ +
∫
2
T
− 2
T
an cos nω0tdt +
∫
2
T
− 2
T
bn sin nω0tdt + ⋯
∫
2
T
− 2
T
1 ⋅ sin nω0tdt =
∫
2
T
− 2
T
1 ⋅ cos nω0tdt = 0
「直交基底」の性質ここだけ残る
∫
2
T
− 2
T
f(t)dt = a0[t]
2
T
− 2
T
a0 =
1
T ∫
2
T
− 2
T
f(t)dt
0 0 0 0
同様に an, bn も,それぞれ導出できる
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯
を全体に掛けて積分
フーリエ級数
「フーリエ係数( a0, an, bn )の導出」
+⋯ +
∫
2
T
− 2
T
an cos nω0t cos nω0tdt +
∫
2
T
− 2
T
bn sin nω0t cos nω0tdt + ⋯
an 「全ての項に を掛けて積分
∫
2
T
− 2
T
f(t)cos nω0tdt =
∫
2
T
− 2
T
a0 cos nω0tdt +
∫
2
T
− 2
T
a1 cos ω0t cos nω0tdt +
∫
2
T
− 2
T
b1 sin ω0t cos nω0tdt
「直交基底」の性質ここだけ残る
an =
2
T ∫
2
T
− 2
T
f(t)cos nω0tdt
0 0 0
0
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯
cos nω0t
∫
2
T
− 2
T
f(t)cos nω0tdt =
∫
2
T
− 2
T
an cos nω0t cos nω0tdt
∫
2
T
− 2
T
sin n2
ω0tdt =
∫
2
T
− 2
T
cos n2
ω0tdt =
T
2
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
∫
2
T
− 2
T
cos nω0t cos mω0tdt = 0
フーリエ級数
「フーリエ係数( a0, an, bn )の導出」
+⋯ +
∫
2
T
− 2
T
an cos nω0t sin nω0tdt +
∫
2
T
− 2
T
bn sin nω0t sin nω0tdt + ⋯
bn 「全ての項に を掛けて積分
∫
2
T
− 2
T
f(t)sin nω0tdt =
∫
2
T
− 2
T
a0 sin nω0tdt +
∫
2
T
− 2
T
a1 cos ω0t sin nω0tdt +
∫
2
T
− 2
T
b1 sin ω0t sin nω0tdt
「直交基底」の性質ここだけ残る
bn =
2
T ∫
2
T
− 2
T
f(t)sin nω0tdt
0 0 0
0
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯
sin nω0t
∫
2
T
− 2
T
f(t)sin nω0tdt =
∫
2
T
− 2
T
bn sin nω0t sin nω0tdt
∫
2
T
− 2
T
sin n2
ω0tdt =
∫
2
T
− 2
T
cos n2
ω0tdt =
T
2
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t sin mω0tdt = 0
フーリエ級数 おさらい
f(t) = a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯
f(t)
cos ω0t
sin ω0t
関数 f(t) を直交する基底とな
る関数
で表したのがフーリエ級数
1, cos nω0t, sin nω0t
∫
2
T
− 2
T
1 ⋅ sin nω0tdt =
∫
2
T
− 2
T
1 ⋅ cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t sin mω0tdt = 0
∫
2
T
− 2
T
cos nω0t cos mω0tdt = 0
「直交基底」
∫
2
T
− 2
T
12
dt = T
「フーリエ係数の導出に必要な性質」
∫
2
T
− 2
T
sin n2
ω0tdt =
∫
2
T
− 2
T
cos n2
ω0tdt =
T
2
f(t) = a0 + (a1 cos
2πt
T
+ b1 sin
2πt
T
) + (a2 cos
4πt
T
+ b2 sin
4πt
T
) + ⋯ + (an cos
2nπt
T
+ bn sin
2nπt
T
) + ⋯
a0 =
1
T ∫
2
T
− 2
T
f(t)dt
an =
2
T ∫
2
T
− 2
T
f(t)cos
2nπt
T
dt
bn =
2
T ∫
2
T
− 2
T
f(t)sin
2nπt
T
dt
フーリエ解析 その1
~フーリエ級数・直交基底 (練習問題編)~
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + a2 cos 2ω0t + b2 sin 2ω0t + ⋯
フーリエ級数って何???って人
∫
2
T
− 2
T
1 ⋅ sin nω0tdt =
∫
2
T
− 2
T
1 ⋅ cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
直交基底って何???って人
けんゆー @kenyu0501_
 山口大学大学院 博士課程/ 学術研究員/
(練習問題編)
解説はYoutubeに!
フーリエ解析 その2
~複素フーリエ級数とは~
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + c−1e−i 2πt
T + c0 + c1ei 2πt
T + ⋯ + c+nei 2πnt
T + ⋯
◼複素フーリエ級数って何???
∫
2
T
− 2
T
ei 2πm
T t
e−i 2πn
T t
dt =
◼複素フーリエ級数の直交基底って何???
{
0 (m ≠ n)
T (m = n) eiθ
= cos θ + i sin θ
オイラーの公式も使うよ!
けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
複素フーリエ級数
f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯
これまでのフーリエ級数の理論 ⇨ 実数の世界の展開
複素数の世界の展開する
 ・展開式が綺麗になる
 ・フーリエ変換につながる
オイラーの公式
eiθ
= cos θ + i sin θ
実数と複素数の世界を
結びつけるすごい式
複素指数関数 eiθ
= ei 2π
T t
(e−iθ
= cos θ − i sin θ)
複素フーリエ級数はこの複素指数関数で展開するもの
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + c−1e−i 2πt
T + c0 + c1ei 2πt
T + ⋯ + cnei 2πnt
T + ⋯
複素フーリエ級数
複素指数関数も直交性を持つ

 複素指数関数は三角関数から出来ているので,三角関数の直交性を引き継いでいる
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + c−1e−i 2πt
T + c0 + c1ei 2πt
T + ⋯ + cnei 2πnt
T + ⋯
「直交基底」である必要がある → お互いの関数の積分値が0

(平面ベクトルでいう内積=0)
P
e1
e2
O
OP = a1e1 + a2e2
f(t)
cnei 2πn
T t
c−ne−i 2πn
T t
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + cnei 2πnt
T + ⋯
関数空間の1点 f(t) は

直交基底となる関数
セットで展開される
平面ベクトルは,
直交する「基底ベ
クトル」の一次結
合で表される
∫
2
T
− 2
T
ei 2πm
T t
e−i 2πn
T t
dt =
{
0 (m ≠ n)
T (m = n)
複素フーリエ級数
f(t) = a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯
f(t)
cos ω0t
sin ω0t
∫
2
T
− 2
T
1 ⋅ sin nω0tdt =
∫
2
T
− 2
T
1 ⋅ cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t cos nω0tdt = 0
∫
2
T
− 2
T
sin nω0t sin mω0tdt = 0
∫
2
T
− 2
T
cos nω0t cos mω0tdt = 0
「直交基底」
f(t) = a0 + (a1 cos
2πt
T
+ b1 sin
2πt
T
) + (a2 cos
4πt
T
+ b2 sin
4πt
T
) + ⋯ + (an cos
2nπt
T
+ bn sin
2nπt
T
) + ⋯
複素指数関数の「直交基底」
フーリエ級数の復習 ・・・ちなみにフーリエ級数の直交基底はこちら
定義域の概念は持っている
(周期 T )
(n = 0, ± 1, ± 2, ⋯)
複素フーリエ級数
複素フーリエ級数の係数を導出する
「展開式の両辺に,右から    をかける」 → 「その後区間 T で積分」
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + c−1e−i 2πt
T + c0 + c1ei 2πt
T + ⋯ + cnei 2πnt
T + ⋯
cn
∫
2
T
− 2
T
f(t)ei−2πnt
T dt = ⋯ + cn−1
∫
2
T
− 2
T
ei 2π(n − 1)t
T e−i 2πnt
T dt + cn
∫
2
T
− 2
T
ei 2πnt
T e−i 2πnt
T dt + cn+1
∫
2
T
− 2
T
ei 2π(n + 1)t
T e−i 2πnt
T dt + ⋯
e−i 2πnt
T
0
0
ここだけ残る
∫
2
T
− 2
T
f(t)e−i 2πnt
T dt = cn
∫
2
T
− 2
T
ei 2πnt
T e−i 2πnt
T dt
T になる
cn =
1
T ∫
2
T
− 2
T
f(t)e−i 2πnt
T dt
∫
2
T
− 2
T
ei 2πm
T t
e−i 2πn
T t
dt =
{
0 (m ≠ n)
T (m = n)
「直交基底」の性質
フーリエ解析 その2
~複素フーリエ級数(練習問題)とは~
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + c−1e−i 2πt
T + c0 + c1ei 2πt
T + ⋯ + c−nei 2πnt
T + ⋯
◼複素フーリエ級数って何???
∫
2
T
− 2
T
ei 2πm
T t
e−i 2πn
T t
dt =
◼複素フーリエの直交基底って何???
けんゆー @kenyu0501_
 山口大学大学院 博士課程/ 学術研究員/
{
0 (m ≠ n)
T (m = n) (練習問題編)
f(t) =
{
0 (−π ≤ t < 0)
1 (0 ≤ t ≤ π)
◼次の関数を複素フーリエ級数で表せ.
−π π t
f(t)
1
解説はYoutubeに!
フーリエ解析 その3
~フーリエ変換とは~
◼フーリエ変換って何???
時間領域 周波数領域
周波数領域を確認
できたら何が嬉しいの?
F(ω) =
∫
∞
−∞
f(t)e−iωt
dt
フーリエ変換ってなに???
けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
離散フーリエ変換ではないよ!

このフーリエ変換は連続の関数に関するフーリエ変換
複素フーリエ級数 (数学のお話)
複素フーリエ級数の係数を導出する
「展開式の両辺に,右から    をかける」 → 「その後区間 T で積分」
f(t) = ⋯ + c−ne−i 2πnt
T + ⋯ + c−1e−i 2πt
T + c0 + c1ei 2πt
T + ⋯ + cnei 2πnt
T + ⋯
cn
∫
2
T
− 2
T
f(t)ei−2πnt
T dt = ⋯ + cn−1
∫
2
T
− 2
T
ei 2π(n − 1)t
T e−i 2πnt
T dt + cn
∫
2
T
− 2
T
ei 2πnt
T e−i 2πnt
T dt + cn+1
∫
2
T
− 2
T
ei 2π(n + 1)t
T e−i 2πnt
T dt + ⋯
e−i 2πnt
T
0
0
ここだけ残る
∫
2
T
− 2
T
f(t)e−i 2πnt
T dt = cn
∫
2
T
− 2
T
ei 2πnt
T e−i 2πnt
T dt
T になる
cn =
1
T ∫
2
T
− 2
T
f(t)e−i 2πnt
T dt
∫
2
T
− 2
T
ei 2πm
T t
e−i 2πn
T t
dt =
{
0 (m ≠ n)
T (m = n)
「直交基底」の性質
フーリエ変換 (数学のお話)
f(t) = ⋯ + c−ne−inω0t
+ ⋯ + c−1e−iω0t
+ c0 + c1eiω0t
+ ⋯ + cneinω0t
+ ⋯
cn =
1
T ∫
2
T
− 2
T
f(t)e−inω0t
dt
複素フーリエ級数の場合
f(t)
T
c0
c−1
c−2
c2
c1
c−3
c3
・
・
・
ω0 =
2π
T
(角周波数 )
時間領域
周波数領域
角周波数の倍数の

フーリエ係数を導出する
関数を複素指数関数で展開する
einω0t
・定義区間が限定
(周期関数)
F(ω) =
∫
∞
−∞
f(t)e−iωt
dt もともと決めていた角周波数ではなく,
関数から直接周波数情報を取り出す.
フーリエ変換の場合 n 番目の縛り

(とびとび)
時間領域
周波数領域F(ω) =
∫
∞
−∞
f(t)e−iωt
dt
f(t) =
1
2π ∫
∞
−∞
F(ω)eiωt
dt
フーリエ変換
逆フーリエ変換
P
e1
e2
O
OP = a1e1 + a2e2
f(t)
eiω1t
eiω2t
関数空間の1点 f(t) は

直交基底となる関数
セットで展開される
平面ベクトルは,
直交する「基底ベ
クトル」の一次結
合で表される
F(ω) =
∫
∞
−∞
f(t)e−iωt
dt
連続している
いかなる角周波数もok
フーリエ変換 (数学のお話)
時間領域
周波数領域F(ω) =
∫
∞
−∞
f(t)e−iωt
dt
f(t) =
1
2π ∫
∞
−∞
F(ω)eiωt
dt
フーリエ変換
逆フーリエ変換
フーリエ変換の基底 eiωt
F(ω) =
∫
∞
−∞
f(t)e−iωt
dt 複素数の内積は,
一方を共役な複素数にして掛け合わせる
複素正弦波
フーリエ変換 (数学のお話)
f(t)
T
c0
c−1
c−2
c2
c1
c−3
c3
・
・
・
ω0 =
2π
T
(角周波数 )
時
間
領
域
周
波
数
領
域
einω0t
n 番目の縛り

(とびとび)
・
・
・
f(t) F(ω)
t
0
−∞
+∞
角周波数は連続的な値.
そして連続関数になる.
複素フーリエ級数
フーリエ変換
eiωt
フーリエ変換 (数学のお話)
(練習問題編)
f(t) =
{
0 (t < 0)
e−t
(0 ≤ t)
z
◼次の関数をフーリエ変換して得られる関数は?
t
f(t)
1
0
フーリエ解析 その3
~フーリエ変換(練習問題)とは~
けんゆー @kenyu0501_
 山口大学大学院 博士課程/ 学術研究員/
f(t) =
{
1 (−
ϵ
2
≤ t ≤
ϵ
2
)
0 (otherwise)
f(t)
1
0−
ϵ
2
ϵ
2
◼次の関数をフーリエ変換して得られる関数は?
解説はYoutubeに!
フーリエ解析 その4
~離散フーリエ変換(DFT)とは~
◼ディジタル信号 (離散信号) のフーリエ変換
x(t) x(t)
0 D 2D 3D 4D
t t
離散信号
D : サンプリング周期
T = ND
けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
離散フーリエ変換 DFT (実際に現場で使うお話)
実験などでセンシングした値には,離散フーリエ変換を使う!
• • • • • • • •
フーリエ変換は関数に対して使うもの(数学)
• • • • • •
x(t) x(t)
0 D 2D 3D 4D
フーリエ変換で議論していた

関数は連続的
実験データは一定間隔で
数値化されたデータになる
t t
離散信号
D : サンプリング周期
T = ND
離散フーリエ変換は,有限の時間 T を扱うので,

どっちかというと複素フーリエ級数に近いぞ!
離散信号は

積分できるの!?
信号処理
AD変換 (Analog-to-digital conversion)
指先脈波センサー
t tτ t t
標本化(サンプリング) 量子化
サンプリング間隔
0000
0001
0010
0011
0100
0101
0111
0110
1000
アナログ信号 ディジタル信号
(0011,0100,0110,1000,0011,0011,0011,0101,0111,0100,0011,⋯)
アナログ信号
 時間的に連続で変化する信号
ディジタル信号(不連続なデータの集合)
 一定時間間隔のとびとびの値で表現した信号
計測機器のスペック
って大事なのです
ビット:2進数の桁の単位
高速フーリエ変換 FFT
ナイキストの標本化定理
ある正弦波を標本化する際には,その周期の半分よりも短い標本化間隔を用いなければならない
周期 T
周期の
半分 T/2
標本化間隔 

(サンプリング間隔)
τ
T
τ
T
τ
T
τ
zτ <
T
2
τ =
T
2
T
2
< τ < T
τ =
T
2
直線になる
周期が大きい波が
間違って出てくる
零点ばかりだと
直線が出てくる
標本化点数を通過する波のうちで最も
ゆっくりとした波として,1個だけ正し
く再現できる
離散フーリエ変換 DFT (実際に現場で使うお話)
x(t)
t
時間領域
周波数領域
F(ω) =
∫
∞
−∞
x(t)e−iωt
dt
x(t)
0 D 2D 3D 4D
t
離散信号
D : サンプリング周期
T = ND
ω
F(ω)
ω
F(ω) 常に0
(とびとびの信号なので)
積分積分
離散信号に関しては工夫が必要
離散フーリエ変換は積分できない!?
• • • • • • • •
x(t)
0 D 2D 3D 4D
t
T = 4D
離散フーリエ変換 DFT (実際に現場で使うお話)
0 ≤ t < T
離散フーリエ変換で周波数領域にもっていく工夫
有限区間で解析(Tは含まない)
x(t) = ⋯ + c−nei 2π
T (−nt)
+ ⋯ + c−1ei 2π
T (−t)
+ c0 + c1ei 2π
T (nt)
+ ⋯ + cnei 2π
T (+nt)
+ ⋯
x0
x1
x2
x3
x(t) = c01 + c1ei 2π
4D (1t)
+ c2ei 2π
4D (2t)
+ c3ei 2π
4D (3t)
4つの複素正弦波だけ使用できれば良い
これが4つの離散信号の離散フーリエ変換の基本の式になります
離散信号
c(t) =
N
∑
n=0
x(t)ei 2π
T (nt)
x(t)
1
ei 2π
4D (nt)関数空間の1点 x(t) は,直
交する4つの複素正弦波の一
次結合で表されることにな
る
離散フーリエ変換 DFT (実際に現場で使うお話)
x(t)
0 D 2D 3D 4D
t
T = 4D
x0
x1
x2
x3
x(t) = c01 + c1ei 2π
4D (1t)
+ c2ei 2π
4D (2t)
+ c3ei 2π
4D (3t)
複素フーリエ級数と同じだね!
離散信号
離散信号 x0 ~ x3 から,周波数情報 c0 ~ c3が得られる
展開された各項(複素正弦波)はもちろん直交している
離散フーリエ変換 DFT (実際に現場で使うお話)
離散信号 x0 ~ x3 から,周波数情報 c0 ~ c3が得られる
x(D) = c0 + c1ei 2π
4 + c2ei 4π
4 + c3ei 6π
4
t へ 0, D, 2D, 3D を代入して,連立方程式を立てる
x(0) = c0 + c1 + c2 + c3
x(t) = c01 + c1ei 2π
4D (1t)
+ c2ei 2π
4D (2t)
+ c3ei 2π
4D (3t)
x(2D) = c0 + c1ei 4π
4 + c2ei 8π
4 + c3ei 12π
4
x(3D) = c0 + c1ei 6π
4 + c2ei 12π
4 + c3ei 18π
4
以上の連立方程式を解いて,離散信号 x0 ~ x3 か
ら,周波数情報 c0 ~ c3の関係を導出する
離散フーリエ変換 DFT (実際に現場で使うお話)
x0
x1
x2
x3
=
1 1 1 1
1 ei 2π
4 ei 4π
4 ei 6π
4
1 ei 4π
4 ei π
4 ei 12π
4
1 ei 6π
4 ei 12π
4 ei 18π
4
c0
c1
c2
c3
x(D) = c0 + c1ei 2π
4 + c2ei 4π
4 + c3ei 6π
4
x(0) = c0 + c1 + c2 + c3
x(2D) = c0 + c1ei 4π
4 + c2ei 8π
4 + c3ei 12π
4
x(3D) = c0 + c1ei 6π
4 + c2ei 12π
4 + c3ei 18π
4
以上の連立方程式を解いて,離散信号 x0 ~ x3 か
ら,周波数情報 c0 ~ c3の関係を導出する
行列形式に変更
各行ベクトルはもちろん直交している
離散フーリエ変換 DFT (実際に現場で使うお話)
x0
x1
x2
x3
=
1 1 1 1
1 ei 2π
4 ei 4π
4 ei 6π
4
1 ei 4π
4 ei π
4 ei 12π
4
1 ei 6π
4 ei 12π
4 ei 18π
4
c0
c1
c2
c3
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
=
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
1 1 1 1
1 ei 2π
4 ei 4π
4 ei 6π
4
1 ei 4π
4 ei π
4 ei 12π
4
1 ei 6π
4 ei 12π
4 ei 18π
4
c0
c1
c2
c3
右辺の正方行列の各成分を共役な複素数にして転置した行列を両辺にかける
4
=
離散フーリエ変換 DFT (実際に現場で使うお話)
離散信号が4つの場合の離散フーリエ変換の公式
4
c0
c1
c2
c3
=
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
4
c0
c1
c2
c3
=
X0
X1
X2
X3
X0
X1
X2
X3
=
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
理論展開はフーリエ級数と同じである
離散フーリエ変換 DFT (実際に現場で使うお話)
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
= 4
c0
c1
c2
c3
4
c0
c1
c2
c3
=
X0
X1
X2
X3
x0
x1
x2
x3
=
1 1 1 1
1 ei 2π
4 ei 4π
4 ei 6π
4
1 ei 4π
4 ei π
4 ei 12π
4
1 ei 6π
4 ei 12π
4 ei 18π
4
c0
c1
c2
c3
c0
c1
c2
c3
=
1
4
X0
X1
X2
X3
元々の式に代入する
置き換え逆離散フーリエ変換の導出
x0
x1
x2
x3
=
1
4
1 1 1 1
1 ei 2π
4 ei 4π
4 ei 6π
4
1 ei 4π
4 ei π
4 ei 12π
4
1 ei 6π
4 ei 12π
4 ei 18π
4
X0
X1
X2
X3
逆離散フーリエ変換も結局は,
離散フーリエ変換と同じ!
離散フーリエ変換 DFT (実際に現場で使うお話)
X0
X1
X2
X3
=
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
X0
X1
X2
X3
=
1 1 1 1
1 −i −1 i
1 −1 1 −1
1 i −1 −i
x0
x1
x2
x3
オイラーの公式
eiθ
= cos θ + i sin θ
e−iθ
= cos θ − i sin θ
e−i π
2 = cos
π
2
− i sin
π
2
e−i π
2 = − i
0
1
e−i π
2 = − iei π
2 = i
eiπ
= 1 e−iπ
= − 1
この正方行列にはある規則性がある
この規則性を上手く利用したのが「高速フーリエ変換 (FFT)」
高速フーリエ変換 FFTへの誘い...
X0
X1
X2
X3
=
1 1 1 1
1 −i −1 i
1 −1 1 −1
1 i −1 −i
x0
x1
x2
x3
◼オイラーの公式により書き直す オイラーの公式
eiθ
= cos θ + i sin θ
e−iθ
= cos θ − i sin θ
e−i π
2 = − iei π
2 = i
eiπ
= 1 e−iπ
= − 1
X0
X2
X1
X3
=
1 1 1 1
1 −1 1 −1
1 −i −1 i
1 i −1 −i
x0
x1
x2
x3
2行目と3行目を入れ替える
E1 =
[
1 1
1 −i]
E2 =
[
1 −i
1 i ]
−E2
[
E1 E1
E2 −E2]
DFTの変換行列が
簡単に表される
このような感じで...
フーリエ解析 その4
~離散フーリエ変換(練習問題)とは~
(練習問題編)
◼離散信号 {x0, x1, x2, x3} が {1, 1, 0, 0}のとき,
離散フーリエ変換 (DFT)のの係数 X0 ~ X3 を求めよ.
けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
フーリエ解析 その5
~高速フーリエ変換(FFT)とは~
◼高速フーリエ変換FFTとは,離散フーリエ変換DFTを高速にするもの!
X0
X1
X2
X3
=
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
DFTの変換行列周波数情報を得る
≈
離散信号を入力
この正方行列にはある規則性がある
この規則性を上手く利用したのが「高速フーリエ変換 (FFT)」
けんゆー @kenyu0501_(Twitter)
 山口大学大学院 博士課程/ 学術研究員/
高速フーリエ変換 FFT
FFTを理解していくぞ!
・データ数が2のべき乗に従わなければいけない.
・データ数が2, 4, 8のときで考えて,一般化まで.
・バタフライ演算による計算の工夫.
・ビットリバースにより計算の並び替え.
具体的に数値を取り上
げて考えていきます
バタフライ演算とビット
リバースが分かればOK!
ただ単に使っているだけではなくて,
内側のアルゴリズムを理解しましょー!
離散フーリエ変換 DFTのおさらい
X0
X1
X2
⋮
XN−1
=
1 1 1 ⋯ 1
1 e−i 2π
N e−i 4π
N ⋯ e−i 2π(N − 1)
N
1 e−i 4π
N e−i 8π
N ⋯ e−i 4π(N − 1)
N
⋮ ⋮ ⋮ ⋱ ⋮
1 e−i 2π(N − 1)
N e−i 4π(N − 1)
N ⋯ e−i 2π(N − 1)(N − 1)
N
x0
x1
x2
⋮
xN−1
X0
X1
X2
X3
=
1 1 1 1
1 e−i 2π
4 e−i 4π
4 e−i 6π
4
1 e−i 4π
4 e−i π
4 e−i 12π
4
1 e−i 6π
4 e−i 12π
4 e−i 18π
4
x0
x1
x2
x3
DFTとはN個のデータ {x0, x1, x2,・・・, xN-1} と,そのデータ長に対応
する複素正弦波の係数{X0, X1, X2,・・・, XN-1}を結びつける変換
N=4のとき
一般化する 変換行列
x0 x1 x2 ⋯ xn−1
t
⋯
N個
X0 X1 X2 ⋯ Xn−1
ω
⋯
変換行列
N個の離散信号のデータを
処理するには,N2 回の複素
数の積の計算が必要になる
N2回の計算回数を大幅に減少させる工夫がある → FFT
高速フーリエ変換 FFT
X0
X1
X2
⋮
XN−1
=
1 1 1 ⋯ 1
1 e−i 2π
N e−i 4π
N ⋯ e−i 2π(N − 1)
N
1 e−i 4π
N e−i 8π
N ⋯ e−i 4π(N − 1)
N
⋮ ⋮ ⋮ ⋱ ⋮
1 e−i 2π(N − 1)
N e−i 4π(N − 1)
N ⋯ e−i 2π(N − 1)(N − 1)
N
x0
x1
x2
⋮
xN−1
高速フーリエ変換 FFT の概要
変換行列
N2回の計算回数を大幅に減少させる工夫がある → FFT
計算の順序を変えて,同類の小さな計算に小分けする
N2
→
N
2
(log2 N − 1)具体的な乗算(掛け算)回数の値
<例えば> N = 210
= 1024
N2
= 1024 × 1024 ≒ 1000000
N
2
(log2 N − 1) = 512 log2 210
− 1 ≒ 4600
(DFT)
(FFT)
・1965年にCooleyとTukeyが広めた.
・「周波数間引き型FFT」と「時間間引き型FFT」の2タイプがある.
・「周波数間引き型FFT」はフーリエ変換後の値を並べ替える.
・「時間間引き型FFT」はフーリエ変換前の時間データを並び替える
FFTのデータ数は,2のべき乗になる
高速フーリエ変換 FFT
X0
X1
X2
⋮
XN−1
=
1 1 1 ⋯ 1
1 e−i 2π
N e−i 4π
N ⋯ e−i 2π(N − 1)
N
1 e−i 4π
N e−i 8π
N ⋯ e−i 4π(N − 1)
N
⋮ ⋮ ⋮ ⋱ ⋮
1 e−i 2π(N − 1)
N e−i 4π(N − 1)
N ⋯ e−i 2π(N − 1)(N − 1)
N
x0
x1
x2
⋮
xN−1
回転因子 を導入して,式を見やすくする
WN = e−i 2π
N
WN
X0
X1
X2
⋮
XN−1
=
1 1 1 ⋯ 1
1 WN W2
N ⋯ WN−1
N
1 W2
N W4
N ⋯ W2(N−1)
N
⋮ ⋮ ⋮ ⋱ ⋮
1 W(N−1)
N W2(N−1)
N ⋯ W(N−1)(N−1)
N
x0
x1
x2
⋮
xN−1
複素指数関数のべき乗が複素平面乗では回転をする
WN = e−i 2π
N
W8 = e−i 2π
8
W0
8 = (e−i 2π
8 )0
= 1
W1
8 = e−i 2π
8 =
1
2
− i
1
2
e−iθ
= cos θ − i sin θ
W2
8
W3
8
W4
8
W5
8
W6
8
W7
8
Re
Im
W0
8 = W8
8 = W16
8 = ⋯
W1
8 = W9
8 = W17
8 = ⋯
N=8のとき
回転因子で記述することによって,
計算を削減するための工夫ができる.
高速フーリエ変換 FFT
N = 2
2の冪に従うデータ数とシグナルフロー図の関係
N = 4
(
X0
X1)
=
(
1 1
1 W2) (
x0
x1)
W2 = e−i 2π
2 = e−iπ
= − 1
W0
2 = W2
2 = W4
2 = 0
W1
2 = W3
2 = W5
2 = − 1 Re
Im
X0
X1
X2
X3
=
1 1 1 1
1 W1
4 W2
4 W3
4
1 W2
4 W4
4 W6
4
1 W3
4 W6
4 W9
4
x0
x1
x2
x3
W4 = e−i 2π
4 = e−i π
2 = − i
Re
Im
W0
4 = W4
4 = W8
4 = 1
W1
4 = W5
4 = W9
4 = − i
W2
4 = W6
4 = − 1
W3
4 = i
N = 8 W8 = e−i 2π
8 = e−i π
4 = +
1
2
−
1
2
i
X0
X1
X2
⋮
X7
=
1 1 1 ⋯ 1
1 W8 W2
8 ⋯ W7
8
1 W2
8 W4
8 ⋯ W14
8
⋮ ⋮ ⋮ ⋱ ⋮
1 W7
8 W14
8 ⋯ W49
8
x0
x1
x2
⋮
x7
W0
8 = (e−i 2π
8 )0
= 1
W1
8 = e−i 2π
8 =
1
2
− i
1
2W2
8
W3
8
W4
8
W5
8
W6
8
W7
8
Re
Im
高速フーリエ変換 FFT
バタフライ演算とシグナルフロー図
a
b
a + b
a − b
−
FFTの計算は,2つのデータを加減し,さらに回転因子の k 乗をかけるという基本演算
WN = e−i 2π
N
a
b
a + b
Wk
N(a − b)
− Wk
N
蝶の羽の形に似ているので,
バタフライ演算
この演算の図は
シグナルフロー図
図A 図B
2つのデータ a, b を入力したとき,
2つの和を一方に,2つの差を他方に出力
2つのデータ a, b を入力したとき,
2つの和を一方に,2つの差に回転因子を
かけた値を他方に出力
さらに,FFTの計算は「ビットリバース」という,順序にデータを並べ替える操作をする
高速フーリエ変換 FFT
バタフライ演算の例
N = 2
(
X0
X1)
=
(
1 1
1 W1
2) (
x0
x1)
データ数 N = 21
回転因子は,N = 1なのでこうなります
WN = e−i 2π
N
W2 = e−i 2π
2
W0
2 = W2
2 = 1
e−iθ
= cos θ − i sin θ
W1
2 = W3
2 = − 1 Re
Im
N=2のとき
( = e−iπ
= − 1)
X0 = (x0 + x1)
X1 = (x0 − x1)
(
X0
X1)
=
(
1 1
1 −1) (
x0
x1)
x0
x1
x0 + x1 = X0
x0 − x1 = X1−
x0
x1
X0
X1
W2
シグナルフロー図
上のシグナルフロー図の処理
をこのように書いておく
高速フーリエ変換 FFT
N = 4
X0
X1
X2
X3
=
1 1 1 1
1 W1
N W2
N W3
N
1 W2
N W4
N W6
N
1 W3
N W6
N W9
N
x0
x1
x2
x3
データ数 N = 22
回転因子は,N = 4なのでこうなります
WN = e−i 2π
N
W4 = e−i 2π
4
W0
4 = W4
4 = W8
4 = 1
e−iθ
= cos θ − i sin θ
W1
4 = W5
4 = W9
4 = − i
W2
4 = W6
4 = − 1
W3
4 = i
Re
Im
N=4のとき
( = e−i π
2 = − i)
X0
X1
X2
X3
=
1 1 1 1
1 W1
N −1 W3
N
1 −1 1 −1
1 W3
N −1 W1
N
x0
x1
x2
x3
とりあえず,実部を代入
バタフライ演算の例
高速フーリエ変換 FFT
値 2進数 逆転 ビットリバース
0 00 00 0
1 01 10 2
2 10 01 1
3 11 11 3
X0
X2
X1
X3
=
1 1 1 1
1 −1 1 −1
1 W1
N −1 W3
N
1 W3
N −1 W1
N
x0
x1
x2
x3
値の数を2進数にして,
その0と1を全て反転さ
せたもの
≈
周波数情報をもとにビットリバースを行なって,式変形を行う
≈ ≈
≈
X0
X1
X2
X3
=
1 1 1 1
1 W1
N −1 W3
N
1 −1 1 −1
1 W3
N −1 W1
N
x0
x1
x2
x3
フーリエ変換前の操作
N = 4
高速フーリエ変換 FFT
X0
X2
X1
X3
=
1 1 1 1
1 −1 1 −1
1 W1
N −1 W3
N
1 W3
N −1 W1
N
x0
x1
x2
x3
≈
X0 = x0 + x1 + x2 + x3
X2 = x0 − x1 + x2 − x3
X1 = x0 + x1W1
4 − x2 + x3W3
4
X3 = x0 + x1W3
4 − x2 + x3W1
4
バタフライ演算と似てない?
X0 = (x0 + x2) + (x1 + x3)
X2 = (x0 + x2) − (x1 + x3)
X1 = (x0 − x2) + W1
4(x1 + x3W2
4) = W0
4(x0 − x2) + W1
4(x1 − x3)
X3 = (x0 − x2) + W1
4(x1W2
4 + x3) = W0
4(x0 − x2) − W1
4(x1 − x3)
N = 4
N = 2 の時の
高速フーリエ変換 FFT
X0 = (x0 + x2) + (x1 + x3)
X2 = (x0 + x2) − (x1 + x3)
X1 = (x0 − x2) + W1
4(x1 + x3W2
4) = W0
4(x0 − x2) + W1
4(x1 − x3)
X3 = (x0 − x2) + W1
4(x1W2
4 + x3) = W0
4(x0 − x2) − W1
4(x1 − x3)
(x0 + x2)
−
(x1 + x3)
(x0 + x2) + (x1 + x3) = X0
(x0 + x2) − (x1 + x3) = X2
W0
4(x0 − x2)
−
W1
4(x1 − x3)
W0
4(x0 + x2) + W1
4(x1 − x3) = X1
W0
4(x0 + x2) − W1
4(x1 − x3) = X3
W2
W2
N = 4
高速フーリエ変換 FFT
(x0 + x2)
−
(x1 + x3)
(x0 + x2) + (x1 + x3) = X0
(x0 + x2) − (x1 + x3) = X2
W0
4(x0 − x2)
−
W1
4(x1 − x3)
W0
4(x0 + x2) + W1
4(x1 − x3) = X1
W0
4(x0 + x2) − W1
4(x1 − x3) = X3
W2
W2
N = 4
x0
x1
X0
X1
W4x2
x3
X2
X3
x0
−
(x0 + x2)
(x1 + x3)
−
W0
4(x0 − x2)
W1
4(x1 − x3)
x1
x2
x3
W0
4
W1
4
−
X0
X2
W2
−
X1
X3
W2
N = 2のシグナルフロー図
が内側にある
高速フーリエ変換 FFT
ビットリバース
N = 8 データ数 N = 23
先にシグナルフロー図から
−
−
−
X1
X5
−
X3
X7
−
−
W0
4
W1
4
−
X0
X4
−
X2
X6
W2
x4
x5
x6
x7
x0
x1
x2
x3
W4
W4
W2
W8
W0
4
W1
4
W2
W2
ビットリバース
データ数が

N = 22 の時の処理
データ数が

N = 2の時の処理
−
−
−
−
W0
8
W1
8
W2
8
W3
8
高速フーリエ変換 FFT
N = 8
X0
X1
X2
⋮
X7
=
1 1 1 ⋯ 1
1 W8 W2
8 ⋯ W7
8
1 W2
8 W4
8 ⋯ W14
8
⋮ ⋮ ⋮ ⋱ ⋮
1 W7
8 W14
8 ⋯ W49
8
x0
x1
x2
⋮
x7
DFTの変換式
W0
8 = (e−i 2π
8 )0
= 1
W1
8 = e−i 2π
8 =
1
2
− i
1
2W2
8
W3
8
W4
8
W5
8
W6
8
W7
8
Re
Im
W8 = e−i 2π
8 =
1
2
− i
1
2
回転因子
値 2進数 逆転 ビットリバース
0 000 000 0
1 001 100 4
2 010 010 2
3 011 110 6
4 100 001 1
5 101 101 5
6 110 011 3
7 111 111 7
≈ ≈
Xn はビット
リバース順
X0 = x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7
X4 = x0 − x1 + x2 − x3 + x4 − x5 + x6 − x7
X2 = x0 + x1W2
8 − x2 − x3W2
8 + x4 + x5W2
8 − x6 − x7W2
8
X6 = x0 − x1W2
8 − x2 + x3W2
8 + x4 − x5W2
8 − x6 + x7W2
8
X1 = x0 + x1W8 + x2W2
8 + x3W3
8 − x4 − x5W8 − x6W2
8 − x7W3
8
X5 = x0 − x1W8 + x2W2
8 − x3W3
8 − x4 + x5W8 − x6W2
8 + x7W3
8
X3 = x0 + x1W3
8 − x2W2
8 − x3W5
8 − x4 − x5W3
8 + x6W2
8 + x7W5
8
X7 = x0 − x1W3
8 − x2W2
8 + x3W5
8 − x4 + x5W3
8 + x6W2
8 − x7W5
8
Re
Im
W0
4 = 1
W1
4 = − i
W2
4 = − 1
W3
4 = i
W4 = e−i 2π
4 = − i
W0
4 = W0
8 W1
4 = W2
8
を使って式変形
高速フーリエ変換 FFT
X0 = x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7
X4 = x0 − x1 + x2 − x3 + x4 − x5 + x6 − x7
X2 = x0 + x1W2
8 − x2 − x3W2
8 + x4 + x5W2
8 − x6 − x7W2
8
X6 = x0 − x1W2
8 − x2 + x3W2
8 + x4 − x5W2
8 − x6 + x7W2
8
X1 = x0 + x1W8 + x2W2
8 + x3W3
8 − x4 − x5W8 − x6W2
8 − x7W3
8
X5 = x0 − x1W8 + x2W2
8 − x3W3
8 − x4 + x5W8 − x6W2
8 + x7W3
8
X3 = x0 + x1W3
8 − x2W2
8 − x3W5
8 − x4 − x5W3
8 + x6W2
8 + x7W5
8
X7 = x0 − x1W3
8 − x2W2
8 + x3W5
8 − x4 + x5W3
8 + x6W2
8 − x7W5
8
N = 8 N = 4 が出てくるように変更する
X0 = {(x0 + x4) + (x2 + x6)} + {(x1 + x5) + (x3 + x7)}
X4 = {(x0 + x4) + (x2 + x6)} − {(x1 + x5) + (x3 + x7)}
X2 = W0
4{(x0 + x4) − (x2 + x6)} + W1
4{(x1 + x5) − (x3 + x7)}
X6 = W0
4{(x0 + x4) − (x2 + x6)} − W1
4{(x1 + x5) − (x3 + x7)}
X1 = {W0
8(x0 − x4) + W2
8(x2 − x6)} + {W1
8(x1 − x5) + W3
8(x3 − x7)}
X5 = {W0
8(x0 − x4) + W2
8(x2 − x6)} − {W1
8(x1 − x5) + W3
8(x3 − x7)}
X3 = W0
4{(W0
8 x0 − x4) − W2
8(x2 − x6)} + W1
4{W1
8(x1 − x5) − W3
8(x3 − x7)}
X7 = W0
4{(W0
8 x0 − x4) − W2
8(x2 − x6)} − W1
4{W1
8(x1 − x5) − W3
8(x3 − x7)}
−
−
−
X1
X5
−
X3
X7
−
−
W0
4
W1
4
−
X0
X4
−
X2
X6
W2
x4
x5
x6
x7
x0
x1
x2
x3
W4
W4
W2
W8
W0
4
W1
4
W2
W2
(x0 + x4)
(x1 + x5)
(x2 + x6)
(x3 + x7)
W0
8(x0 − x4)
W1
8(x1 − x5)
W2
8(x2 − x6)
W3
8(x3 − x7)
W0
8
W1
8
W2
8
W3
8
−
−
−
−
N/2の処置に!
高速フーリエ変換 FFT
FFTの一般化をする
1.上半分から,下半分に斜め線を
2.下半分から,上半分も同様に
3.上半分は和演算
4.下半分は差演算し,回転子を添付
5.シグナルフロー図に従って計算
xN
2
xN
2 +1
x0
x1
x2
x3
xN
2 +2
xN
2 +3
N
2
N
2
⋯ ⋯
⋯ ⋯
−
−
−
−
W0
N
W1
N
W2
N
W3
N
上半分と下半分の計算結果をそれぞれ
N/2個の離散信号のためのFFT処理に
引き渡す
元々のデータ数は2のべき乗なので,
以上を繰り返すことによって,最終的
に2個のデータになる.

これがFFTの計算である.
W
N
2
のシグナル
フロー図
W
N
2
のシグナル
フロー図
⋯
⋯
Xn  はビッ
トリバース
順
高速フーリエ変換 FFT
−
−
−
X1
X5
−
X3
X7
−
−
W0
4
W1
4
−
X0
X4
−
X2
X6
x4
x5
x6
x7
x0
x1
x2
x3
W0
4
W1
4
乗算回数
乗算回数はどのくらい?
複素数の計算は大変?
W1
8
−
W2
8
−
W3
8
W4
8
−
−
4回のバタフライ演算
4回のバタフライ演
算
+
4回の複素数の乗算
4回のバタフライ演
算
+
4回の複素数の乗算
log2 N = log2 8 = 3 段バタフライの段数
N
2
回
N
2
回
N
2
回
<例えば> N = 210
= 1024
N2
= 1024 × 1024 ≒ 1000000
N
2
(log2 N − 1) = 512 log2 210
− 1 ≒ 4600
(DFT)
(FFT)
信号処理
<参考資料>
道具としてのフーリエ解析
涌井良幸/涌井貞美
モード解析入門
長松昭男
どっちも良書です

フーリエ解析〜「フーリエ級数」から「高速フーリエ変換」まで〜

  • 1.
    けんゆー @kenyu0501_(Twitter)  山口大学大学院 博士課程/学術研究員/ 信号処理を学ぼう! ~フーリエ解析編!!~ 良ければフォロー して下さい 目次 0. 波形について復習 1. フーリエ級数 2. 複素フーリエ級数 3. 連続なフーリエ変換 4. 離散フーリエ変換 (DFT) 5. 高速フーリエ変換 (FFT) これらについてやっていきます! 基礎からとことん解説していきま す.
  • 2.
  • 3.
    信号について (フーリエ級数への誘い) x y f(x, y) 空間的な関数:画像とか t 時空間的な関数:映像 f(x,y, t) f(t) 時間的な関数:温度とか f(t) 2,3次元の場合を考えると大変なので,1次元で考えることにする 色々な信号について 1次元の関数を「無限個の三角関数の和で表現する」 複雑(かもしれないよう)な関数 → 単純な関数を足したもの 複雑な信号を理解するためのツール!どのような特性があるのかがわかる
  • 4.
    周期 T 1秒 v = 1 T 周期関数 t+ Tt 1次元の時間関数(波形)に関する基本用語の復習 周波数(振動数) f  単位時間に含まれる周期 T の個数 f(t + T) = f(t) フーリエ変換後の空間である周波数領域が 信号処理を行う上でとても大事なものである 信号について (フーリエ級数への誘い) この資料では,時間的な関数(波)を扱います. そのため,基本的な用語や記号について復習しておきましょう! 波形の処理をする上でかなり大事な概念をちょっとだけ先に取り上げます.
  • 5.
    θ cos θ sin θ P(x,y) x y フーリエ変換は与えらた関数を三角関数(正弦波)で表す 正弦波は円と深く関わる θを動的に捉え,動径OPが単位時間あたりに進む角を角周波数 ω とすると, 以下の関係が成り立つ O y = sin θ x = cos θ θ = ωt 角周波数 ω で動径が回転するとき, その動径の単位時間あたりの回転数は振動数(周波数) fなので f = ω 2π 角周波数 ω は周期 T との関係だと,以下になる f = 1 T ω = 2π T 単位円 角周波数 信号について (フーリエ級数への誘い)
  • 6.
    フーリエ解析 その1 ~フーリエ級数・直交基底~ f(t) = a0+ a1 cos ω0t + b1 sin ω0t + a2 cos 2ω0t + b2 sin 2ω0t + ⋯ ◼フーリエ級数って何???って人 ∫ 2 T − 2 T 1 ⋅ sin nω0tdt = ∫ 2 T − 2 T 1 ⋅ cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 ◼直交基底って何???って人 f(t) = a0 + ∞ ∑ n=1 {an cos 2πn T0 t + bn sin 2πn T0 t} けんゆー @kenyu0501_(Twitter)  山口大学大学院 博士課程/ 学術研究員/
  • 7.
    フーリエ級数 数や関数の列を無限に加え合わせたもの f(t) a0 a1 cos ω0t a2cos 2ω0t b2 sin 2ω0t b1 sin ω0t ・ ・ ・ ・ ・ ・ 関数 f(t) がある値の倍数の角周波数 ω0 をもつ正弦波に分解される n = 0 n = 1 n = 2 f(t) = a0 + a1 cos ω0t + b1 sin ω0t + a2 cos 2ω0t + b2 sin 2ω0t + ⋯ フーリエ級数で表したい関数 その関数から決められる定数 角周波数は定数倍になる → (1.5倍とか,2.3倍とか,半端な数字にならない) フーリエ級数    ・・・「関数が無限個の三角関数の和で表わせる」    ・・・「グラフが正弦波の重ね合わせで表わせる」
  • 8.
    フーリエ級数の基本周期と基本周波数について    ・・・「基本周波数の整数倍の正弦波しか出てこないことになる」 フーリエ級数 a0 a1 cos ω0t a2cos 2ω0t b2 sin 2ω0t b1 sin ω0t ・ ・ ・ ・ ・ ・ n = 0 n = 1 n = 2 f(t) 基本周期が 0.1s なら,基本周波数は 10Hz になる.
 その整数倍しか現れないので,10Hz, 20Hz, 30Hzの成分,,,になる. なぜなら,基本周期の中で,整数個の波が収まらないといけないため! 足し合わせて周期的な関数にするため 基本周期 T0 ω0 = 2π T0 f0 = 1 T0 基本周期 T0 によって, 基本周波数 f0 が決まる 基本周波数 f0 によって 基本角周波数 ω0 が決まる
  • 9.
    フーリエ級数 f(t) t a0 a1 a2 b2 b1 a3 b3 ・ ・ ・ v = n T ωn = 2nπ T 角周波数 周波数 1,cos 2nπt T , sin 2nπt T 1, cos ωnt, sin ωnt 時間領域 周波数領域 フーリエ級数の和を構成する基本波
  • 10.
    フーリエ級数 f(t) T 2 − T 2 の間の関数を考える− T 2 ≤ t ≤ T 2 フーリエ級数は有限区間で考える.対象は周期関数である. f(t)= a0 + (a1 cos 2πt T + b1 sin 2πt T ) + (a2 cos 4πt T + b2 sin 4πt T ) + ⋯ + (an cos 2nπt T + bn sin 2nπt T ) + ⋯ (幅が T であれば何でも良い) ・ ・ ・ a0 = 1 T ∫ 2 T − 2 T f(t)dt an = 2 T ∫ 2 T − 2 T f(t)cos 2nπt T dtbn = 2 T ∫ 2 T − 2 T f(t)sin 2nπt T dt フーリエ級数の理論 フーリエ級数展開・・・関数をフーリエ級数で表すこと で定義されたフーリエ係数( a0, a1, a2, ・・・, b1, b2, ・・・)を求める− T 2 ≤ t ≤ T 2 → 後ほど詳しく導出する f(t) = a0 + ∞ ∑ n=1 {an cos 2πn T0 t + bn sin 2πn T0 t}
  • 11.
    フーリエ級数 f(t) = a0+ (a1 cos 2πt T + b1 sin 2πt T ) + (a2 cos 4πt T + b2 sin 4πt T ) + ⋯ + (an cos 2nπt T + bn sin 2nπt T ) + ⋯ a0 a1 a2 b2 b1 a3 b3 ・ ・ ・ 周期 T の周期関数 (繰り返す) f(t) T 2 − T 2 a0 a1 a2 b2 b1 a3 b3 ・ ・ ・ a0 a1 a2 b2 b1 a3 b3 ・ ・ ・ フーリエ級数は,周期 T の関数 にすることf(t) フーリエ級数は周期 T の周期関数である
  • 12.
  • 13.
    フーリエ級数 e1 e2 e1 ⋅e2 = 0 ∫ a b f(t)g * (t)dt関数の内積 (b ≤ t ≤ a) 関数の内積って 平面ベクトルと数学的に一緒 g * (t) = g(t)が実数の場合g(t) 直交とは!? 「基底」となる関数セットは直交性を持たなければいけない. 二つのベクトルが直交であるとき,内積は0 関数の内積ってどう書くのか!? 以上の関数の積分が0のとき,各関数は直交している
  • 14.
    関数 f(t) を直交する基底とな る関数 で表したのがフーリエ級数 フーリエ級数 f(t)= a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯ f(t) cos ω0t sin ω0t 1, cos nω0t, sin nω0t ∫ 2 T − 2 T 1 ⋅ sin nω0tdt = ∫ 2 T − 2 T 1 ⋅ cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t sin mω0tdt = 0 ∫ 2 T − 2 T cos nω0t cos mω0tdt = 0 ∫ 2 T − 2 T 12 dt = T ∫ 2 T − 2 T sin n2 ω0tdt = ∫ 2 T − 2 T cos n2 ω0tdt = T 2 「フーリエ係数の導出に必要な性質」 「直交基底」
  • 15.
    フーリエ級数 「フーリエ係数( a0, an,bn )の導出」 cos nω0t, sin nω0t a0 「全ての項に1を掛けて積分」 → 直交基底の性質(積分値=0)から導出できる ∫ 2 T − 2 T f(t)dt = ∫ 2 T − 2 T a0dt + ∫ 2 T − 2 T a1 cos ω0tdt + ∫ 2 T − 2 T b1 sin ω0tdt + ⋯ + ∫ 2 T − 2 T an cos nω0tdt + ∫ 2 T − 2 T bn sin nω0tdt + ⋯ ∫ 2 T − 2 T 1 ⋅ sin nω0tdt = ∫ 2 T − 2 T 1 ⋅ cos nω0tdt = 0 「直交基底」の性質ここだけ残る ∫ 2 T − 2 T f(t)dt = a0[t] 2 T − 2 T a0 = 1 T ∫ 2 T − 2 T f(t)dt 0 0 0 0 同様に an, bn も,それぞれ導出できる f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯ を全体に掛けて積分
  • 16.
    フーリエ級数 「フーリエ係数( a0, an,bn )の導出」 +⋯ + ∫ 2 T − 2 T an cos nω0t cos nω0tdt + ∫ 2 T − 2 T bn sin nω0t cos nω0tdt + ⋯ an 「全ての項に を掛けて積分 ∫ 2 T − 2 T f(t)cos nω0tdt = ∫ 2 T − 2 T a0 cos nω0tdt + ∫ 2 T − 2 T a1 cos ω0t cos nω0tdt + ∫ 2 T − 2 T b1 sin ω0t cos nω0tdt 「直交基底」の性質ここだけ残る an = 2 T ∫ 2 T − 2 T f(t)cos nω0tdt 0 0 0 0 f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯ cos nω0t ∫ 2 T − 2 T f(t)cos nω0tdt = ∫ 2 T − 2 T an cos nω0t cos nω0tdt ∫ 2 T − 2 T sin n2 ω0tdt = ∫ 2 T − 2 T cos n2 ω0tdt = T 2 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 ∫ 2 T − 2 T cos nω0t cos mω0tdt = 0
  • 17.
    フーリエ級数 「フーリエ係数( a0, an,bn )の導出」 +⋯ + ∫ 2 T − 2 T an cos nω0t sin nω0tdt + ∫ 2 T − 2 T bn sin nω0t sin nω0tdt + ⋯ bn 「全ての項に を掛けて積分 ∫ 2 T − 2 T f(t)sin nω0tdt = ∫ 2 T − 2 T a0 sin nω0tdt + ∫ 2 T − 2 T a1 cos ω0t sin nω0tdt + ∫ 2 T − 2 T b1 sin ω0t sin nω0tdt 「直交基底」の性質ここだけ残る bn = 2 T ∫ 2 T − 2 T f(t)sin nω0tdt 0 0 0 0 f(t) = a0 + a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯ sin nω0t ∫ 2 T − 2 T f(t)sin nω0tdt = ∫ 2 T − 2 T bn sin nω0t sin nω0tdt ∫ 2 T − 2 T sin n2 ω0tdt = ∫ 2 T − 2 T cos n2 ω0tdt = T 2 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t sin mω0tdt = 0
  • 18.
    フーリエ級数 おさらい f(t) =a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯ f(t) cos ω0t sin ω0t 関数 f(t) を直交する基底とな る関数 で表したのがフーリエ級数 1, cos nω0t, sin nω0t ∫ 2 T − 2 T 1 ⋅ sin nω0tdt = ∫ 2 T − 2 T 1 ⋅ cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t sin mω0tdt = 0 ∫ 2 T − 2 T cos nω0t cos mω0tdt = 0 「直交基底」 ∫ 2 T − 2 T 12 dt = T 「フーリエ係数の導出に必要な性質」 ∫ 2 T − 2 T sin n2 ω0tdt = ∫ 2 T − 2 T cos n2 ω0tdt = T 2 f(t) = a0 + (a1 cos 2πt T + b1 sin 2πt T ) + (a2 cos 4πt T + b2 sin 4πt T ) + ⋯ + (an cos 2nπt T + bn sin 2nπt T ) + ⋯ a0 = 1 T ∫ 2 T − 2 T f(t)dt an = 2 T ∫ 2 T − 2 T f(t)cos 2nπt T dt bn = 2 T ∫ 2 T − 2 T f(t)sin 2nπt T dt
  • 19.
    フーリエ解析 その1 ~フーリエ級数・直交基底 (練習問題編)~ f(t) =a0 + a1 cos ω0t + b1 sin ω0t + a2 cos 2ω0t + b2 sin 2ω0t + ⋯ フーリエ級数って何???って人 ∫ 2 T − 2 T 1 ⋅ sin nω0tdt = ∫ 2 T − 2 T 1 ⋅ cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 直交基底って何???って人 けんゆー @kenyu0501_  山口大学大学院 博士課程/ 学術研究員/ (練習問題編) 解説はYoutubeに!
  • 20.
    フーリエ解析 その2 ~複素フーリエ級数とは~ f(t) = ⋯+ c−ne−i 2πnt T + ⋯ + c−1e−i 2πt T + c0 + c1ei 2πt T + ⋯ + c+nei 2πnt T + ⋯ ◼複素フーリエ級数って何??? ∫ 2 T − 2 T ei 2πm T t e−i 2πn T t dt = ◼複素フーリエ級数の直交基底って何??? { 0 (m ≠ n) T (m = n) eiθ = cos θ + i sin θ オイラーの公式も使うよ! けんゆー @kenyu0501_(Twitter)  山口大学大学院 博士課程/ 学術研究員/
  • 21.
    複素フーリエ級数 f(t) = a0+ a1 cos ω0t + b1 sin ω0t + ⋯ + a2 cos nω0t + b2 sin nω0t + ⋯ これまでのフーリエ級数の理論 ⇨ 実数の世界の展開 複素数の世界の展開する  ・展開式が綺麗になる  ・フーリエ変換につながる オイラーの公式 eiθ = cos θ + i sin θ 実数と複素数の世界を 結びつけるすごい式 複素指数関数 eiθ = ei 2π T t (e−iθ = cos θ − i sin θ) 複素フーリエ級数はこの複素指数関数で展開するもの f(t) = ⋯ + c−ne−i 2πnt T + ⋯ + c−1e−i 2πt T + c0 + c1ei 2πt T + ⋯ + cnei 2πnt T + ⋯
  • 22.
    複素フーリエ級数 複素指数関数も直交性を持つ
  複素指数関数は三角関数から出来ているので,三角関数の直交性を引き継いでいる f(t) = ⋯+ c−ne−i 2πnt T + ⋯ + c−1e−i 2πt T + c0 + c1ei 2πt T + ⋯ + cnei 2πnt T + ⋯ 「直交基底」である必要がある → お互いの関数の積分値が0
 (平面ベクトルでいう内積=0) P e1 e2 O OP = a1e1 + a2e2 f(t) cnei 2πn T t c−ne−i 2πn T t f(t) = ⋯ + c−ne−i 2πnt T + ⋯ + cnei 2πnt T + ⋯ 関数空間の1点 f(t) は
 直交基底となる関数 セットで展開される 平面ベクトルは, 直交する「基底ベ クトル」の一次結 合で表される
  • 23.
    ∫ 2 T − 2 T ei 2πm Tt e−i 2πn T t dt = { 0 (m ≠ n) T (m = n) 複素フーリエ級数 f(t) = a0 + ⋯ + an cos nω0t + bn sin nω0t + ⋯ f(t) cos ω0t sin ω0t ∫ 2 T − 2 T 1 ⋅ sin nω0tdt = ∫ 2 T − 2 T 1 ⋅ cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t cos nω0tdt = 0 ∫ 2 T − 2 T sin nω0t sin mω0tdt = 0 ∫ 2 T − 2 T cos nω0t cos mω0tdt = 0 「直交基底」 f(t) = a0 + (a1 cos 2πt T + b1 sin 2πt T ) + (a2 cos 4πt T + b2 sin 4πt T ) + ⋯ + (an cos 2nπt T + bn sin 2nπt T ) + ⋯ 複素指数関数の「直交基底」 フーリエ級数の復習 ・・・ちなみにフーリエ級数の直交基底はこちら 定義域の概念は持っている (周期 T ) (n = 0, ± 1, ± 2, ⋯)
  • 24.
    複素フーリエ級数 複素フーリエ級数の係数を導出する 「展開式の両辺に,右から    をかける」 → 「その後区間T で積分」 f(t) = ⋯ + c−ne−i 2πnt T + ⋯ + c−1e−i 2πt T + c0 + c1ei 2πt T + ⋯ + cnei 2πnt T + ⋯ cn ∫ 2 T − 2 T f(t)ei−2πnt T dt = ⋯ + cn−1 ∫ 2 T − 2 T ei 2π(n − 1)t T e−i 2πnt T dt + cn ∫ 2 T − 2 T ei 2πnt T e−i 2πnt T dt + cn+1 ∫ 2 T − 2 T ei 2π(n + 1)t T e−i 2πnt T dt + ⋯ e−i 2πnt T 0 0 ここだけ残る ∫ 2 T − 2 T f(t)e−i 2πnt T dt = cn ∫ 2 T − 2 T ei 2πnt T e−i 2πnt T dt T になる cn = 1 T ∫ 2 T − 2 T f(t)e−i 2πnt T dt ∫ 2 T − 2 T ei 2πm T t e−i 2πn T t dt = { 0 (m ≠ n) T (m = n) 「直交基底」の性質
  • 25.
    フーリエ解析 その2 ~複素フーリエ級数(練習問題)とは~ f(t) = ⋯+ c−ne−i 2πnt T + ⋯ + c−1e−i 2πt T + c0 + c1ei 2πt T + ⋯ + c−nei 2πnt T + ⋯ ◼複素フーリエ級数って何??? ∫ 2 T − 2 T ei 2πm T t e−i 2πn T t dt = ◼複素フーリエの直交基底って何??? けんゆー @kenyu0501_  山口大学大学院 博士課程/ 学術研究員/ { 0 (m ≠ n) T (m = n) (練習問題編) f(t) = { 0 (−π ≤ t < 0) 1 (0 ≤ t ≤ π) ◼次の関数を複素フーリエ級数で表せ. −π π t f(t) 1 解説はYoutubeに!
  • 26.
    フーリエ解析 その3 ~フーリエ変換とは~ ◼フーリエ変換って何??? 時間領域 周波数領域 周波数領域を確認 できたら何が嬉しいの? F(ω) = ∫ ∞ −∞ f(t)e−iωt dt フーリエ変換ってなに??? けんゆー@kenyu0501_(Twitter)  山口大学大学院 博士課程/ 学術研究員/ 離散フーリエ変換ではないよ!
 このフーリエ変換は連続の関数に関するフーリエ変換
  • 27.
    複素フーリエ級数 (数学のお話) 複素フーリエ級数の係数を導出する 「展開式の両辺に,右から    をかける」 →「その後区間 T で積分」 f(t) = ⋯ + c−ne−i 2πnt T + ⋯ + c−1e−i 2πt T + c0 + c1ei 2πt T + ⋯ + cnei 2πnt T + ⋯ cn ∫ 2 T − 2 T f(t)ei−2πnt T dt = ⋯ + cn−1 ∫ 2 T − 2 T ei 2π(n − 1)t T e−i 2πnt T dt + cn ∫ 2 T − 2 T ei 2πnt T e−i 2πnt T dt + cn+1 ∫ 2 T − 2 T ei 2π(n + 1)t T e−i 2πnt T dt + ⋯ e−i 2πnt T 0 0 ここだけ残る ∫ 2 T − 2 T f(t)e−i 2πnt T dt = cn ∫ 2 T − 2 T ei 2πnt T e−i 2πnt T dt T になる cn = 1 T ∫ 2 T − 2 T f(t)e−i 2πnt T dt ∫ 2 T − 2 T ei 2πm T t e−i 2πn T t dt = { 0 (m ≠ n) T (m = n) 「直交基底」の性質
  • 28.
    フーリエ変換 (数学のお話) f(t) =⋯ + c−ne−inω0t + ⋯ + c−1e−iω0t + c0 + c1eiω0t + ⋯ + cneinω0t + ⋯ cn = 1 T ∫ 2 T − 2 T f(t)e−inω0t dt 複素フーリエ級数の場合 f(t) T c0 c−1 c−2 c2 c1 c−3 c3 ・ ・ ・ ω0 = 2π T (角周波数 ) 時間領域 周波数領域 角周波数の倍数の
 フーリエ係数を導出する 関数を複素指数関数で展開する einω0t ・定義区間が限定 (周期関数) F(ω) = ∫ ∞ −∞ f(t)e−iωt dt もともと決めていた角周波数ではなく, 関数から直接周波数情報を取り出す. フーリエ変換の場合 n 番目の縛り
 (とびとび)
  • 29.
    時間領域 周波数領域F(ω) = ∫ ∞ −∞ f(t)e−iωt dt f(t) = 1 2π∫ ∞ −∞ F(ω)eiωt dt フーリエ変換 逆フーリエ変換 P e1 e2 O OP = a1e1 + a2e2 f(t) eiω1t eiω2t 関数空間の1点 f(t) は
 直交基底となる関数 セットで展開される 平面ベクトルは, 直交する「基底ベ クトル」の一次結 合で表される F(ω) = ∫ ∞ −∞ f(t)e−iωt dt 連続している いかなる角周波数もok フーリエ変換 (数学のお話)
  • 30.
    時間領域 周波数領域F(ω) = ∫ ∞ −∞ f(t)e−iωt dt f(t) = 1 2π∫ ∞ −∞ F(ω)eiωt dt フーリエ変換 逆フーリエ変換 フーリエ変換の基底 eiωt F(ω) = ∫ ∞ −∞ f(t)e−iωt dt 複素数の内積は, 一方を共役な複素数にして掛け合わせる 複素正弦波 フーリエ変換 (数学のお話)
  • 31.
    f(t) T c0 c−1 c−2 c2 c1 c−3 c3 ・ ・ ・ ω0 = 2π T (角周波数 ) 時 間 領 域 周 波 数 領 域 einω0t n番目の縛り
 (とびとび) ・ ・ ・ f(t) F(ω) t 0 −∞ +∞ 角周波数は連続的な値. そして連続関数になる. 複素フーリエ級数 フーリエ変換 eiωt フーリエ変換 (数学のお話)
  • 32.
    (練習問題編) f(t) = { 0 (t< 0) e−t (0 ≤ t) z ◼次の関数をフーリエ変換して得られる関数は? t f(t) 1 0 フーリエ解析 その3 ~フーリエ変換(練習問題)とは~ けんゆー @kenyu0501_  山口大学大学院 博士課程/ 学術研究員/ f(t) = { 1 (− ϵ 2 ≤ t ≤ ϵ 2 ) 0 (otherwise) f(t) 1 0− ϵ 2 ϵ 2 ◼次の関数をフーリエ変換して得られる関数は? 解説はYoutubeに!
  • 33.
    フーリエ解析 その4 ~離散フーリエ変換(DFT)とは~ ◼ディジタル信号 (離散信号) のフーリエ変換 x(t)x(t) 0 D 2D 3D 4D t t 離散信号 D : サンプリング周期 T = ND けんゆー @kenyu0501_(Twitter)  山口大学大学院 博士課程/ 学術研究員/
  • 34.
    離散フーリエ変換 DFT (実際に現場で使うお話) 実験などでセンシングした値には,離散フーリエ変換を使う! •• • • • • • • フーリエ変換は関数に対して使うもの(数学) • • • • • • x(t) x(t) 0 D 2D 3D 4D フーリエ変換で議論していた
 関数は連続的 実験データは一定間隔で 数値化されたデータになる t t 離散信号 D : サンプリング周期 T = ND 離散フーリエ変換は,有限の時間 T を扱うので,
 どっちかというと複素フーリエ級数に近いぞ! 離散信号は
 積分できるの!?
  • 35.
    信号処理 AD変換 (Analog-to-digital conversion) 指先脈波センサー ttτ t t 標本化(サンプリング) 量子化 サンプリング間隔 0000 0001 0010 0011 0100 0101 0111 0110 1000 アナログ信号 ディジタル信号 (0011,0100,0110,1000,0011,0011,0011,0101,0111,0100,0011,⋯) アナログ信号  時間的に連続で変化する信号 ディジタル信号(不連続なデータの集合)  一定時間間隔のとびとびの値で表現した信号 計測機器のスペック って大事なのです ビット:2進数の桁の単位
  • 36.
    高速フーリエ変換 FFT ナイキストの標本化定理 ある正弦波を標本化する際には,その周期の半分よりも短い標本化間隔を用いなければならない 周期 T 周期の 半分T/2 標本化間隔 
 (サンプリング間隔) τ T τ T τ T τ zτ < T 2 τ = T 2 T 2 < τ < T τ = T 2 直線になる 周期が大きい波が 間違って出てくる 零点ばかりだと 直線が出てくる 標本化点数を通過する波のうちで最も ゆっくりとした波として,1個だけ正し く再現できる
  • 37.
    離散フーリエ変換 DFT (実際に現場で使うお話) x(t) t 時間領域 周波数領域 F(ω)= ∫ ∞ −∞ x(t)e−iωt dt x(t) 0 D 2D 3D 4D t 離散信号 D : サンプリング周期 T = ND ω F(ω) ω F(ω) 常に0 (とびとびの信号なので) 積分積分 離散信号に関しては工夫が必要 離散フーリエ変換は積分できない!? • • • • • • • •
  • 38.
    x(t) 0 D 2D3D 4D t T = 4D 離散フーリエ変換 DFT (実際に現場で使うお話) 0 ≤ t < T 離散フーリエ変換で周波数領域にもっていく工夫 有限区間で解析(Tは含まない) x(t) = ⋯ + c−nei 2π T (−nt) + ⋯ + c−1ei 2π T (−t) + c0 + c1ei 2π T (nt) + ⋯ + cnei 2π T (+nt) + ⋯ x0 x1 x2 x3 x(t) = c01 + c1ei 2π 4D (1t) + c2ei 2π 4D (2t) + c3ei 2π 4D (3t) 4つの複素正弦波だけ使用できれば良い これが4つの離散信号の離散フーリエ変換の基本の式になります 離散信号 c(t) = N ∑ n=0 x(t)ei 2π T (nt)
  • 39.
    x(t) 1 ei 2π 4D (nt)関数空間の1点x(t) は,直 交する4つの複素正弦波の一 次結合で表されることにな る 離散フーリエ変換 DFT (実際に現場で使うお話) x(t) 0 D 2D 3D 4D t T = 4D x0 x1 x2 x3 x(t) = c01 + c1ei 2π 4D (1t) + c2ei 2π 4D (2t) + c3ei 2π 4D (3t) 複素フーリエ級数と同じだね! 離散信号 離散信号 x0 ~ x3 から,周波数情報 c0 ~ c3が得られる 展開された各項(複素正弦波)はもちろん直交している
  • 40.
    離散フーリエ変換 DFT (実際に現場で使うお話) 離散信号x0 ~ x3 から,周波数情報 c0 ~ c3が得られる x(D) = c0 + c1ei 2π 4 + c2ei 4π 4 + c3ei 6π 4 t へ 0, D, 2D, 3D を代入して,連立方程式を立てる x(0) = c0 + c1 + c2 + c3 x(t) = c01 + c1ei 2π 4D (1t) + c2ei 2π 4D (2t) + c3ei 2π 4D (3t) x(2D) = c0 + c1ei 4π 4 + c2ei 8π 4 + c3ei 12π 4 x(3D) = c0 + c1ei 6π 4 + c2ei 12π 4 + c3ei 18π 4 以上の連立方程式を解いて,離散信号 x0 ~ x3 か ら,周波数情報 c0 ~ c3の関係を導出する
  • 41.
    離散フーリエ変換 DFT (実際に現場で使うお話) x0 x1 x2 x3 = 11 1 1 1 ei 2π 4 ei 4π 4 ei 6π 4 1 ei 4π 4 ei π 4 ei 12π 4 1 ei 6π 4 ei 12π 4 ei 18π 4 c0 c1 c2 c3 x(D) = c0 + c1ei 2π 4 + c2ei 4π 4 + c3ei 6π 4 x(0) = c0 + c1 + c2 + c3 x(2D) = c0 + c1ei 4π 4 + c2ei 8π 4 + c3ei 12π 4 x(3D) = c0 + c1ei 6π 4 + c2ei 12π 4 + c3ei 18π 4 以上の連立方程式を解いて,離散信号 x0 ~ x3 か ら,周波数情報 c0 ~ c3の関係を導出する 行列形式に変更 各行ベクトルはもちろん直交している
  • 42.
    離散フーリエ変換 DFT (実際に現場で使うお話) x0 x1 x2 x3 = 11 1 1 1 ei 2π 4 ei 4π 4 ei 6π 4 1 ei 4π 4 ei π 4 ei 12π 4 1 ei 6π 4 ei 12π 4 ei 18π 4 c0 c1 c2 c3 1 1 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 = 1 1 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 1 1 1 1 1 ei 2π 4 ei 4π 4 ei 6π 4 1 ei 4π 4 ei π 4 ei 12π 4 1 ei 6π 4 ei 12π 4 ei 18π 4 c0 c1 c2 c3 右辺の正方行列の各成分を共役な複素数にして転置した行列を両辺にかける 4 =
  • 43.
    離散フーリエ変換 DFT (実際に現場で使うお話) 離散信号が4つの場合の離散フーリエ変換の公式 4 c0 c1 c2 c3 = 11 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 4 c0 c1 c2 c3 = X0 X1 X2 X3 X0 X1 X2 X3 = 1 1 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 理論展開はフーリエ級数と同じである
  • 44.
    離散フーリエ変換 DFT (実際に現場で使うお話) 11 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 = 4 c0 c1 c2 c3 4 c0 c1 c2 c3 = X0 X1 X2 X3 x0 x1 x2 x3 = 1 1 1 1 1 ei 2π 4 ei 4π 4 ei 6π 4 1 ei 4π 4 ei π 4 ei 12π 4 1 ei 6π 4 ei 12π 4 ei 18π 4 c0 c1 c2 c3 c0 c1 c2 c3 = 1 4 X0 X1 X2 X3 元々の式に代入する 置き換え逆離散フーリエ変換の導出 x0 x1 x2 x3 = 1 4 1 1 1 1 1 ei 2π 4 ei 4π 4 ei 6π 4 1 ei 4π 4 ei π 4 ei 12π 4 1 ei 6π 4 ei 12π 4 ei 18π 4 X0 X1 X2 X3 逆離散フーリエ変換も結局は, 離散フーリエ変換と同じ!
  • 45.
    離散フーリエ変換 DFT (実際に現場で使うお話) X0 X1 X2 X3 = 11 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 X0 X1 X2 X3 = 1 1 1 1 1 −i −1 i 1 −1 1 −1 1 i −1 −i x0 x1 x2 x3 オイラーの公式 eiθ = cos θ + i sin θ e−iθ = cos θ − i sin θ e−i π 2 = cos π 2 − i sin π 2 e−i π 2 = − i 0 1 e−i π 2 = − iei π 2 = i eiπ = 1 e−iπ = − 1 この正方行列にはある規則性がある この規則性を上手く利用したのが「高速フーリエ変換 (FFT)」
  • 46.
    高速フーリエ変換 FFTへの誘い... X0 X1 X2 X3 = 1 11 1 1 −i −1 i 1 −1 1 −1 1 i −1 −i x0 x1 x2 x3 ◼オイラーの公式により書き直す オイラーの公式 eiθ = cos θ + i sin θ e−iθ = cos θ − i sin θ e−i π 2 = − iei π 2 = i eiπ = 1 e−iπ = − 1 X0 X2 X1 X3 = 1 1 1 1 1 −1 1 −1 1 −i −1 i 1 i −1 −i x0 x1 x2 x3 2行目と3行目を入れ替える E1 = [ 1 1 1 −i] E2 = [ 1 −i 1 i ] −E2 [ E1 E1 E2 −E2] DFTの変換行列が 簡単に表される このような感じで...
  • 47.
    フーリエ解析 その4 ~離散フーリエ変換(練習問題)とは~ (練習問題編) ◼離散信号 {x0, x1,x2, x3} が {1, 1, 0, 0}のとき, 離散フーリエ変換 (DFT)のの係数 X0 ~ X3 を求めよ. けんゆー @kenyu0501_(Twitter)  山口大学大学院 博士課程/ 学術研究員/
  • 48.
    フーリエ解析 その5 ~高速フーリエ変換(FFT)とは~ ◼高速フーリエ変換FFTとは,離散フーリエ変換DFTを高速にするもの! X0 X1 X2 X3 = 1 1 11 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 DFTの変換行列周波数情報を得る ≈ 離散信号を入力 この正方行列にはある規則性がある この規則性を上手く利用したのが「高速フーリエ変換 (FFT)」 けんゆー @kenyu0501_(Twitter)  山口大学大学院 博士課程/ 学術研究員/
  • 49.
    高速フーリエ変換 FFT FFTを理解していくぞ! ・データ数が2のべき乗に従わなければいけない. ・データ数が2, 4,8のときで考えて,一般化まで. ・バタフライ演算による計算の工夫. ・ビットリバースにより計算の並び替え. 具体的に数値を取り上 げて考えていきます バタフライ演算とビット リバースが分かればOK! ただ単に使っているだけではなくて, 内側のアルゴリズムを理解しましょー!
  • 50.
    離散フーリエ変換 DFTのおさらい X0 X1 X2 ⋮ XN−1 = 1 11 ⋯ 1 1 e−i 2π N e−i 4π N ⋯ e−i 2π(N − 1) N 1 e−i 4π N e−i 8π N ⋯ e−i 4π(N − 1) N ⋮ ⋮ ⋮ ⋱ ⋮ 1 e−i 2π(N − 1) N e−i 4π(N − 1) N ⋯ e−i 2π(N − 1)(N − 1) N x0 x1 x2 ⋮ xN−1 X0 X1 X2 X3 = 1 1 1 1 1 e−i 2π 4 e−i 4π 4 e−i 6π 4 1 e−i 4π 4 e−i π 4 e−i 12π 4 1 e−i 6π 4 e−i 12π 4 e−i 18π 4 x0 x1 x2 x3 DFTとはN個のデータ {x0, x1, x2,・・・, xN-1} と,そのデータ長に対応 する複素正弦波の係数{X0, X1, X2,・・・, XN-1}を結びつける変換 N=4のとき 一般化する 変換行列 x0 x1 x2 ⋯ xn−1 t ⋯ N個 X0 X1 X2 ⋯ Xn−1 ω ⋯ 変換行列 N個の離散信号のデータを 処理するには,N2 回の複素 数の積の計算が必要になる N2回の計算回数を大幅に減少させる工夫がある → FFT
  • 51.
    高速フーリエ変換 FFT X0 X1 X2 ⋮ XN−1 = 1 11 ⋯ 1 1 e−i 2π N e−i 4π N ⋯ e−i 2π(N − 1) N 1 e−i 4π N e−i 8π N ⋯ e−i 4π(N − 1) N ⋮ ⋮ ⋮ ⋱ ⋮ 1 e−i 2π(N − 1) N e−i 4π(N − 1) N ⋯ e−i 2π(N − 1)(N − 1) N x0 x1 x2 ⋮ xN−1 高速フーリエ変換 FFT の概要 変換行列 N2回の計算回数を大幅に減少させる工夫がある → FFT 計算の順序を変えて,同類の小さな計算に小分けする N2 → N 2 (log2 N − 1)具体的な乗算(掛け算)回数の値 <例えば> N = 210 = 1024 N2 = 1024 × 1024 ≒ 1000000 N 2 (log2 N − 1) = 512 log2 210 − 1 ≒ 4600 (DFT) (FFT) ・1965年にCooleyとTukeyが広めた. ・「周波数間引き型FFT」と「時間間引き型FFT」の2タイプがある. ・「周波数間引き型FFT」はフーリエ変換後の値を並べ替える. ・「時間間引き型FFT」はフーリエ変換前の時間データを並び替える FFTのデータ数は,2のべき乗になる
  • 52.
    高速フーリエ変換 FFT X0 X1 X2 ⋮ XN−1 = 1 11 ⋯ 1 1 e−i 2π N e−i 4π N ⋯ e−i 2π(N − 1) N 1 e−i 4π N e−i 8π N ⋯ e−i 4π(N − 1) N ⋮ ⋮ ⋮ ⋱ ⋮ 1 e−i 2π(N − 1) N e−i 4π(N − 1) N ⋯ e−i 2π(N − 1)(N − 1) N x0 x1 x2 ⋮ xN−1 回転因子 を導入して,式を見やすくする WN = e−i 2π N WN X0 X1 X2 ⋮ XN−1 = 1 1 1 ⋯ 1 1 WN W2 N ⋯ WN−1 N 1 W2 N W4 N ⋯ W2(N−1) N ⋮ ⋮ ⋮ ⋱ ⋮ 1 W(N−1) N W2(N−1) N ⋯ W(N−1)(N−1) N x0 x1 x2 ⋮ xN−1 複素指数関数のべき乗が複素平面乗では回転をする WN = e−i 2π N W8 = e−i 2π 8 W0 8 = (e−i 2π 8 )0 = 1 W1 8 = e−i 2π 8 = 1 2 − i 1 2 e−iθ = cos θ − i sin θ W2 8 W3 8 W4 8 W5 8 W6 8 W7 8 Re Im W0 8 = W8 8 = W16 8 = ⋯ W1 8 = W9 8 = W17 8 = ⋯ N=8のとき 回転因子で記述することによって, 計算を削減するための工夫ができる.
  • 53.
    高速フーリエ変換 FFT N =2 2の冪に従うデータ数とシグナルフロー図の関係 N = 4 ( X0 X1) = ( 1 1 1 W2) ( x0 x1) W2 = e−i 2π 2 = e−iπ = − 1 W0 2 = W2 2 = W4 2 = 0 W1 2 = W3 2 = W5 2 = − 1 Re Im X0 X1 X2 X3 = 1 1 1 1 1 W1 4 W2 4 W3 4 1 W2 4 W4 4 W6 4 1 W3 4 W6 4 W9 4 x0 x1 x2 x3 W4 = e−i 2π 4 = e−i π 2 = − i Re Im W0 4 = W4 4 = W8 4 = 1 W1 4 = W5 4 = W9 4 = − i W2 4 = W6 4 = − 1 W3 4 = i N = 8 W8 = e−i 2π 8 = e−i π 4 = + 1 2 − 1 2 i X0 X1 X2 ⋮ X7 = 1 1 1 ⋯ 1 1 W8 W2 8 ⋯ W7 8 1 W2 8 W4 8 ⋯ W14 8 ⋮ ⋮ ⋮ ⋱ ⋮ 1 W7 8 W14 8 ⋯ W49 8 x0 x1 x2 ⋮ x7 W0 8 = (e−i 2π 8 )0 = 1 W1 8 = e−i 2π 8 = 1 2 − i 1 2W2 8 W3 8 W4 8 W5 8 W6 8 W7 8 Re Im
  • 54.
    高速フーリエ変換 FFT バタフライ演算とシグナルフロー図 a b a +b a − b − FFTの計算は,2つのデータを加減し,さらに回転因子の k 乗をかけるという基本演算 WN = e−i 2π N a b a + b Wk N(a − b) − Wk N 蝶の羽の形に似ているので, バタフライ演算 この演算の図は シグナルフロー図 図A 図B 2つのデータ a, b を入力したとき, 2つの和を一方に,2つの差を他方に出力 2つのデータ a, b を入力したとき, 2つの和を一方に,2つの差に回転因子を かけた値を他方に出力 さらに,FFTの計算は「ビットリバース」という,順序にデータを並べ替える操作をする
  • 55.
    高速フーリエ変換 FFT バタフライ演算の例 N =2 ( X0 X1) = ( 1 1 1 W1 2) ( x0 x1) データ数 N = 21 回転因子は,N = 1なのでこうなります WN = e−i 2π N W2 = e−i 2π 2 W0 2 = W2 2 = 1 e−iθ = cos θ − i sin θ W1 2 = W3 2 = − 1 Re Im N=2のとき ( = e−iπ = − 1) X0 = (x0 + x1) X1 = (x0 − x1) ( X0 X1) = ( 1 1 1 −1) ( x0 x1) x0 x1 x0 + x1 = X0 x0 − x1 = X1− x0 x1 X0 X1 W2 シグナルフロー図 上のシグナルフロー図の処理 をこのように書いておく
  • 56.
    高速フーリエ変換 FFT N =4 X0 X1 X2 X3 = 1 1 1 1 1 W1 N W2 N W3 N 1 W2 N W4 N W6 N 1 W3 N W6 N W9 N x0 x1 x2 x3 データ数 N = 22 回転因子は,N = 4なのでこうなります WN = e−i 2π N W4 = e−i 2π 4 W0 4 = W4 4 = W8 4 = 1 e−iθ = cos θ − i sin θ W1 4 = W5 4 = W9 4 = − i W2 4 = W6 4 = − 1 W3 4 = i Re Im N=4のとき ( = e−i π 2 = − i) X0 X1 X2 X3 = 1 1 1 1 1 W1 N −1 W3 N 1 −1 1 −1 1 W3 N −1 W1 N x0 x1 x2 x3 とりあえず,実部を代入 バタフライ演算の例
  • 57.
    高速フーリエ変換 FFT 値 2進数逆転 ビットリバース 0 00 00 0 1 01 10 2 2 10 01 1 3 11 11 3 X0 X2 X1 X3 = 1 1 1 1 1 −1 1 −1 1 W1 N −1 W3 N 1 W3 N −1 W1 N x0 x1 x2 x3 値の数を2進数にして, その0と1を全て反転さ せたもの ≈ 周波数情報をもとにビットリバースを行なって,式変形を行う ≈ ≈ ≈ X0 X1 X2 X3 = 1 1 1 1 1 W1 N −1 W3 N 1 −1 1 −1 1 W3 N −1 W1 N x0 x1 x2 x3 フーリエ変換前の操作 N = 4
  • 58.
    高速フーリエ変換 FFT X0 X2 X1 X3 = 1 11 1 1 −1 1 −1 1 W1 N −1 W3 N 1 W3 N −1 W1 N x0 x1 x2 x3 ≈ X0 = x0 + x1 + x2 + x3 X2 = x0 − x1 + x2 − x3 X1 = x0 + x1W1 4 − x2 + x3W3 4 X3 = x0 + x1W3 4 − x2 + x3W1 4 バタフライ演算と似てない? X0 = (x0 + x2) + (x1 + x3) X2 = (x0 + x2) − (x1 + x3) X1 = (x0 − x2) + W1 4(x1 + x3W2 4) = W0 4(x0 − x2) + W1 4(x1 − x3) X3 = (x0 − x2) + W1 4(x1W2 4 + x3) = W0 4(x0 − x2) − W1 4(x1 − x3) N = 4 N = 2 の時の
  • 59.
    高速フーリエ変換 FFT X0 =(x0 + x2) + (x1 + x3) X2 = (x0 + x2) − (x1 + x3) X1 = (x0 − x2) + W1 4(x1 + x3W2 4) = W0 4(x0 − x2) + W1 4(x1 − x3) X3 = (x0 − x2) + W1 4(x1W2 4 + x3) = W0 4(x0 − x2) − W1 4(x1 − x3) (x0 + x2) − (x1 + x3) (x0 + x2) + (x1 + x3) = X0 (x0 + x2) − (x1 + x3) = X2 W0 4(x0 − x2) − W1 4(x1 − x3) W0 4(x0 + x2) + W1 4(x1 − x3) = X1 W0 4(x0 + x2) − W1 4(x1 − x3) = X3 W2 W2 N = 4
  • 60.
    高速フーリエ変換 FFT (x0 +x2) − (x1 + x3) (x0 + x2) + (x1 + x3) = X0 (x0 + x2) − (x1 + x3) = X2 W0 4(x0 − x2) − W1 4(x1 − x3) W0 4(x0 + x2) + W1 4(x1 − x3) = X1 W0 4(x0 + x2) − W1 4(x1 − x3) = X3 W2 W2 N = 4 x0 x1 X0 X1 W4x2 x3 X2 X3 x0 − (x0 + x2) (x1 + x3) − W0 4(x0 − x2) W1 4(x1 − x3) x1 x2 x3 W0 4 W1 4 − X0 X2 W2 − X1 X3 W2 N = 2のシグナルフロー図 が内側にある
  • 61.
    高速フーリエ変換 FFT ビットリバース N =8 データ数 N = 23 先にシグナルフロー図から − − − X1 X5 − X3 X7 − − W0 4 W1 4 − X0 X4 − X2 X6 W2 x4 x5 x6 x7 x0 x1 x2 x3 W4 W4 W2 W8 W0 4 W1 4 W2 W2 ビットリバース データ数が
 N = 22 の時の処理 データ数が
 N = 2の時の処理 − − − − W0 8 W1 8 W2 8 W3 8
  • 62.
    高速フーリエ変換 FFT N =8 X0 X1 X2 ⋮ X7 = 1 1 1 ⋯ 1 1 W8 W2 8 ⋯ W7 8 1 W2 8 W4 8 ⋯ W14 8 ⋮ ⋮ ⋮ ⋱ ⋮ 1 W7 8 W14 8 ⋯ W49 8 x0 x1 x2 ⋮ x7 DFTの変換式 W0 8 = (e−i 2π 8 )0 = 1 W1 8 = e−i 2π 8 = 1 2 − i 1 2W2 8 W3 8 W4 8 W5 8 W6 8 W7 8 Re Im W8 = e−i 2π 8 = 1 2 − i 1 2 回転因子 値 2進数 逆転 ビットリバース 0 000 000 0 1 001 100 4 2 010 010 2 3 011 110 6 4 100 001 1 5 101 101 5 6 110 011 3 7 111 111 7 ≈ ≈ Xn はビット リバース順 X0 = x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 X4 = x0 − x1 + x2 − x3 + x4 − x5 + x6 − x7 X2 = x0 + x1W2 8 − x2 − x3W2 8 + x4 + x5W2 8 − x6 − x7W2 8 X6 = x0 − x1W2 8 − x2 + x3W2 8 + x4 − x5W2 8 − x6 + x7W2 8 X1 = x0 + x1W8 + x2W2 8 + x3W3 8 − x4 − x5W8 − x6W2 8 − x7W3 8 X5 = x0 − x1W8 + x2W2 8 − x3W3 8 − x4 + x5W8 − x6W2 8 + x7W3 8 X3 = x0 + x1W3 8 − x2W2 8 − x3W5 8 − x4 − x5W3 8 + x6W2 8 + x7W5 8 X7 = x0 − x1W3 8 − x2W2 8 + x3W5 8 − x4 + x5W3 8 + x6W2 8 − x7W5 8 Re Im W0 4 = 1 W1 4 = − i W2 4 = − 1 W3 4 = i W4 = e−i 2π 4 = − i W0 4 = W0 8 W1 4 = W2 8 を使って式変形
  • 63.
    高速フーリエ変換 FFT X0 =x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 X4 = x0 − x1 + x2 − x3 + x4 − x5 + x6 − x7 X2 = x0 + x1W2 8 − x2 − x3W2 8 + x4 + x5W2 8 − x6 − x7W2 8 X6 = x0 − x1W2 8 − x2 + x3W2 8 + x4 − x5W2 8 − x6 + x7W2 8 X1 = x0 + x1W8 + x2W2 8 + x3W3 8 − x4 − x5W8 − x6W2 8 − x7W3 8 X5 = x0 − x1W8 + x2W2 8 − x3W3 8 − x4 + x5W8 − x6W2 8 + x7W3 8 X3 = x0 + x1W3 8 − x2W2 8 − x3W5 8 − x4 − x5W3 8 + x6W2 8 + x7W5 8 X7 = x0 − x1W3 8 − x2W2 8 + x3W5 8 − x4 + x5W3 8 + x6W2 8 − x7W5 8 N = 8 N = 4 が出てくるように変更する X0 = {(x0 + x4) + (x2 + x6)} + {(x1 + x5) + (x3 + x7)} X4 = {(x0 + x4) + (x2 + x6)} − {(x1 + x5) + (x3 + x7)} X2 = W0 4{(x0 + x4) − (x2 + x6)} + W1 4{(x1 + x5) − (x3 + x7)} X6 = W0 4{(x0 + x4) − (x2 + x6)} − W1 4{(x1 + x5) − (x3 + x7)} X1 = {W0 8(x0 − x4) + W2 8(x2 − x6)} + {W1 8(x1 − x5) + W3 8(x3 − x7)} X5 = {W0 8(x0 − x4) + W2 8(x2 − x6)} − {W1 8(x1 − x5) + W3 8(x3 − x7)} X3 = W0 4{(W0 8 x0 − x4) − W2 8(x2 − x6)} + W1 4{W1 8(x1 − x5) − W3 8(x3 − x7)} X7 = W0 4{(W0 8 x0 − x4) − W2 8(x2 − x6)} − W1 4{W1 8(x1 − x5) − W3 8(x3 − x7)} − − − X1 X5 − X3 X7 − − W0 4 W1 4 − X0 X4 − X2 X6 W2 x4 x5 x6 x7 x0 x1 x2 x3 W4 W4 W2 W8 W0 4 W1 4 W2 W2 (x0 + x4) (x1 + x5) (x2 + x6) (x3 + x7) W0 8(x0 − x4) W1 8(x1 − x5) W2 8(x2 − x6) W3 8(x3 − x7) W0 8 W1 8 W2 8 W3 8 − − − − N/2の処置に!
  • 64.
    高速フーリエ変換 FFT FFTの一般化をする 1.上半分から,下半分に斜め線を 2.下半分から,上半分も同様に 3.上半分は和演算 4.下半分は差演算し,回転子を添付 5.シグナルフロー図に従って計算 xN 2 xN 2 +1 x0 x1 x2 x3 xN 2+2 xN 2 +3 N 2 N 2 ⋯ ⋯ ⋯ ⋯ − − − − W0 N W1 N W2 N W3 N 上半分と下半分の計算結果をそれぞれ N/2個の離散信号のためのFFT処理に 引き渡す 元々のデータ数は2のべき乗なので, 以上を繰り返すことによって,最終的 に2個のデータになる.
 これがFFTの計算である. W N 2 のシグナル フロー図 W N 2 のシグナル フロー図 ⋯ ⋯ Xn  はビッ トリバース 順
  • 65.
  • 66.