Chapter Fourty-six

第46話



前回は連続ウェーブレット用のものとはかなり形が違うHaarウエーブレットを見てきた。説明がくどくて分かりにくかったかもしれないのでおさらいを少し、、

スケールの幅を一つの単位としてデータを区分して、さらにその区分されたデータを二つに分割する。それぞれ平均値を計算し、それらの差の1/2がその区分に対応する係数になる。
最小のスケールである2の場合を考えると、2個のデータに変化がない場合には係数が0で、変化があるときには2個を平均した値からのずれが係数に対応する。
スケール内での平均値が次のスケールでの解析のための差分データとなる。

LabVIEWではデータの1次元配列を一個おきに取り出して2個の一次元配列にして計算するとすっきり書ける。

10個のデータが、ウェーブレット変換で5個のHaar係数と5個の差分データに分かれているが、合計のデータ数は変わっていないことは注意しておく必要がある。
スケール4での解析は、差分データが半分に縮小されているため、スケール2用のVIと全く同じで良い。再帰的に動作させればどこまでも解析を進めることができるのがうれしい。

さて、離散ウェーブレット変換を別な表現で表せば、ハイパスフィルター処理後にダウンサンプリングしたハイパスデータとローパスフィルター処理後にダウンサンプリングしたローパスデータを得る信号処理の一種と考えることができる。さらにローパスデータの分解を繰り返すことによって解像度をどんどん下げていくことができる。もちろん再構成が保証されるためにはフィルターにある種の制限がある。Haarウェーブレットはその制限を満たすもっとも簡単なデジタルフィルターになっている。

フィルター処理には上級解析のConvolution.viが使える。Helpを見て分からないときは簡単なテスト用のVIを作って実際に動かしてみると話が早い。(ちなみにLV4のオンラインヘルプはiとjが混乱していたので下の図の中に整理しておいた。)

配列Xの要素1は配列Yを右シフトして各要素に配列Xの要素1の数値をかける働きをする。配列Xの要素0に-1、要素1に1を与えると、コンボリューションした結果の奇数要素はHaarウェーブレットの係数となっている。(下の図の数値を一個ずつ暗算しないとわからないかもしれないが、、)

Haarウェーブレット以外でも扱えるように準備したサブVIは次のような簡単なものだ。まだHaar以外では動かしていないから修正が必要かもしれないが、、、

このサブVIの使い方は、ループの中でLow出力をシフトレジスターにつなぎ、次のループの実行でIN入力に入れてやればよい。音声データをレベル5まで分解した例をあげよう。
上のグラフがインプットデータで、下のグラフがウェーブレット変換した結果だ。下のグラフにはいくつかの波形が並んでいるが、上にいくにしたがって解像度が低くなっている。一番上は、レベル5まで分解した残差になっている。

グラフへの表示が重ならないようにシフトさせているため複雑そうに見えるが、本当に必要なのはForループの中にサブVIが1個だけだ。

簡単でしょ。それに速いんですよ。

*****************************************************************

次回は、分解した係数を再構成するVIを紹介しよう。

See you!


Nigel Yamaguchi

戻る