使用 pyWavelets 进行多级部分小波重建

山姆·佩里

我正在寻找一种方法来部分重建小波分解的分支,这样总和将重新创建原始信号。这可以使用 Matlab 实现:

DATA = [0,1,2,3,4,5,6,7,8,9]
N_LEVELS = 2;
WAVELET_NAME = 'db4';
[C,L] = wavedec(DATA, N_LEVELS, WAVELET_NAME);
A2 = wrcoef('a', C, L, WAVELET_NAME, 2);
D2 = wrcoef('d', C, L, WAVELET_NAME, 2);
D1 = wrcoef('d', C, L, WAVELET_NAME, 1);
A2+D2+D1

ans =

    0.0000    1.0000    2.0000    3.0000    4.0000    5.0000    6.0000    7.0000    8.0000    9.0000

我想使用 pywt 实现相同的目标,但我不知道该怎么做。pywt.waverec函数创建完整的重建,但没有用于部分重建的级别参数。pywt.upcoef函数完成了我对单个级别的需求,但我不确定如何将其扩展到多个级别:

>>> import pywt
>>> data = [1,2,3,4,5,6]
>>> (cA, cD) = pywt.dwt(data, 'db2', 'smooth')
>>> n = len(data)
>>> pywt.upcoef('a', cA, 'db2', take=n) + pywt.upcoef('d', cD, 'db2', take=n)
array([ 1.,  2.,  3.,  4.,  5.,  6.])
山姆·佩里

我设法编写了我自己的wrcoef函数版本,它似乎按预期工作:

import pywt
import numpy as np

def wrcoef(X, coef_type, coeffs, wavename, level):
    N = np.array(X).size
    a, ds = coeffs[0], list(reversed(coeffs[1:]))

    if coef_type =='a':
        return pywt.upcoef('a', a, wavename, level=level)[:N]
    elif coef_type == 'd':
        return pywt.upcoef('d', ds[level-1], wavename, level=level)[:N]
    else:
        raise ValueError("Invalid coefficient type: {}".format(coef_type))



level = 4
X = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]
coeffs = pywt.wavedec(X, 'db1', level=level)
A4 = wrcoef(X, 'a', coeffs, 'db1', level)
D4 = wrcoef(X, 'd', coeffs, 'db1', level)
D3 = wrcoef(X, 'd', coeffs, 'db1', 3)
D2 = wrcoef(X, 'd', coeffs, 'db1', 2)
D1 = wrcoef(X, 'd', coeffs, 'db1', 1)
print A4 + D4 + D3 + D2 + D1

# Results:
[  9.99200722e-16   1.00000000e+00   2.00000000e+00   3.00000000e+00
   4.00000000e+00   5.00000000e+00   6.00000000e+00   7.00000000e+00
   8.00000000e+00   9.00000000e+00   1.00000000e+01   1.10000000e+01
   1.20000000e+01   1.30000000e+01   1.40000000e+01   1.50000000e+01
   1.60000000e+01   1.70000000e+01]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何安装python3-PyWavelets

来自分类Dev

在OpenCV中使用小波变换进行伤口分割

来自分类Dev

如何在Kubuntu 14.04上为Python 3安装PyWavelets?

来自分类Dev

如何在Kubuntu 14.04上为Python 3安装PyWavelets?

来自分类Dev

使用OpenMP进行2D Haar小波变换的并行C代码

来自分类Dev

使用javascript进行多级下拉

来自分类Dev

使用 Cucumber 进行多级测试

来自分类Dev

使用滚动窗口的小波相关

来自分类Dev

使用Linq进行多级where子句过滤

来自分类Dev

使用osquery通配符进行多级模式

来自分类Dev

使用Bootstrap进行小查询

来自分类Dev

我正在尝试使用laravel进行多级别分类

来自分类Dev

在实体框架中使用TPT设计进行多级继承

来自分类Dev

在R Shiny中使用Plotly进行多级钻取

来自分类Dev

使用c预处理程序宏进行多级调试

来自分类Dev

使用递归对JSON的多级进行排序和解析

来自分类Dev

Makefile-使用修改后的头文件进行重建

来自分类Dev

使用渠道在Go中进行斐波那契

来自分类Dev

使用adjtimex进行小的时间调整

来自分类Dev

jVectorMap使用Angularjs进行小渲染

来自分类Dev

使用AFNetworking进行多部分PUT请求

来自分类Dev

使用mgo进行部分更新

来自分类Dev

使用部分私钥对RSA消息进行解密?

来自分类Dev

使用部分数据进行xslt克隆

来自分类Dev

使用RestTemplate进行部分JSON检索

来自分类Dev

使用STL对部分向量进行排序

来自分类Dev

使用部分密码进行身份验证

来自分类Dev

使用Back In Time进行部分还原

来自分类Dev

使用多个部分词进行全文搜索