Вы находитесь на странице: 1из 3

Балдихина Вера Голубь Дима

Как строить вейвлет на fup'ах

Для начала нам нужно построить непосредственно сам fup, мы это делали по аналитической формуле:

fup N 1 x  =

N 1 2

1

4 N

k = 1

sinc k

N

N

i = 1

sinc 2 i k

N

cos 2 k x

N

Код на матлабе который строит эту функцию для N 1 и точки x :

function f=fup(N, x)

summ=0;

for k=1:20

proizv=1;

for i=1:40 proizv = proizv*sin(pi*k*2^(-i)/N)/( pi*k*2^(-i)/N );

end summ = summ + proizv*cos(2*pi*k*x/N)*( sin(pi*k/N)/(pi*k/N) )^N;

end

if abs(x)>(N+2)/2

 

f

= 0;

else

 

f

= 1/N*(1+2*summ);

end

end

Сумма сдвигов fup обладает свойством:

fup N t n  = 1

n Z

Далее строим такую частичую сумму что бы supp = [ 4

3

; 4

3

]

,

fup N t  = fup N

r

n = − r

a N 2

2

r t n

Для атомарных функций выполняется:

k

n = − k

f

t n = 0.5

Используя это, находим коэффициент а , последнее уравнение для нашего случая будет выглядеть так (подставили в качестве t =  ):

r

n = − r

fup N a N 2 r n = 1

2

2

Получаем преобразование фурье искомого вейвлета следующим производя формальную замену аргумента частичной суммы t   , не забывая извлечь квадратный корень:

    =  fup N    =

r

n = − r

fup N

a N 2

2

r   n

Приведу код который вычисляет заданное преобразование фурье отдавая массив координат [ X , Y ] :

function [w, y] = vave()

N = 22;

a = 0.70833;

freq=0.1;

r = 8;

w=-(N+2)/2:freq:(N+2)/2;

for i=1:length(w) y(i) = 0; for n = -r:1:r y(i) = y(i) + fup(N+1, a/pi*((N+1)/2+1+r)*w(i)+n);

end y(i) = y(i)^0.5;

end

end

Вот график который строит эта функция:

end y(i) = y(i)^0.5; end end Вот график который строит эта функция:

Далее все предельно просто, нам нужно вычислить преобразование фурье и получить искомую функцию . Здесь ничего лучше нету, чем определения:

f

x  =

1

2

− ∞

f    e i x d

Воспользуемся самым простым алгоритмом численного интегрирования – методом прямоугольников, привожу алгоритм:

function fourier_transform(x, y) h = x(2) - x(1); for k=1:length(x) sum = 0; for p=1:length(x) sum = sum + h*y(p)*exp(-j*x(p)*x(k));

end res(k) = real(sum);

end

plot(x, res);

end

Что бы получить этот график надо выполнить команды в матлабе:

[x, y] = vave(); fourier_transform(x, y)

график надо выполнить команды в матлабе: [x, y] = vave(); fourier_transform(x, y)