Wavelet超入門 その5 Daubechiesの
Φ関数 2.0.25間隔のDaubechiesのΦ関数の値を求めてみる static
double p[]={0.6830,1.1830,.3170,-0.1830}; // P1,P2,P3,P4 これらの値は、Daubechiesの数表に載っているもの。
void
prepare() double
phai_value(int index) return ( (index<=0) || (index>12) ? 0 :
daubechies[index]); void
calc_array(double* array,int i) double
value=p[0]*phai_value(i*2)+p[1]*phai_value(i*2-4) array[i]=(abs(value)<0.001 ? 0 :
value); //小さい値は零にする int
_tmain(int argc, _TCHAR* argv[])
1.Daubechies(ドブシー、ドビッシー)のΦ関数を描いてみる
大体やね、どの書籍等を見ても、Daubechiesの関数を、y=f(x)の形で書いた式がありません.......
調べてみると、何と! この関数は、y=f(x)の形で描けない関数なのだそうです、たまげた! http://www2.starcat.ne.jp/~fussy/algo/algo8-9.htm
こんなん、初めて..... y=f(x)と、書けんはずやわ......
只、
なる関係(two-scale
relation)は、満たされており、
この関係が満たされていれば、 t=1/2, 1/4, 1/8, 1/16,
1/32等を代入する事により、幾らでも細かい数字が
その1つ、ランク下の関数で表現できて、関数の数値が求まるとの事です、 おもしろい。
これは、プログラムを書いて、この関数の数値を順番に求めて行くしか、手がありません。
上記の関係を参考に、以下のプログラムを作りました。
//Daubechies
N=2 two-sacle relation
#include "stdafx.h"
#include
"math.h"
Orthogonal Daubechies coefficients (normalized to have sum
2) 参照の事
double
phai_origin[4]={0,1.366,-0.366,0}; //φ(0)、φ(1)、φ(2)、φ(3) の値 これらの値は、予め求めておく tks http://www2.starcat.ne.jp/~fussy/algo/algo8-9.htm
double
daubechies[13]={0}; // 0から3までの、0.25間隔のφ(t)を求める数列
{
int
i;
for(i=0;i<4;i++)
daubechies[i*4]=phai_origin[i]; //φ(0)、φ(1)、φ(2)、φ(3) の値を代入
}
{
//daubechies配列のindexの範囲を超えていたら、零、そうでなければ、値を返す
}
{
+p[2]*phai_value(i*2-8)+p[3]*phai_value(i*2-12);
}
{
prepare();
for(int
k=0;k<2;k++) //一回で1/2まで求まる。2回廻すと、1/4まで求まる。
for(int
j=0;j<13;j++)
calc_array(daubechies,j);
return
0;
}
こうして求めたDaubechiesのΦ関数の値を、wxMaximaで描いてみる
そして
と、すれば
と、描ける。
今回は、Daubechiesの関数で求まる Φ(t)を描いてみただけでした。
もっと、細かく描けるアルゴリズムを考えなければ......
それでも、随分、時間掛かったわ、何せ、ユニークな、私にとって新鮮な関数です。
H.20.10.14