今回は入門編の定番になっているハールウェーブレットのVIを作ってみよう。
ハール関数は以下のようにシンプルな関数だ。
ψ(x) = 1 ; 0 ≦x <0.5
ψ(x) = -1 ; 0.5 ≦x <1
ψ(x) = 0 ; x <0 および1 ≦x
滑らかではないのが欠点だが、おかげ様で計算は簡単だ。連続ウェーブレット解析の場合と同様に、この基本関数をスケールとシフトすることにより解析を進めていくのだが、離散という名前の通り、スケールは2倍あるいは1/2ずつ、シフトはスケールの幅でおこなう。倍々でスケールした例は下のグラフのようなものだ。下から幅2,4,8,16,32というふうにスケールを変えている。
下のグラフは幅8のスケールで、シフトした例だ。
それぞれの関数を特定できるように記号を決めよう。
例えば幅2のハール関数は
ψ-1,0(x) = 1 ; 0 ≦x <1
ψ-1,0(x) = -1 ; 1 ≦x <2
ψ-1,0(x) = 0 ; x <0 および2≦ x
となる。始めに出てきたψ(x)で表すと、ψ-1,0(x) = ψ(2^(-1)*x)と書ける。
これをスケール幅だけ右にシフトした関数は
ψ-1,1(x) = 1 ; 2 ≦x <3
ψ-1,1(x) = -1 ; 3≦ x <4
ψ-1,1(x) = 0 ; x <2 および4≦ x
となる。これもψ(x)で表すと、ψ-1,1(x) = ψ(2^(-1)*x-1)と書ける。
同様に幅4のハール関数は
ψ-2,0(x) = 1 ; 0 ≦x <2
ψ-2,0(x) = -1 ; 2 ≦x <4
ψ-2,0(x) = 0 ; x <0 および4≦ x
となる。これもψ(x)で表すと、ψ-2,0(x) = ψ(2^(-2)*x)と書ける。
一般的には、ψj,k(x)と書こう。
任意の信号はこれらのハール関数ψj,k(x)と信号の平均値C0で書き換えることができる。
Signal[0,n] = C0 + Sigma j,k {Cj,k*ψj,k(x)}
Cj,k = Sigma i {Signal[i] * ψj,k(i)}/2
とは、言ってみても実感が伴わないので、いくつかの例を試してみよう。
左の配列が信号のデータで、上のグラフにデータを表示させる。下のグラフにはハール関数の係数を表示させている。この例では、j=-2でひとつシフトさせたハール関数の係数が10になっている。
これの例は、入力したデータがSignal[0,15] =10*ψ-2,1(x)なので一目瞭然だ。
次の例では少しだけデータを変更した。データはSignal[0,15] =-5*ψ-1,0(x) + 10*ψ-2,1(x)なので、j=-1のプロットが0と1でー5になっている。グラフの見方は伝わっただろうか?
さて、次の例は入力データの単純さに比べて複雑な結果になっている。一番目の例から信号の位相が一つずれたことにより、多くの関数を動員して表現している。
分解の結果を数式にまとめると次のようになる。
Signal[0,15] =-5*ψ-1,1(x) +10*ψ-1,2(x) -5*ψ-1,3(x) -2.5*ψ-2,0(x) +2.5*ψ-2,1(x) +2.5*ψ-3,0(x)
計算の過程を下のグラフに表示してみよう。黒いプロットは入力された信号だ。
青いプロットはj=-1の計算後の残差を示している。例えば、信号をψ-1,1(x)で処理するとSignal[2]=0、Signal[3]=10なので、C-1,1 = {0*1 + 10*(-1) }/2 = -5 となり、信号からの差分は、差分1[2]=5、差分1[3]=5となる。
このようにして得られた青いプロットをj=-2で処理すると、残差は赤いプロットになる。これをさらにj=-3で処理すると残差がゼロとなる。全平均がゼロではない場合には、平均値C0が残る。
ダイアグラムは、データ数から何段階まで分解するかを決めて、分解のループを回す。Haar分解と書かれたアイコンで、係数と残差の計算を行い、残差は次のループで入力になる。
Haar分解と書かれたアイコンのVIは次のようなものだ。
分解のレベル(n)が入力されると、スケールの幅が計算される。
スケールの半分の幅でそれぞれ平均値を計算し、それらの差の1/2が係数になる。信号との対応が見やすいようにスケール幅で配列を作る。ループでは2次元配列になるので、ReshapeArrayで1次元配列に直す。
信号から係数の値を引いて差分データを作る。
*****************************************************************
今回は連続ウェーブレットからの類推が容易な方法でVIを作成してみた。次回は、デジタルフィルターの考え方でVIを作ってみよう。