我正在尝试计算出使用 pyWavelet 连续小波变换时应该通过的八度/语音范围。为此,作为一个游戏,我从文档中复制了一些 pyWavelet 示例。 我使用里克小波而不是高斯一阶导数。但我认为这对我的发现没有任何影响。 “连续小波变换”章节中第一个示例
import pywt
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(512)
y = np.sin(2*np.pi*x/32)
coef, freqs=pywt.cwt(y,np.arange(1,129),'gaus1')
plt.matshow(coef)
plt.show()
在一种情况下,我将 y 转换为狄拉克函数,其中 y[256]=1,数组的其余部分为 0。 当我查看 8/16/32/64 尺度的小波系数时,我得到以下结果,更重要的是,我可以看到一系列明显影响我的结果的尖峰。
我想我可能错过了一些东西。
有没有办法正确设置比例,或者输入信号可能有一些限制? 谁能解释一下为什么我有这些条纹?
我无法解释
pywt
有什么问题或在这种情况下如何正确使用它。也许有一些数字问题(也许 pywt 转换为 float32?)。
但是,我设法获得了干净的信号,但是使用
scipy
,带有瑞克小波的“狄拉克三角洲”:
import scipy.signal
y = np.zeros(512)
y[256] = 1
coef = scipy.signal.cwt(y,scipy.signal.ricker, np.arange(1,129),)
plt.plot(coef[32, :])
plt.show()
您可能想在
pywt
github 上写一个关于此问题的问题,并添加与 scipy 的比较。