Daubechies 系数的数量

信息处理 matlab 小波
2021-12-19 22:12:22

我想知道输入大小和离散小波变换给出的系数数量之间的相关性。

我正在使用 Daubechies 小波来描述一维函数,并且我正在使用 PyWavelets 来实现它(类似于 MATLAB 工具箱)。

我首先使用 Haar 小波来实现它,它给出了正确的结果,并且我完全理解它是如何工作的。假设我的输入函数有 16 个数据点,如果我使用 Haar,我从多级分解 ( wavedec) 得到的结果是这样的(括号中的移位数):

V1[1], W1[1], W2[2], W3[4], W4[8]

这一切都很好。V1 给了我缩放函数和不同比例和膨胀的 W1-W5 小波。我的问题是当我使用下一个 Daubechies ('db2'在工具箱中称为D4)时,我得到

V1[6], W1[6], W2[9]

我失去了所有的直觉。我不知道 6、6 和 9 来自哪里,它们会根据我指定的级别(甚至不确定指定级别意味着什么)以及输入大小而变化。我如何预测系数的数量,以及有哪些好的资源可以更好地理解为什么?

谢谢!

编辑:关于 V 和 W 的说明:

Vn通常表示某个缩放函数的跨度,ϕ, IE{ϕn,k}, 在哪里k是转变和n缩放。Wn除了小波函数外,其他都是一样的,ψ. 不过,我可能通过引用 V 和 W 的系数向量来滥用这个符号。

EDIT2:代码

这是生成上述内容的 MATLAB 代码:

>> [C, L] = wavedec(1:16, 4, 'db1'); L
L = 
     1     1     2     4     8    16
>> [C, L] = wavedec(1:16, 2, 'db2'); L
L =
     6     6     9    16

我实际上使用了 PyWavelets,它看起来像这样:

>>> import pywt
>>> map(len, pywt.wavedec(range(16), 'db1')) # defaults to level = 4
[1, 1, 2, 4, 8]
>>> map(len, pywt.wavedec(range(16), 'db2')) # defaults to level = 2
[6, 6, 9]
1个回答

根据 MA ​​TLAB文档wavedec

每个过滤器的长度等于2N. 如果n = length(s), 信号FG有长度n+2N1和系数 cA1cD1有长度

floor(n12)+N

这里,n=16是信号的长度,并且N=2是 Daubechies 数。

将所有这些放在一起,您在第二级的详细系数应该是长度

floor(1612)+2=7+2=9.

在第二级,你的系数应该是长度

floor(912)+2=4+2=6.

如果您想知道为什么一定会出现这种情况,请想象一下过滤抽取过程。缩放和小波函数dbm小波有长度2m. 当你对长度进行卷积时n带长度的信号2m信号,你得到一个长度的信号l0=n+2m1. 如果你对这个结果信号进行每秒采样,你会得到一些长度l1=n+2m12=l02. 当然,如果l0是奇数(n是偶数),那么我们不能将信号精确地分成两部分借助我不会在此处讨论的巧妙数学,您可以证明最后一个非配对系数无论如何都是多余的(不包含我们还不知道的信息),因此您可以省略它。因此,我们将始终得到长度的抽取信号

l1=floor(l02)=floor(n+2N12)=floor(n12)+N.