首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用小波变换求小波基

用小波变换求小波基
EN

Stack Overflow用户
提问于 2013-02-26 18:29:48
回答 2查看 3.6K关注 0票数 2

为了得到小波变换和包小波变换,我一直在使用R包wavethresh。在小波基上可以很容易地得到小波变换的系数。然而,我不能设法获得小波基。

我目前使用的是标准小波滤波器: Daubechies最小不对称。

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

代码语言:javascript
运行
复制
data <- cos(1:512/(10*pi))
wave <- wd(data)

对于小波包变换:

代码语言:javascript
运行
复制
wave <- wp(Temperature[,1])
coeffs <- MaNoVe(wave.th)
l <- print(coeffs)

我尝试了一些小波包变换的方法:

代码语言:javascript
运行
复制
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包中有我的问题的解决方案,它也将是完美的;)

非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 19:38:39

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

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

代码语言:javascript
运行
复制
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是小波分辨率级别。

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

票数 1
EN

Stack Overflow用户

发布于 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 becomeswave.th‘。但是,我忽略了这一点,并将它们视为同一对象。我猜您可能一直在做一些与本讨论无关的阈值处理:)

一切顺利,盖伊·纳森

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15086727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档