Python中的Battle-Lemarié小波

时间:2012-12-26 20:59:37

标签: python fft wavelet

作为项目的一部分,我必须用Python编写一个程序来表示缩放函数和用于阶数1和阶2的样条的Battle-Lemarie小波。 对于阶数为1的样条曲线,我按如下方式跟踪函数:

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(-1.5,1.5,1024)

def phi(x):
    p=[]
    for i in range(len(x)):
        if abs(x[i])<=1:
            p.append(1-abs(x[i]))
        else:
            p.append(0)
    return p

plt.plot(x,phi(x),'b',x,phi(2*x),'g',x,[elt/2. for elt in phi(2*x+1)],'g',x,[elt/2. for elt in phi(2*x-1)],'g')
plt.show()

函数 phi 与其翻译不正交它必须改变函数 phi ^#我们只知道由 phi_hat ^#定义的傅里叶变换= sqrt(3)(2 * pi)^( - 1/2)*(4 sin ^ 2(z / 2)/(z ^ 2(1 + 2 cos ^ 2(z / 2)) 。 要找到这个函数,这就是我的代码:

def ftphidiese(x):
    ftphid=[]
    for i in range(len(x)):
        ftphid.append((np.sqrt(3.)*4.*(np.sin(x[i]/2.))**2)/(np.sqrt(2*np.pi)*(x[i]**2)*np.sqrt(1.+2.*(np.cos(x[i]/2.))**2)))
    return ftphid
phidiese=np.fft.fftshift(np.fft.ifft(np.fft.ifftshift(ftphidiese(x))))
plt.plot(x,phidiese)
plt.show()

不幸的是结果不好,功能被“粉碎”了。 有人能帮助我吗?

0 个答案:

没有答案