我对pywt和小波分析很陌生。我现在面临着几个问题,我希望有人能帮助我。

首先,我想更改my_wavelet中的展开(D)和平移(x),但我不知道如何准确地完成它。如果有人举个例子,我将非常感激。
第二,我可以在数组s的边缘添加零吗?由于值的输出cA和cD为7,而输入s为13,或者有什么方法可以避免缩小大小?
第三,上面公式中的C_P,D是否与pywt.dwt函数的cA输出相同?我仍然不明白为什么公式中只有一个输出,但是pywt.dwt给了两个输出?
s = [1,2,3,7,8,9,5,1,1,0,1]
my_filter_bank = ( [1,1], [-1,1], [1,1], [-1,1] )
my_wavelet = pywt.Wavelet('haar', filter_bank = my_filter_bank)
cA, cD = pywt.dwt(s, my_wavelet)提前谢谢。
发布于 2022-03-10 03:26:03
我想你把连续小波变换和离散小波变换混为一谈。您提供的公式是CWT的公式,但是在Python中尝试计算的是DWT。
First,我想更改my_wavelet中的展开(D)和平移(x),但我不知道如何准确地完成它。如果有人举个例子,我将非常感激。
您不必这样做,至少如果您计划对信号应用DWT,那么DWT将使用单个级别(使用dwt)或多个级别(使用wavedec)来分解信号。把每个层次看作是与小波的尺度相关的,也就是它有多大。因此,你的小波的膨胀和转换已经被“照顾”了。
第二个,我可以在数组的边缘添加零吗?由于值的输出cA和cD为7,而输入s为13,或者有什么方法可以避免缩小大小?
cA和cD的大小被定义为这里。
系数数组的长度取决于所选模式。对于除分期以外的所有模式: len(cA) == len(cD) ==地板(len(Data)+ wavelet.dec_len - 1) /2 对于分期模式(“per”): len(cA) == len(cD) == ceil(len(data) / 2)
事实上,cA和cD的大小与输入信号s不同,这一点不应该打扰您。当然,您可以在信号的边缘添加零点,但这只会导致从零填充信号中计算系数。
第三,C_P,D在公式上是否与cA输出的pywt.dwt函数相同?我仍然不明白为什么公式中只有一个输出,但是pywt.dwt给了两个输出?
不,他们不是一回事。C_P,D在您的公式中是一个给定尺度和位置的小波系数,而cA和cD则对应于详细的和近似的系数。
最后一点:我个人认为很难理解像你这样的小阵列的小波变换。我建议分析一些例子数据,例如,席比的心电图:
import pywt
import matplotlib.pyplot as plt
from scipy.misc import electrocardiogram
s = electrocardiogram()
plt.plot(s)
plt.title('INPUT SIGNAL')

my_wavelet = pywt.Wavelet('db2')
cA, cD = pywt.dwt(s, my_wavelet)
plt.plot(cD)
plt.title('DETAILED COEFF.')

plt.plot(cA)
plt.title('APPROXIMATION COEFF.')

https://stackoverflow.com/questions/71377507
复制相似问题