微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

寻找具有许多样本的一维数据的计算可行小波变换算法和实现

如何解决寻找具有许多样本的一维数据的计算可行小波变换算法和实现

我正在对具有大量样本(几百万)的一维数据集进行多分辨率分析。目前我正在 python 中试验 pywavelets,但是在 25 万个样本之后它的计算变得非常密集,并且随着我增加样本大小而爆炸(我不确定复杂性顺序,但我相信它是 O(n^2) ) 并且几乎不可能有超过几百万个样本。我用完了内存限制以及超过了某个限制(在一百万个样本之后很容易超过 10GB)。可以在不使用内存中的整个过程的情况下迭代地执行任务吗?

我正在寻找可以为我提供计算上更可行的解决方案的替代方案。我目前正在使用连续小波变换,但在大多数情况下我也可以使用离散小波变换。根据我的理解,DWT 会在小波拉伸时跳过点(频率变低),因此低频小波分解的系数点较少,而 CWT 的每个子(和母)小波分解的系数点相同。对于我的情况,这并不重要,因为低频分量可以用更少的点很好地表征。如果我错了,请纠正我(参考另一个 stackexchange 帖子:https://dsp.stackexchange.com/questions/8009/using-continuous-verses-discrete-wavelet-transform-in-digital-applications)。对于 DWT,我遇到了称为快速小波变换的算法,它的复杂度较低,因此速度更快(类似于快速傅里叶变换与离散傅里叶变换和滤波器组理论的关系)。我遇到了一个开源快速小波变换库 - https://ltfat.github.io/doc/wavelets/fwt_code.html 。但是我看不到支持的小波类型,还是快速小波变换本身就是一个类别?

我想知道更多我可以尝试的选项(对任何语言或工具包开放,只要它是开源的)。也对 GPU 计算开放(openCL、Vulkan、任何开源甚至 CUDA,因为我有 Nvidia 卡)。对于多线程任务也是如此(我觉得这将是一种可行的方法,即使 CWT 考虑到我可以在单独的线程中运行每个卷积,除了内存问题)。如果有任何正在进行的项目我可以作为 Beta 测试运行,并且可能还会为代码做出贡献,我也会对此感到满意。

我发现了一个有用的资源:https://github.com/PyWavelets/pywt/issues/371。两个库,在 CUDA 上工作的 PDWT 和支持 SSE(cpu 上的 SIMD 指令)的 libdwt。我正在寻找更多资源。

信号是非常随机的,并且潜在的属性并不那么为人所知。因此,我将尝试使用不同的小波进行分析,因此我将不得不进行多次迭代,甚至可视化(插值和强度线性)也需要进行严格的分析。目前我已经在 python 中尝试了高斯导数和墨西哥帽小波。另外,我也有兴趣了解有关不同小波的数学/信号分辨率或最佳信号属性的资源。我能够关联一些(用于脉冲信号的墨西哥帽小波),但想在数学上进行更多探索(将帮助我更快地选择更优化的小波并节省计算迭代)

旁注:也很想知道 pywavelets 基于什么算法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。