-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathd4boxcof.m
106 lines (86 loc) · 4.29 KB
/
d4boxcof.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
function cofs=d4boxcof
% cofs=D4BOXCOF
%
% Puts all the required coefficients for the 4-tap Daubechies wavelet
% transform on the interval in a structure array.
%
% SEE ALSO: D4BOXSTEP, D4BOXSTEPI, PRECOND4
%
% Last modified by fjsimons-at-alum.mit.edu, 03/16/2010
% Get the product filter coefficients
[h0,f0]=wc('Daubechies',2);
% Get the lowpass (H0) and highpass (H1) coefficients of the ANALYSIS
% Get the lowpass (F0) and highpass (F1) coefficients of the SYNTHESIS
[H0,H1,F0,F1]=prodco(f0,h0);
% Now the special ones for the edges, e.g. from
% http://www.pacm.princeton.edu/~ingrid/publications/54.txt
% http://www.nr.com/contrib/beylkin/D04qmf.txt
% Left, lowpass
% LLO=[ d4h1l1 d4h1l2 d4h1l3 0 0; ...
% d4h2l1 d4h2l2 d4h2l3 d4h2l4 d4h2l5];
LLO=[ 0.603332511928053 0.690895531839104 -0.398312997698228 0 0; ...
0.0375174604524466 0.457327659851769 0.850088102549165 0.223820356983114 -0.129222743354319];
% Left, highpass
% MINUS EVERYTHING TO COMPARE TO BEYLKIN BUT CORRECT ACCORDING TO INGRID
% LHI=[ d4g1l1 d4g1l2 d4g1l3 0 0; ...
% [ d4g2l1 d4g2l2 d4g2l3 d4g2l4 d4g2l5];
LHI=[-0.796543516912183 0.546392713959015 -0.258792248333818 0 0; ...
0.0100372245644139 0.122351043116799 0.227428111655837 -0.836602921223654 0.483012921773304];
% Right, lowpass
% RLO=[ d4h2r5 d4h2r4 d4h2r3 d4h2r2 d4h2r1; ...
% 0 0 d4h1r3 d4h1r2 d4h1r1];
RLO=[ 0.443149049637559 0.767556669298114 0.374955331645687 0.190151418429955 -0.194233407427412; ...
0 0 0.230389043796969 0.434896997965703 0.870508753349866];
% Right, hipass
% MINUS EVERYTHING TO COMPARE TO BEYLKIN AND ALSO COMPARED TO INGRID
% RHI=[ d4g2r5 d4g2r4 d4g2r3 d4g2r2 d4g2r1; ...
% 0 0 d4g1r3 d4g1r2 d4g1r1];
RHI=[ 0.231557595006790 0.401069519430217 -0.717579999353722 -0.363906959570891 0.371718966535296;...
0 0 -0.539822500731772 0.801422961990337 -0.257512919478482];
% Rearrange the coefficients for the edge calculations
% This is what will happen in D4BOXSTEP to give f(1,2,3,k+1,k+2,k+3)
LFT=[LLO ; 0 0 0 H0(4:-1:3) ; LHI ; 0 0 0 H1(4:-1:3)];
% Check the orthogonality
difer(LFT'*LFT-eye(length(LLO)),[],[],NaN)
% This is what will happen in D4BOXSTEP to give f(k-2,k-1,k,2k-2,2k-1,2k)
RGT=[H0(2:-1:1) 0 0 0 ; RLO ; H1(2:-1:1) 0 0 0 ; RHI];
% Check the orthogonality
difer(RGT'*RGT-eye(length(RLO)),[],[],NaN)
% Preconditioning coefficients
% On the left, forward
% HERE WE READ DOWN INGRID'S COLUMNS AND THE BEYLKIN LABELS MAKE SENSE
% LF=[ d4pc1l1 0; ...
% d4pc1l2 d4pc2l2];
LF=[0.324894048898962 0 ; ...
0.0371580151158803 1.00144540498130];
% On the left, inverse
% LI=[ d4ipc1l1 0; ...
% d4ipc1l2 d4ipc2l2];
LI=[ 3.07792649138669 0 ; ...
-0.114204567242137 0.998556681198888];
% Check the inverse
difer(inv(LF)-LI,[],[],NaN)
% On the right, forward
% HERE THE LABELING SITS WELL WITH BEYLKIN AND WE READ INGRIDS COLUMNS WITH PERMUTATION THROUGH CENTER
% RF=[ d4pc1r1 d4pc1r2; ...
% 0 d4pc2r2];
RF=[2.09629288435324 -0.800813234246437; ...
0 1.08984305289504];
% On the right, inverse
% RI=[ d4ipc1r1 d4ipc1r2; ...
% 0 d4ipc2r2];
RI=[0.477032578540915 0.350522032550918; ...
0 0.917563310922261];
% Check the inverse
difer(inv(RF)-RI,[],[],NaN)
% Collect all of these filter coefficients into a structure
cofs.H0=H0; cofs.H1=H1; cofs.F0=F0; cofs.F1=F1;
% Edge coefficients
cofs.LLO=LLO; cofs.LHI=LHI;
cofs.RLO=RLO; cofs.RHI=RHI;
% Combination coefficients
cofs.LFT=LFT;
cofs.RGT=RGT;
% Preconditioners
cofs.LF=LF; cofs.LI=LI;
cofs.RF=RF; cofs.RI=RI;