我正在对具有大量样本(几百万)的一维数据集进行多分辨率分析。目前我正在 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 测试运行,并且可能还为代码做出贡献,我也会对此感到满意。
该信号是非常随机的,并且其基本属性不太为人所知。因此,出于分析目的,我将尝试使用不同的小波,因此我将不得不进行多次迭代,甚至可视化(插值和强度线性)也需要严格的分析。目前我已经在 python 中尝试过高斯导数和墨西哥帽子小波。在旁注中,我也有兴趣了解有关不同小波的数学/信号分辨率或最佳信号特性的资源。我能够关联一些(用于脉冲信号的墨西哥帽子小波),但想在数学上进行更多探索(将帮助我更快地选择更优化的小波并节省计算迭代)
旁注:也很想知道 pywavelets 基于什么算法。
编辑:遇到了一个有用的资源:https ://github.com/PyWavelets/pywt/issues/371 。两个库,在 CUDA 上工作的 PDWT 和支持 SSE(CPU 上的 SIMD 指令)的 libdwt。