【发布时间】:2014-10-08 07:37:52
【问题描述】:
我有多个长度为 149 的时间序列,我想使用小波变换对它们进行去噪。
这是我的数据示例:
t=ts(rnorm(149,5000,1000),start=1065,end=1213)
当我尝试使用 Wavetresh 和 Waveslim 包时,它们都指出了同样的问题:
library(wavetresh)
wd(t)
Error in wd(t) : Data length is not power of two
library(waveslim)
dwt(t)
Error in dwt(t) : Sample size is not divisible by 2^J
我知道我的数据长度应该是 2^x,但我无法克服这个问题。我认为 Waveslim 中的函数 up.sample() 应该对此有所帮助,但它并没有起到作用(例如,up.sample(t,2^8) 给出了一个长度为 38144 的向量)。那么如何在不插入错误的情况下增加向量长度呢?我知道我可以用零填充,...但我想知道最好的方法。
此外,在查看waveslim 的示例时,看起来好像 imput serie 的长度也不满足此要求(尽管该示例当然有效):
data(ibm)
ibm.returns <- diff(log(ibm))
ibmr.haar <- dwt(ibm.returns, "haar") #works
log2(length(ibm.returns))
[1] 8.523562
我觉得我缺少一些基本的东西,但我想不通。 感谢您的帮助。
Ps:我知道我可以使用其他技术来做到这一点,但我真的很想测试这种方法。
【问题讨论】:
-
我不熟悉R,但是MATLAB中有一个函数
nextpow2,可以像2^nextpow2(149)=256一样使用,并且会给你你需要的数字。
标签: r time-series wavelet