2

我一直在使用 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 包中解决了我的问题,那也将是完美的;)

非常感谢你的帮助 !

4

2 回答 2

5

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

您最初为 wavethresh 编写的代码应该可以工作。我只是在长度为 512 的任意数据集上尝试了它(因为我无权访问您的数据!)它似乎工作正常,并且“基础”数组包含 215 个元素。函数 plot(coeffs) 还生成了一个时频图,因此可以看到时频平面的特定平铺。

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

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

在您的原始帖子中确实出现了(至少对我而言)一个错字。第 4 行中的对象wave' in line 3 becomeswave.th'。但是,我忽略了这一点,并将它们视为同一个对象。我猜你可能一直在做一些与本次讨论无关的阈值:)

一切顺利,盖伊·纳森

于 2013-06-18T14:31:08.787 回答
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是小波分辨率级别。

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

于 2013-02-27T11:38:39.070 回答