IFFT计算meyer小波的一些问题
Some problem in calculating the meyer wavelet using IFFT
我是 python 和 numpy 的新手。我必须使用频谱分析在时域中计算迈耶小波。由于 https://academic.oup.com/gji/article/116/1/119/635254 小波可以在频域中估计为
我已经尝试在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()
但是我在时域中得到了错误的振幅!!??
ps:域和振幅无法通过此代码检索。欢迎任何建议
替换此行:
st = np.fft.fftshift(np.real(st))
和
st = np.fft.fftshift(np.real(st)) * fs
我相信你会得到正确的缩放。
博士。土星
我是 python 和 numpy 的新手。我必须使用频谱分析在时域中计算迈耶小波。由于 https://academic.oup.com/gji/article/116/1/119/635254 小波可以在频域中估计为
我已经尝试在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()
但是我在时域中得到了错误的振幅!!??
ps:域和振幅无法通过此代码检索。欢迎任何建议
替换此行:
st = np.fft.fftshift(np.real(st))
和
st = np.fft.fftshift(np.real(st)) * fs
我相信你会得到正确的缩放。
博士。土星