为了得到小波变换和包小波变换,我一直在使用R包wavethresh
。在小波基上可以很容易地得到小波变换的系数。然而,我不能设法获得小波基。
我目前使用的是标准小波滤波器: Daubechies最小不对称。
下面是我的小波变换代码示例:
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包中有我的问题的解决方案,它也将是完美的;)
非常感谢你的帮助!
发布于 2013-02-27 19:38:39
我的问题解决了!我使用的是wmtsa
包,而不是wavethresh
。
为了构造基础,在这两种情况下(小波变换和包小波变换),可以对某个小波w
使用reconstruct
方法。这个函数的所有系数都设置为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-06-18 22:31:09
仅供记录:我是wavethresh的主要作者,我也认为wmtsa是一个很好的包。
你最初为wavethresh编写的代码应该可以工作。我刚刚在一个长度为512的任意数据集上尝试了它(因为我无法访问您的数据!)而且它似乎工作得很好,并且包含215个元素的“`basis”数组。函数图(Coeffs)还生成了时间-频率图,因此可以看到时间-频率平面的特定平铺。
指的是你的两篇文章。函数`drawwp.default‘实际上做的正是你在第二篇文章中提到的事情。为了得到特定小波包的图像(或值的向量),对包含全0和1的序列进行反转。这是一个广为人知的技巧,自1993年以来一直用于小波(在函数draw()中)。
draw和drawwp.default做不到的是正确的翻译。它试图选择一个很好的翻译值,这样你就可以得到一张很好的图片。这就是为什么drawwp.default的参数包含刻度级别,“振荡参数的数量”,而不是平移值。然而,向上或向下平移小波是很简单的,您如何做将取决于您假设的边界条件。
看起来(至少在我看来)你最初的帖子里有一个打字错误。第4行中的对象wave' in line 3 becomes
wave.th‘。但是,我忽略了这一点,并将它们视为同一对象。我猜您可能一直在做一些与本讨论无关的阈值处理:)
一切顺利,盖伊·纳森
https://stackoverflow.com/questions/15086727
复制相似问题