2013-05-13 77 views

回答

0

之所以這個矩陣永遠不會被計算出來,因爲使用它計算DWT是非常低效的。 FWT方法要快得多。

對於長度爲16的信號和一三電平哈爾變換,我發現這個矩陣在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)和。

向您展示如何從過濾器構建矩陣。您從矩陣的下半部分開始 - 一個零矩陣,將每一行進一步放入2個步驟的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++它。這並不難(只是一些簿記),但正如所說的,沒有人使用它,因爲高效的算法不需要它。

+0

感謝您的回覆。我明白爲什麼效率低下,實際上我已經知道了。不幸的是,我正在使用的方法(CS)需要這樣的矩陣。 – user3100 2013-05-17 13:54:09