이유 이유 이 행렬을 계산하지 않으면 DWT를 사용하여 계산하는 것이 매우 비효율적이라는 것입니다. FWT 방식은 훨씬 빠릅니다. 길이 (16)의 신호와 3 레벨 하르 들어
변환, I는 발견 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)
이 매트릭스.
필터를 통해 매트릭스를 구성하는 방법을 보여줍니다. 행렬의 아래쪽 반쪽부터 시작합니다. 행렬은 0부터 시작하여 필터 g
은 모든 행에서 2 단계 더 나아갑니다. 그런 다음 필터를 두 번 넓게 만들고 반복하십시오. 한 번에 4 단계 씩 이동하십시오. 당신이 분해의 최상위 레벨에 올 때까지 이것을 반복하고, 마침내 근사 필터를 같은 너비 (여기, 8)에 놓습니다. 당신이 C++로를 작성하는 데 도움이되는 검사
>> 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
희망으로
. 그것은 어렵지 않습니다 (약간의 부기). 그러나 효율적인 알고리즘은 필요하지 않기 때문에 아무도 그것을 사용하지 않습니다.
답장을 보내 주셔서 감사합니다. 나는 왜 그것이 비효율적인지, 사실 내가 이미 알고 있다는 것을 이해합니다. 불행하게도, 내가 연구하고있는 방법 (CS)에는 그러한 매트릭스가 필요합니다. – user3100