C/ c++小波库,也返回NxN小波矩阵

  • 本文关键字:返回 NxN c++ matrix wavelet dwt
  • 更新时间 :
  • 英文 :


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

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

但我正在寻找更具体的东西,你可以看到。

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

Thanks in advance

不计算这个矩阵的原因是使用它计算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每一行向前移动一步。然后将滤镜的宽度扩大两倍并重复,现在每次只移动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++写它。这并不难(有点簿记),但如前所述,没有人使用它,因为高效的算法不需要它。

相关内容

  • 没有找到相关文章

最新更新