微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用IFFT计算meyer小波的一些问题

如何解决使用IFFT计算meyer小波的一些问题

我是 python 和 numpy 的新手。我必须使用频谱分析计算时域中的迈耶小波。由于 https://academic.oup.com/gji/article/116/1/119/635254,小波可以在频域中估计为

enter image description here

我尝试用python写一段代码来构造这个时域小波

import numpy as np
import matplotlib.pyplot as plt

N = 1024
fs = 50
df = fs / N
f = np.arange(-N / 2,N / 2) * df
w = 2 * np.pi * f


def hw(w):
    h = []
    for i in np.arange(len(w)):
        if w[i] > 0:
            h.append(np.exp(-1 / w[i] / w[i]))
        else:
            h.append(0)
    return np.array(h)


def gw(w):
    return hw(4 * np.pi / 3 - w) / (hw(w - 2 * np.pi / 3) + hw(4 * np.pi / 3 - w))


def phiw(w):
    return np.sqrt(gw(w) * gw(-w))


def syw(w):
    return np.exp(-1j * w / 2) * np.sqrt(phiw(w / 2) * phiw(w / 2) - phiw(w) * phiw(w))


s = syw(w)
st = np.fft.ifft(np.fft.ifftshift(s))
st = np.fft.fftshift(np.real(st))
t = np.arange(-N / 2,N / 2) / fs

plt.figure(1)
plt.plot(t,st)
plt.xlim([-10,10])
plt.show()

但是我在时域中得到了错误的幅度!!??

enter image description here

enter image description here

ps:不能通过此代码检索域和幅度。欢迎任何建议

The figure in the article

解决方法

替换这一行:

st = np.fft.fftshift(np.real(st))

st = np.fft.fftshift(np.real(st)) * fs

我相信你会得到正确的缩放比例。

博士土星

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。