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