Wavelet超入門 その13 4つのsample点で、ハールウェーブレット変換



 1.サンプル数4で、直線を近似してみる

    サンプル点が4つ [0,1,2,3] だったとすると、この4点を結ぶと、直線をあらわします。

    この4点を、先ず、step関数で近似したのが、上図です。

 2.phi、psi 各関数を定義し直す

    以下のように、定義し直します。

      phi(n,k):=block( [t],if k*2^(-n)<=t and t<(k+1)*2^(-n) then 1 else 0 )

    
psi(n,k):=block([t],if k*2^(-n)<=t and t<(k+1/2)*2^(-n) then 1 else if (k+1/2)*2^( -n)<=t and t<(k+1)*2^(-n) then -1 else 0)

    そうしますと、今までと違って




    このように、phi 関数の2番目の引数は、時間的ズレを表します。

    1番目の引数は、 2のマイナスの階乗が幾らか? を表します。(つまり、stepの幅が幾らか?)



    つまり、1番目の引数が大きな数字になる程、stepの幅は小さくなります。(周波数が高くなる)

    別の定義では、反対に、

    1番目の引数は、2のプラスの階乗が幾らか?と、言う定義です。(Ten Lectures on Wavelets :  Ingrid Daubechies 著)
                              (amazonで、立ち読みできますが、上記の書は、難しくて読めない....) 

    この場合は、1番目の引数が大きな数字になる程、stepの幅は大きくなります。(周波数が低くなる)


    
私は、お手本の書(Wavelts Made Easy ウェーブレット変換の基礎 Yves Nievergelt著 松本先生訳)に従って

    1番目の引数が大きな数字になる程、stepの幅は小さくなるほうを、選びます。

    これで、やっと、

    WaveMra.exe(ウェーブレット実践口講座 付属)の、レベルが小さくなる程、周波数が低くなるのか、やっと、解りましたわ。

    つまり、1番目の引数(レベル)が小さくなる程、stepの幅は大きくなります。(周波数が低くなる)



    注意点は、2番目の引数は、時間的ズレを表すのですが、

    その位置は、1番目の引数(レベル、step幅)によって違ってくる事です。



    この場合、1番目の引数はゼロだから、step幅は 2^(-0)=1となるから、時間のずれは 1

    一方、



    今の場合、1番目の引数は 1だから step幅は 2^(-1)=1/2、 だから、時間のズレは、1/2。

    ですので、2番目の引数の1は、

    最初にプラスの方向にズレたもの、と言う意味合い(index)みたいなものに、考えとこうっと...勝手に決め込んどります。.
 
 3.やっと、4点でハールウェーブレット変換してみる

    再掲します。



    先ず、隣り合う2点で、和、差の平均を採る

        [0,1]の2点

          s1= (0+1)/2 = 1/2

                      w1=(0-1)/2 = -1/2

                  [2,3]の2点

                     s2=(2+3)/2 = 5/2

                     w2=(2-3)/2 =-1/2

    そして、関係する phi 関数は、 phi(1,0) , phi(1,1)の二つ (幅が1/2だから、1番目の引数は1)



    そうすっと、psi 関数のほうも、psi(1,0) , psi(1,1) を用意する。



    すると



    合成すると



    元のstep関数と、同じになりました。

    ここで、 phi(1,0) , phi(1,1) を、元のstep関数と、同時に描いてみます。



    そうすると、s1*phi(1,0) , s2*phi(1,1) は、各2点を表すstep関数の平均を採ったものである事が解ります。

    ですので、 w1*psi(1,0) , w2*psi(1,1) は、元のstep関数との、差、

    つまり、元のstep関数を s1*phi(1,0) , s2*phi(1,1)で表現した時の、元のstep関数との誤差を、意味する事に、なります。

----------------------------------------------------------------------------------------------------------------------- 
   しばし、休憩 z,z,z............................................................



 ゆく河の流れは絶えずして、しかももとの水にあらず。淀みに浮ぶうたかたは、かつ消え、かつ結びて、久しくとどまりたる例(ためし)なし。世の中にある人と、栖(すみか)とまたかくのごとし。
 
 たましきの都のうちに、棟を並べ、甍(いらか)を争へる、高き、いやしき、人の住ひは、世々を経て尽きせぬものなれど、これをまことかと尋ねれば、昔ありし家は稀(まれ)なり。或は去年(こぞ)焼けて、今年作れり。或は大家(おほいへ)亡びて小家(こいへ)となる。住む人もこれに同じ。所も変らず、人も多かれど、いにしへ見し人は、二三十人が中(うち)に、わづかにひとりふたりなり。朝(あした)に死に、夕(ゆふべ)に生るるならひ、ただ水の泡にぞ似たりける。
 
 知らず、生れ死ぬる人、何方(いずかた)より来たりて、何方へか去る。また知らず、仮の宿り、誰(た)が為にか心を悩まし、何によりてか目を喜ばしむる。その主と栖と、無常を争ふさま、いはばあさがほの露に異ならず。或は露落ちて花残れり。残るといへども朝日に枯れぬ。或は花しぼみて露なほ消えず。消えずといへども夕を待つ事なし。


 この頃、頭禿げてきて、メゲテますねん.....

-----------------------------------------------------------------------------------------------------------------------

    次に phi(1,0) , phi(1,1) は、再度 合成する事が出来ます。

    関係する関数は、 phi(0,0) だから、 psi関数も psi(0,0) を用意する。

              s3=(s1+s2)/2 =(1/2+5/2)/2 =3/2

             w3=(s1-s2)/2 =(1/2-5/2)/2 =-1



        同じ形になる事から、

    s1*phi(1,0)+s2*phi(1,1) は、 s3*phi(0,0) +w3*psi(0,0)で、置き換え可能である事がわかります。

        で、最後に、psi(1,0) ,psi(1,1) も交えた、全ての置き換え

     s3*phi(0,0)+w3*psi(0,0)+w1*psi(1,0)+w2*psi(1,1)

        を、描いてみます。



    これは、最初に描いた、4つのサンプル点をstep関数で表現したものと、一致します。



    つまり



      は

      s3*phi(0,0)+w3*psi(0,0)+w1*psi(1,0)+w2*psi(1,1)と、一致します。

      以上をヒントにして、

      順次高速ハールウェーブレット変換プログラムを、考えてみます。

H.20.12.23