【问题标题】:How to define my own continuous wavelet by using Python?如何使用 Python 定义我自己的连续小波?
【发布时间】:2020-11-28 04:45:02
【问题描述】:

如标题所示,我想用 Python 定义自己的连续小波。但是,我不知道如何实现这一点。

我的小波母函数公式如下

它看起来有点像墨西哥帽子小波,但它们是不同的。

那么如何通过Python定义这样一个自定义小波,然后可以使用这个小波进行CWT呢?

【问题讨论】:

    标签: python scipy wavelet wavelet-transform pywavelets


    【解决方案1】:

    根据this,您需要一个函数,该函数采用多个点和一个比例作为wavelet 参数提供

    所以我们这样定义:

    import math
    import numpy as np
    from scipy import signal
    import matplotlib.pyplot as plt
    
    mother_wavelet = lambda z : np.exp(-z*z/4)*(2-z*z)/(4*math.sqrt(math.pi))
    
    def mexican_hat_like(n,scale):
        x = np.linspace(-n/2,n/2,n)
        return mother_wavelet(x/scale)
    

    让我们测试一下。我们注意到实际上看起来与您的非常相似的东西是available。不同之处在于缩放a 并且常量是前面看起来略有不同。注意math.sqrt(2) Ricker 小波的缩放

    points = 100
    a = 4.0
    vec_ours = mexican_hat_like(points, a)
    vec_theirs = signal.ricker(points, a*math.sqrt(2))
    plt.plot(vec_ours, label = 'ours')
    plt.plot(vec_theirs, label = 'ricker')
    plt.legend(loc = 'best')
    plt.show()
    

    这是图表:

    【讨论】:

    • 感谢您的精彩回答!为什么不在函数mexican_hat_like 中定义mother_wavelet
    • 没有理由——其他地方不需要的话可以去那里
    • 我注意到您的绘图的 x 坐标不是小波坐标的真实值。有没有办法在小波图中显示真实的 x 值?
    • 您可以在小波x = np.linspace(-n/2,n/2,n) return mother_wavelet(x/scale) 的定义中看到它们,所以不确定您的意思?我不确定小波的“真实”值是什么,但你可以在那里改变你的 x-s
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 2019-01-02
    • 1970-01-01
    • 2022-12-14
    • 2021-01-28
    相关资源
    最近更新 更多