Wavelet超入門 その6 OctaveでDaubechies's wavelet



scaling functionのFourier変換はLowPass,wavelet fucntionのFourier変換はBandPass filter

 1.Octaveを使って、wavelet

   Daubechies関数の、値を収納する配列を、Octaveに移すのが面倒なので、

    Octaveで、プログラムを作りました。(Maixmaでは、Fourier変換が難しい為でもありますねん。)

    こんな感じです。

......
#initialize phi array
 phi(reso+1)=phi_origin(2);
 phi(reso*2+1)=phi_origin(3);
 
#sub function###############################################
function retval=phi_value(array,index,my_size)
                if( (index<=1) | (index>my_size) ) retval=0;
                else
                  retval=array(index);
                endif
 endfunction
############################################################
# calc phi function value
for k=1:n
    for i=1:my_size
      index=i*2-1;
    
      x=p(1)*phi_value(phi,index,my_size);
      x=x+p(2)*phi_value(phi,index-reso,my_size);
      x=x+p(3)*phi_value(phi,index-reso*2,my_size);
      x=x+p(4)*phi_value(phi,index-reso*3,my_size);

      phi(i)=x;
      x=0;
      index=0;
    endfor
endfor
........
よかったら、mファイルを、使ってみて下さい。

    Octaveを起動して、'daubechies2' と、入力してみて下さい。 Nの数値を入力するプロンプトが出ます。



    今の場合 7を入力しましたので、値を入れる配列は、385個出来上がります。(128*3+1)

    returnキーを押すと、グラフが表示されます。

    N=7では、細かすぎて、spectrumは、左に寄ってしまいますが、functions の形は、よく見えます。



    ほんま、scaling function も、mother waveletも、複雑な形をしていて、これは、y=f(x)で表現できないはずやんか......

 2.scaling functionは、ほんまに、ひとつ下位の scaling functionsの和で表現されているか?

    これを確かめるために、phi(2t),phi(2t-1),phi(2t-2),phi(2t-3)を描いてみました。



    はたして、そうなのか....



    やっぱり、そうみたいですね..... あたりまえやんか (^_^;;

    Daubechiesの関数を、もっと、滑らかにする為には、N=2でなくて、

    N=10(係数の数は、2N=20)くらいまでにする必要があるみたいです。

    Nを細かくする事が、大事みたいですね。

H.20.10.19