Matrix C/C++;同时返回NxN小波矩阵的小波库 我在寻找一个可以用于返回的离散小波变换(DWT)的C++库。 变换的NxN DWT矩阵。 这里有一个类似的问题

Matrix C/C++;同时返回NxN小波矩阵的小波库 我在寻找一个可以用于返回的离散小波变换(DWT)的C++库。 变换的NxN DWT矩阵。 这里有一个类似的问题,matrix,wavelet,dwt,Matrix,Wavelet,Dwt,但正如你所看到的,我正在寻找更具体的东西 如果库是在一些非GNU许可证下,允许我在专有软件(LGPL、MPL、BSD等)中使用它,这将更有帮助 提前感谢从未计算此矩阵的原因是使用它计算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

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

如果库是在一些非GNU许可证下,允许我在专有软件(LGPL、MPL、BSD等)中使用它,这将更有帮助


提前感谢

从未计算此矩阵的原因是使用它计算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。这将向您展示如何从过滤器构建矩阵。从矩阵的下半部分开始——一个由零组成的矩阵,每行将filter
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++编写它。这并不难(有点簿记),但正如前面所说,没有人使用它,因为高效的算法不需要它。

谢谢你的回复。我明白为什么效率低下,事实上我早就知道了。不幸的是,我正在研究的方法(CS)需要这样的矩阵。