2013-02-26 38 views
1

我一直在使用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包的问题的解决方案,它将是完美的;)

非常感谢您的帮助!

回答

1

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

为了构造基础,在两种情况下(小波变换和分组小波变换),可以使用reconstruct方法对某个小波w。除了一个设置为1以外,这个系数的所有系数设置为0

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是小波分辨率级别。

可以对小波包变换进行相同的操作。

3

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

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

参考你的两个职位。函数`drawwp.default'实际上就是你在第二篇文章中提到的。为了得到特定小波包的图像(或值的矢量),将包含全零和一个全零的序列倒置。这是一个众所周知的技巧,自1993年以来一直处于wavethresh阶段(函数draw())。

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

确实出现(至少对我而言)是原始文章中的一个错字。对象wave' in line 3 becomes wave.th'在第4行。但是,我忽略了这一点,并把他们作为同一个对象。我想你可能已经做了一些与本次讨论无关的阈值:)

一切顺利, Guy Nason