第 5 章 離散信号と離散 Fourier 変換 139
6.4 Wavelet 変換: 分解と再構成アルゴリズム
定理6.44 空間L2(R)は次の無限直和として分解される。
L2(R) =V0⊕W0⊕W1⊕. . . . この分解に応じて、各f∈L2(R)は
f=f0+
∑∞ j=0
wj
と一意に表される。
図6.2 スケールjのdyadic区間Ij,k上の関数f の平均化値2j∫
Ij,kf(x)dx と両端点での標本値f(2kj)およびf(k+12j ). fがIj,k上で単調なとき、f(2kj)<
2j∫
Ij,kf(x)dx < f(k+12j )となる。
係
[a, b) −−−−→f [a, b)
τ
y yτ [0,1) −−−−→
f˜
[0.1)
(6.16)
より、[a, b)上の関数fを[0,1)上の関数f˜=τ◦f◦τ−1と自然に同一視することが できる。コンパクトサポート[a, b)上の関数をこの同一視によって[0,1)上の関数と して取り扱うと計算上都合がよい。
一方、関数fをx=. . . ,−2/2j,−1/2j,0,1/2j,2/2j, . . . といった幅2−jのdyadic 区間{Ij,k}k∈Zの端点で関数値を標本化{f(k
2j
)}kすることがある。幅|∆x|= 21j
を持つ間隔∆xで関数値を標本化することによって関数fが十分正しく近似できる
(Shannon-Whittakerの標本化定理3.38)。帯域制限のある信号fの最大周波数の2 倍の周期幅(Nyquist周期)で標本化した離散信号列f= (f0f1. . . fN−1)から信号 fが完全に再現されるからである。
したがって以降では、コンパクトサポートを持つ関数f(x)においては、区間[0,1) 上の関数f(x)˜ と同一視した上で、式(6.15)のPjf(x)˜ を計算するのではなく解像度 2−jで標本化して得られた2j個の関数値の組{cjk}k=0,...,2j−1で定義される次の階段
関数fj(x)を考え、これを解像度2−jによる関数fの近似Pjfとする。
Pjf(x)∼fj(x) =
2∑j−1 k=0
cjkϕ(2jx−k) =
2∑j−1 k=0
f Åk
2j ã
ϕ(2jx−k).
6.4.1 ウェーブレット変換の分解アルゴリズム
Haarスケーリング関数ϕとwavelet関数ψとの関係 ϕ(2x) =ψ(x) +ϕ(x)
2 ϕ(2x−1) =ϕ(x)−ψ(x)
2
をつかって、ただちに次の関係を得る。
補題6.45
ϕ(2jx) =ψ(2j−1x) +ϕ(2j−1x)
2 (6.17)
ϕ(2jx−1) =ϕ(2j−1x)−ψ(2j−1x)
2 (6.18)
一般に
ϕ(2jx−2k) =ψ(2j−1x−k) +ϕ(2j−1x−k)
2 (6.17′)
ϕ(2jx−2k−1) =ψ(2j−1x−k)−ϕ(2j−1x−k)
2 (6.18′)
分割補題6.28は次のようにウェーブレット変換におけるHaar分解係数の関係を 与える。
演習6.46 補題6.45を使って、例6.21で取り上げたf(x) = 2ϕ(4x) + 2ϕ(4x−1) + ϕ(4x−2)−ϕ(4x−3)をHaar分解して、f(x) =ψ(2x−1) +ψ(x) +ϕ(x)となる ことを示しなさい。
定理6.47 (Haar分解定理) スケールjの関数を fj(x) =∑
k
cjkϕ(2j−k)∈Vj
とする。このとき、関数fjは分割補題6.28より fj(x) =wj−1(x) +fj−1(x),
と分解されて、
wj−1(x) =∑
k
djk−1ψ(2j−1x−k)∈Wj−1, fj−1(x) =∑
k
cjk−1ϕ(2j−1x−k)∈Vj−1
である。ここで、
cj−1k =cj2k+cj2k+1
2 , (6.19)
djk−1=cj2k−cj2k+1
2 . (6.20)
証明 fj=∑
k
cjkϕ(2j−k)
=∑
k
cj2kϕ(2jx−2k) +∑
k
cj2k+1ϕ(2jx−2k−1) と添字についての和を偶数と奇数にわけて考え、補題6.45を使うと
fj(x) =∑
cj2kψ(2j−1x−k) +ϕ(2j−1x−k)
2 +∑
k
cj2k+1ϕ(2j−1x−k)−ψ(2j−1x−k) 2
=∑
k
Çcj2k−cj2k+1 2
å
ψ(2j−1x−k) +
Çcj2k+cj2k+1 2
å
ϕ(2j−1x−k)
=wj−1(x) +fj−1(x).
■ 信号fを離散化してスケールJの解像度2−Jで標本化し、係数{cJk =f(k
2J
)}k によって階段関数fJ(x)をひとたび定めると、分解定理6.47を繰り返し適用して得 られるHaar分解
fJ =wJ−1+wJ−2+· · ·+w0+f0
の係数はスケールJにおける初期係数の組{cJk}だけから cJk
J → · · · → cjk
j → cj−1k
j−1 · · · → c00
↘ · · · ↘ djk
j ↘ dj−1k
j−1 · · · ↘ d00
(6.21)
のような形で段階的に決定できる。{cjk} → {cjk−1} ∪ {djk−1}を1段階wavelet変 換(1-step wavelet transformation)と呼ぼう。
係数の個数は#{cjk}=#{cj−1k }+#{dj−1k }と1段階wavelet変換では変わらない こと、また平均化係数は{cjk} → {cjk−1}で個数は半分になることに注意する。した がって、最初の標本数2Jとすると、段階j(J−1≧j≧0)までに得られる全ての係数 の集合¶
{dJkJ−1−1}, . . . ,{djk
j},{cjk
j}©
の要素数は同じである。実際、0≦kj≦2j−1 であることに注意すると、段階jまでに得られた係数集合の要素数における関係次の ようにである。
#{cJkJ}=#{cJ−1kJ−1}+
J−1∑
s=j
#{dsks}+#{cjk
j}
= 2J−1+ (J−1
∑
s=j
2s )
+ 2j
= 2J.
こ う し て 段 階 j(J −1 ≧ j ≧ 0) ま で に 得 ら れ た Haar 関 数 系 の 係 数 の 組
¶{dJk−1
J−1}, . . . ,{djk
j},{cjk
j}©
から階段関数
wj=
2∑j−1 kj=0
djk
jψ(2jx−kj), fj=
2∑j−1 kj=0
cjk
jϕ(2jx−kj)
を計算することによって、離散標本値関数fJは fj=wj−1+· · ·+wj+fj
と分解することができる。
6.4.2 ウェーブレット逆変換の再構成アルゴリズム
節6.4.1のウェーブレット変換の分解アルゴリズムでみたように、関数f を
欲するスケールJ で標本化(離散化)して得られた係数の組{cJk}kから、fJ を wJ−1+· · ·+w0+f0とdyadic階段関数の和として表すための係数c00(f0の係数)
および詳細化係数集合の組{djℓ}0≦j<J−1,ℓ=0,...,2j−1(詳細関数{wj}の係数)が得ら れる。これがウェーブレット変換である。この過程は逆にたどることができ、その操 作をウェーブレット逆変換(inverse wavelet transformation)という。
信号処理とは、関数fJ(これはfと同一視しているのだが)を処理目的に応じ て関数fJ′ として近似する操作である。処理目的として、たとえば、ノイズの除 去やデータ圧縮がある。したがって、Haar分解における信号処理とは、係数集合 {c0k}k,{djℓ}0≦ℓ<J,kを目的に応じて別の係数集合、{c0k}kおよび{d′kj}0≦j<J,kに置き 換えることによって近似関数fJ′ を構成することに他ならない。これをウェーブレッ ト逆変換にともなう再構成アルゴリズムという。
補題6.45はスケールjのHaar関数を一段粗いスケールj−1の関数で表す関係式 である。この関係は可逆な関係
ϕ(x) =ϕ(2x) +ϕ(2x−1) ψ(x) =ϕ(2x)−ϕ(2x−1) にあり、次の補題が成立する。
補題6.48
ϕ(2j−1x) =ψ(2jx) +ϕ(2jx−1) (6.22)
ψ(2j−1x) =ϕ(2jx)−ϕ(2jx−1) (6.23)
定理6.49 (Haar再構成定理) スケールJの関数fJがfJ=wJ−1+wJ−2+· · ·+ w0+f0と分解できて
wj(x) =∑
k
djkψ(2jx−k)∈Wj, 0≦j < J f0(x) =∑
k
c0kϕ(x−k) であるとする。このとき、fJは
fJ(x) =∑
ℓ∈Z
cJℓϕ(2Jx−ℓ)∈VJ
と再構成できる。ここで、cjℓはj= 1からj=Jまで次のアルゴリズムによって再 帰的に定められる。
cjℓ=
cj−1k +dj−1k , ℓ= 2kが偶数, cj−1k −dj−1k , ℓ= 2k+ 1が奇数.
(6.24)
証明 補題6.48を使うと f0(x) =∑
k
c0kϕ(x−k)
=∑
k
c0k (
ϕ(2x−2k) +ϕ(2x−2k−1) )
=∑
ℓ
˜
c1ℓϕ(2x−ℓ) ただし、
˜ c1ℓ=
®c0k, ℓ= 2kが偶数 c0k, ℓ= 2k+ 1が奇数. 同様にして、
w0(x) =∑
k
d0kψ(x−k)
=∑
k
d0k (
ϕ(2x−2k)−ϕ(2x−2k−1) )
=∑
ℓ
d˜1ℓϕ(2x−ℓ) ただし、
d˜1ℓ=
®d0k, ℓ= 2kが偶数
−d0k, ℓ= 2k+ 1が奇数. したがって
f0(x) +w0(x) =∑
ℓ
c1ℓϕ(2x−ℓ)
とすると
c1ℓ= ˜c1ℓ+ ˜d1ℓ
c0k+d0k, ℓ= 2kが偶数 c0k−d0k, ℓ= 2k+ 1が奇数. を得る。さらに、w1=∑
kd1lψ(2x−k)についても同様に考えると f2(x=f0(x) +w0(x) +w1(x) =∑
ℓc2ℓϕ(22x−ℓ) として
c2ℓ= ˜c2ℓ+ ˜d2ℓ
c2k+d2k, ℓ= 2kが偶数 c2k−d2k, ℓ= 2k+ 1が奇数.
を得る。この過程をfJ=fJ−1+wJ−1まで再帰的に繰り返して結果を得る。 ■
6.4.3 具体例
次の関数を考えてみよう。
f(x) = sin(2x) cos( x3)
+
Åsin(110(x−2)) 110(x−2)
ã2
−Åsin(95(x−1)) 95(x−1)
ã2 (6.25)
区間[0, π]での様子(図6.3)を観察すると、狭い区間での急激な関数値の変化(ス
パイク)が二箇所x= 1およびx= 2の付近にあることがわかる。
区間[0, π)をN = 28 = 254個のスケールJ = 8のdyadic区間{I8,k}k に 分割し、その左端x= 2k8,(k = 0, . . . ,28−1)で標本化した関数値の組を{c8k = f(k
28
)}k=0,...,28−1とする。Mathematicaは、段階jのスケーリング関数ϕ(2jx−k) をHaarScale[x, j, k]、[0, π]上の関数f(x)を式(6.16)の意味で[0,1]上の関数 f(x)˜ として同一視してspiked[x]で定義しておくと、標本値の組{c8k}をcoeffと して求めて次のようにしてスケールJ= 8の階段関数f8(x)を表示できる。ここで、
Mathematicaの添字が1から始まることを考慮して、coeff[k + 1]としているこ とに注意しよう。
HaarScale[x_Real, j_Integer, k_Integer] :=
If[x < k/2^j || (k + 1)/2^j < x, 0, 1]
j=8;