0

我正在寻找一个用于离散小波变换 (DWT) 的 C++ 库,它还可以返回变换的 NxN DWT 矩阵。有一个类似的问题在这里打开

寻找用于信号处理的良好 C/C++ 小波库

但我正在寻找更具体的东西,如你所见。

如果该库在某些非 GNU 许可下允许我在专有软件(LGPL、MPL、BSD 等)中使用它会更有帮助

提前致谢

4

1 回答 1

0

从未计算此矩阵的原因是使用它计算 DWT 的效率非常低。FWT 方法要快得多。

对于长度为 16 的信号和 3 级 haar 变换,我在 matlab 中发现了这个矩阵

>> h=[1 1];
>> g=[1 -1];
>> m1=[[ones(1,8) zeros(1,8); ...
        zeros(1,8) ones(1,8); ... 
        1 1 1 1 -1 -1 -1 -1 zeros(1,8); ...
        zeros(1,8) 1 1 1 1 -1 -1 -1 -1]/sqrt(8); ...
        [1 1 -1 -1 zeros(1,12); ...
        zeros(1,4) 1 1 -1 -1 zeros(1,8); ...
        zeros(1,8) 1 1 -1 -1 zeros(1,4); ...
        zeros(1,12) 1 1 -1 -1]/sqrt(4); ...
        [g zeros(1,14); ...
        zeros(1,2) g zeros(1,12); ...
        zeros(1,4) g zeros(1,10); ...
        zeros(1,6) g zeros(1,8); ...
        zeros(1,8) g zeros(1,6); ...
        zeros(1,10) g zeros(1,4); ...
        zeros(1,12) g zeros(1,2); ...
        zeros(1,14) g]/sqrt(2)]    

m1 = 
A  A  A  A  A  A  A  A  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  A  A  A  A  A  A  A  A
A  A  A  A -A -A -A -A  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  A  A  A  A -A -A -A -A
B  B -B -B  0  0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  B  B -B -B  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  B  B -B -B  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  B  B -B -B
C -C  0  0  0  0  0  0  0  0  0  0  0  0  0  0
0  0  C -C  0  0  0  0  0  0  0  0  0  0  0  0
0  0  0  0  C -C  0  0  0  0  0  0  0  0  0  0
0  0  0  0  0  0  C -C  0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0  C -C  0  0  0  0  0  0
0  0  0  0  0  0  0  0  0  0  C -C  0  0  0  0
0  0  0  0  0  0  0  0  0  0  0  0  C -C  0  0
0  0  0  0  0  0  0  0  0  0  0  0  0  0  C -C

其中A=1/sqrt(8),B=1/sqrt(4)C=1/sqrt(2).

对应于 FWT。这向您展示了如何从过滤器构建矩阵。您从矩阵的下半部分开始——一个零矩阵,将过滤器g每行进一步放置 2 步。然后使过滤器宽度加倍并重复,现在一次移动 4 步。重复此操作,直到您处于最高分解级别,最后将近似滤波器放入相同的宽度(此处为 8)。

就像一张支票

 >> signal=1:16; % ramp
 >> [h g]=daubcqf(2); % Haar coefficients from the Rice wavelet toolbox
 >> fwt(h,signal,3) % fwt code by Jeffrey Kantor
 >> m1*signal' % should produce the same vector    

希望对您用 C++ 编写它有所帮助。这并不难(有点记账),但正如所说,没有人使用它,因为高效的算法不需要它。

于 2013-05-15T09:57:16.050 回答