• 検索結果がありません。

第 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 スケールjdyadic区間Ij,k上の関数f の平均化値2j

Ij,kf(x)dx と両端点での標本値f(2kj)およびf(k+12j ). fIj,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)上の関数と して取り扱うと計算上都合がよい。

一方、関数fx=. . . ,−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,...,2j1で定義される次の階段

関数fj(x)を考え、これを解像度2jによる関数fの近似Pjfとする。

Pjf(x)∼fj(x) =

2j1 k=0

cjkϕ(2jx−k) =

2j1 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) =ϕ(2j1x)−ψ(2j1x)

2 (6.18)

一般に

ϕ(2jx−2k) =ψ(2j−1x−k) +ϕ(2j−1x−k)

2 (6.17)

ϕ(2jx−2k1) =ψ(2j1x−k)−ϕ(2j1x−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) =wj1(x) +fj1(x),

と分解されて、

wj−1(x) =∑

k

djk1ψ(2j−1x−k)∈Wj−1, fj1(x) =∑

k

cjk1ϕ(2j1x−k)∈Vj1

である。ここで、

cj−1k =cj2k+cj2k+1

2 , (6.19)

djk1=cj2k−cj2k+1

2 . (6.20)

証明 fj=∑

k

cjkϕ(2j−k)

=∑

k

cj2kϕ(2jx−2k) +∑

k

cj2k+1ϕ(2jx−2k1) と添字についての和を偶数と奇数にわけて考え、補題6.45を使うと

fj(x) =∑

cj2kψ(2j1x−k) +ϕ(2j1x−k)

2 +∑

k

cj2k+1ϕ(2j1x−k)−ψ(2j1x−k) 2

=∑

k

Çcj2k−cj2k+1 2

å

ψ(2j1x−k) +

Çcj2k+cj2k+1 2

å

ϕ(2j1x−k)

=wj1(x) +fj1(x).

■ 信号fを離散化してスケールJの解像度2Jで標本化し、係数{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

j1 · · · → c00

↘ · · · ↘ djk

j dj−1k

j−1 · · · ↘ d00

(6.21)

のような形で段階的に決定できる。{cjk} → {cjk1} ∪ {djk1}1段階wavelet変 換(1-step wavelet transformation)と呼ぼう。

係数の個数は#{cjk}=#{cj−1k }+#{dj−1k }1段階wavelet変換では変わらない こと、また平均化係数は{cjk} → {cjk1}で個数は半分になることに注意する。した がって、最初の標本数2Jとすると、段階j(J−1≧j≧0)までに得られる全ての係数 の集合¶

{dJkJ−11}, . . . ,{djk

j},{cjk

j}©

の要素数は同じである。実際、0≦kj≦2j1 であることに注意すると、段階jまでに得られた係数集合の要素数における関係次の ようにである。

#{cJkJ}=#{cJ−1kJ−1}+

J−1

s=j

#{dsks}+#{cjk

j}

= 2J1+ (J1

s=j

2s )

+ 2j

= 2J.

こ う し て 段 階 j(J 1 ≧ j ≧ 0) ま で に 得 ら れ た Haar 関 数 系 の 係 数 の 組

{dJk1

J−1}, . . . ,{djk

j},{cjk

j}©

から階段関数

wj=

2j−1 kj=0

djk

jψ(2jx−kj), fj=

2j1 kj=0

cjk

jϕ(2jx−kj)

を計算することによって、離散標本値関数fJfj=wj1+· · ·+wj+fj

と分解することができる。

6.4.2 ウェーブレット逆変換の再構成アルゴリズム

節6.4.1のウェーブレット変換の分解アルゴリズムでみたように、関数f

欲するスケールJ で標本化(離散化)して得られた係数の組{cJk}kから、fJwJ−1+· · ·+w0+f0とdyadic階段関数の和として表すための係数c00f0の係数)

および詳細化係数集合の組{dj}0j<J1,ℓ=0,...,2j1(詳細関数{wj}の係数)が得ら れる。これがウェーブレット変換である。この過程は逆にたどることができ、その操 作をウェーブレット逆変換(inverse wavelet transformation)という。

信号処理とは、関数fJ(これはfと同一視しているのだが)を処理目的に応じ て関数fJ として近似する操作である。処理目的として、たとえば、ノイズの除 去やデータ圧縮がある。したがって、Haar分解における信号処理とは、係数集合 {c0k}k,{dj}0ℓ<J,kを目的に応じて別の係数集合、{c0k}kおよび{dkj}0j<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の関数fJfJ=wJ1+wJ2+· · ·+ 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

と再構成できる。ここで、cjj= 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−2k1) )

=∑

˜

c1ϕ(2x−ℓ) ただし、

˜ c1=

®c0k, = 2kが偶数 c0k, = 2k+ 1が奇数. 同様にして、

w0(x) =∑

k

d0kψ(x−k)

=∑

k

d0k (

ϕ(2x−2k)−ϕ(2x−2k1) )

=∑

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=fJ1+wJ1まで再帰的に繰り返して結果を得る。 ■

6.4.3 具体例

次の関数を考えてみよう。

f(x) = sin(2x) cos( x3)

+

Åsin(110(x2)) 110(x2)

ã2

Åsin(95(x1)) 95(x1)

ã2 (6.25)

区間[0, π]での様子(図6.3)を観察すると、狭い区間での急激な関数値の変化(ス

パイク)が二箇所x= 1およびx= 2の付近にあることがわかる。

区間[0, π)をN = 28 = 254個のスケールJ = 8のdyadic区間{I8,k}k に 分割し、その左端x= 2k8,(k = 0, . . . ,281)で標本化した関数値の組を{c8k = f(k

28

)}k=0,...,281とする。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;