2013-05-13 4 views
0

Я ищу библиотеку C++ для дискретного преобразования вейвлета (DWT), которая также может вернуть матрицу преобразования NxN DWT. Был аналогичный вопрос здесь открылсяВейвлет-библиотека C/C++, которая возвращает также матрицу вейвлетов NxN

Looking for a good C/C++ wavelet library for signal processing

но я ищу что-то более конкретное, как вы можете видеть.

Было бы полезно, если библиотека находится в некоторой лицензии не-GNU, что позволяет мне использовать его в проприетарное программное обеспечение (LGPL, MPL, BSD и т.д.)

Заранее спасибо

ответ

0

Причина эта матрица никогда не вычисляется, так это то, что она очень неэффективна для вычисления DWT с ее использованием. Метод FWT намного быстрее.

Для сигнала длины 16 и Haar 3 уровня преобразования, я обнаружил, что эта матрица в 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).

Это показывает вам, как вы строите свою матрицу из фильтров. Вы начинаете с нижней половины матрицы - матрицы нулей, помещая фильтр 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++. Это не сложно (немного бухгалтерского учета), но, как сказано, никто не использует его, потому что эффективные алгоритмы ему не нужны.

+0

Спасибо за ответ. Я понимаю, почему это неэффективно, ведь я уже это знал. К сожалению, метод, над которым я работаю (CS), требует такой матрицы. – user3100