从小波变换得到小波基

时间:2013-02-26 10:29:48

标签: r wavelet

我一直在使用R包wavethresh来获得小波变换和包小波变换。我可以很容易地在小波基础上得到小波变换的系数。 但是,我无法管理小波基础。

我现在正在使用标准的小波滤波器:Daubechies Least Asymmetric。

以下是我的小波变换代码示例:

data <- cos(1:512/(10*pi))
wave <- wd(data)

和小波包变换:

wave <- wp(Temperature[,1])
coeffs <- MaNoVe(wave.th)
l <- print(coeffs)

我为小波包变换尝试了一些东西:

basis <- matrix(NA,length(l$level),512)
for (i in 1:length(l$level))
    basis[i,] <- drawwp.default(l$level[i],l$pkt[i],resolution=512)

但我只获得了一些功能,而不是整个基础。此外,我不确定这些功能是否是我想要的功能。

以下是包文档的链接:wavethresh.pdf。但是如果你在另一个R包中找到我的问题的解决方案,它也将是完美的;)

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:4)

仅供记录:我是wavethresh的主要作者,我也认为wmtsa是一个很好的包。

您最初为wavethresh编写的代码应该可以使用。我只是在长度为512的任意数据集上尝试过它(因为我无法访问您的数据!)它似乎工作正常,并且包含215个元素的`basis'数组。函数图(coeffs)也产生了时频图,因此可以看到时频平面的特定平铺。

参考你的两篇文章。函数`drawwp.default'实际上正是你在第二篇文章中提到的。为了获得特定小波包的图片(或值的矢量),包含全零和一个的序列被反转。这是一个众所周知的技巧,自1993年以来一直在wavethresh中用于wavelets(在函数draw()中)。

draw和drawwp.default不会做的是获得正确的翻译。它试图选择一个很好的翻译价值,以便你得到一个很好的图片。这就是为什么drawwp.default的参数包含比例级别,“振荡参数数量”而不是翻译值。但是,将小波向上或向下平移是很简单的,你如何做到这取决于你所假设的边界条件。

在你的原帖中确实出现了(至少对我而言)一个拼写错误。第4行中的对象wave' in line 3 becomes wave.th'。但是,我忽略了它并将它们作为同一个对象。我想你可能一直在做一些与这个讨论无关的阈值处理:)

一切顺利, 盖伊·纳森

答案 1 :(得分:1)

我的问题解决了! 我使用了包wmtsa而不是wavethresh

要构建基础,在两种情况下(小波变换和数据包小波变换),您都可以将reconstruct方法用于某个小波w。这个系数的所有系数都设置为0,但设置为1的系数除外。

basis <- matrix(NA,2^lvl,2^lvl)
compt <- 1
w$data$s9 <- 0
for (i in 1:lvl)
    w$data[[i]]<-rep(0,2^(lvl-i))
for (i in 1:lvl){
    for (j in 1:2^(lvl-i)){
            w$data[[i]][j] <- 1
        basis[,compt] <- reconstruct(b)
        w$data[[i]][j] <- 0
        compt <- compt + 1
    }
}

lvl是小波分辨率级别。

小波包变换可以做同样的事情。