小波时间提取

信息处理 小波 Python
2022-02-20 08:15:32

我试图理解小波中的一件简单的事情,我搜索了很多,但没有得到任何想法。

我需要对我的信号执行多级一维小波分解。我有数组

signal[] and time[]  

(time[x] 对应于 signal[x] 发生的时间)。在我表演之后

wavedec(signal,level=1,'wname')) 

我需要绘制 cA1 与时间信号的关系。但是我怎么知道我应该选择哪些时间点。如果我更改“wname”,我会得到不同长度的 cA1。

例如,对于长度为 9285 的信号,当我这样做时

[cA1,cD1]=pywt.wavedec(signal,db1, level=1,mode=pywt.MODES.zpd)
length of cA1=4643

[cA1,cD1]=pywt.wavedec(signal,db2, level=1,mode=pywt.MODES.zpd)
length of cA1 = 4644

我们如何确定cA1的变化以及我们如何选择相应的时间。我使用 pywavelet

1个回答

您返回的数组的长度取决于您用于进行分解 的模式和小波长度,这可能会像您在 db1 和 db2 之间看到的那样变化:

len(cA) == len(cD) == floor((len(data) + wavelet.dec_len - 1) / 2)

如果你切换到 periodization mode mode='per',你会得到一个不同的计算,这对你来说可能更一致:

len(cA) == len(cD) == ceil(len(data) / 2)

无论如何,分解通常是二元的,所以你的二元宽度是len(signal)/len(cAn).

一旦你进入多级(使用 level='2' 等),你的长度也会有小的变化。为了解决这个问题,请使用IDWT进行重构。