0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023 clear all ;
0024 close all;
0025
0026
0027 Spin = 0;
0028 L = 16;
0029 B = 2;
0030 J_min = 2;
0031 J =s2let_jmax(L, B);
0032
0033
0034 disp('Generates random band-limited function')
0035 flm_gen = zeros(L^2,1);
0036 flm_gen = rand(size(flm_gen)) + sqrt(-1)*rand(size(flm_gen));
0037 flm_gen = 2.*(flm_gen - (1+sqrt(-1))./2);
0038 disp('Construct the corresponding signal on the sphere')
0039 f_gen = ssht_inverse(flm_gen, L,'Method', 'MW');
0040 disp('Construct the corresponding spin signal on the sphere')
0041 f_spin_gen = ssht_inverse(flm_gen, L, 'Spin', Spin, 'Method', 'MW');
0042 flm_spin_gen= ssht_forward(f_spin_gen, L, 'Spin', Spin, 'Method', 'MW');
0043 disp('----------- ');
0044
0045
0046
0047
0048
0049 disp('curvelet_tiling: Tile curvelets in harmonic space (cur_lm, scal_l)')
0050
0051 [cur_lm scal_l] = s2let_curvelet_tiling(B, L, J_min, ...
0052 'Spin', Spin, 'SpinLowered', false, 'SpinLoweredFrom', 0);
0053
0054 disp('Check if admissibility condition is satisfied: ');
0055 error_on_cur_tiling = s2let_check_cur_tiling(cur_lm, scal_l, L, Spin, J, J_min)
0056 disp('----------- ');
0057
0058
0059 disp(' ');
0060
0061 disp('Curvelet transform: Full resolution (Upsample: true)');
0062
0063
0064
0065 disp('Spin signal, Full resolution: analysis_lm2lmn...')
0066 [f_cur_lmn, f_scal_lm] = s2let_transform_curvelet_analysis_lm2lmn(flm_spin_gen, cur_lm, scal_l, ...
0067 'B', B, 'L', L, 'J_min', J_min,...
0068 'Spin', Spin, ...
0069 'Reality', false, ...
0070 'Upsample', true,...
0071 'SpinLowered', false, ...
0072 'SpinLoweredFrom', 0);
0073
0074
0075
0076 disp('Spin signal, Full resolution: synthesis_lmn2lm...')
0077 flm_spin_rec = s2let_transform_curvelet_synthesis_lmn2lm(f_cur_lmn, f_scal_lm, cur_lm, scal_l, ...
0078 'B', B, 'L', L, 'J_min', J_min,...
0079 'Spin', Spin, ...
0080 'Reality', false,...
0081 'Upsample', true,...
0082 'SpinLowered', false, ...
0083 'SpinLoweredFrom', 0);
0084
0085 disp('Compute the re-constructed function via ssht_inverse ');
0086 f_spin_rec = ssht_inverse(flm_spin_rec, L, 'Spin', Spin, 'Method', 'MW');
0087 disp('- Test exact transform:');
0088 disp('Check the difference between flm_gen and flm_rec:');
0089 maxerr = max(abs(flm_spin_gen - flm_spin_rec))
0090 disp('Check the difference between f_gen and f_rec: ');
0091 maxerr = max(abs(f_spin_gen(:) - f_spin_rec(:)))
0092 disp('----------- ');
0093
0094
0095 disp('Curvelet transform: multiresolution (Upsample: false): ');
0096
0097
0098
0099 disp('Spin signal, Multi-resolution: analysis_lm2lmn...')
0100 [f_cur_lmn, f_scal_lm] = s2let_transform_curvelet_analysis_lm2lmn(flm_spin_gen, cur_lm, scal_l, ...
0101 'B', B, 'L', L, 'J_min', J_min,...
0102 'Spin', Spin, ...
0103 'Reality', false, ...
0104 'Upsample', false,...
0105 'SpinLowered', false, ...
0106 'SpinLoweredFrom', 0);
0107
0108
0109
0110 disp('Spin signal, Multi-resolution: synthesis_lmn2lm...')
0111 flm_spin_rec = s2let_transform_curvelet_synthesis_lmn2lm(f_cur_lmn, f_scal_lm, cur_lm, scal_l, ...
0112 'B', B, 'L', L, 'J_min', J_min,...
0113 'Spin', Spin, ...
0114 'Reality', false,...
0115 'Upsample', false,...
0116 'SpinLowered', false, ...
0117 'SpinLoweredFrom', 0);
0118
0119 disp('Compute the re-constructed function via ssht_inverse ');
0120 f_spin_rec = ssht_inverse(flm_spin_rec, L, 'Spin', Spin, 'Method', 'MW');
0121 disp('- Test exact transform:');
0122 disp('Check the difference between flm_gen and flm_rec:');
0123 maxerr = max(abs(flm_spin_gen - flm_spin_rec))
0124 disp('Check the difference between f_gen and f_rec: ');
0125 maxerr = max(abs(f_spin_gen(:) - f_spin_rec(:)))
0126 disp('----------- ');
0127
0128
0129 disp(' ')
0130 disp('=============================')
0131 disp('REAL Signals TEST')
0132 disp('=============================')
0133
0134 disp('Constraint on flms to generate real signal')
0135
0136 for el = 0:L-1
0137 ind = el*el + el + 1;
0138 flm_gen(ind,1) = real(flm_gen(ind,1));
0139 for m = 1:el
0140 ind_pm = el*el + el + m + 1;
0141 ind_nm = el*el + el - m + 1;
0142 flm_gen(ind_nm,1) = (-1)^m * conj(flm_gen(ind_pm,1));
0143 end
0144 end
0145
0146
0147
0148
0149 disp('Real signal: curvelet_tiling: Tile spin-0 curvelets in harmonic space (cur_lm, scal_l)')
0150 [cur_lm scal_l] = s2let_curvelet_tiling(B, L, J_min, 'Spin', 0);
0151 disp('----------- ');
0152
0153
0154 disp('Curvelet transform: Full-resolution (Upsample: true): ');
0155
0156
0157
0158 disp('Real signal, Full resolution: analysis_lm2lmn...')
0159 [f_cur_lmn, f_scal_lm] = s2let_transform_curvelet_analysis_lm2lmn(flm_gen, cur_lm, scal_l, ...
0160 'B', B, 'L', L, 'J_min', J_min,...
0161 'Reality', true, ...
0162 'Upsample', true);
0163
0164
0165
0166 disp('Real signal, Full resolution: synthesis_lmn2lm...')
0167 flm_rec = s2let_transform_curvelet_synthesis_lmn2lm(f_cur_lmn, f_scal_lm, cur_lm, scal_l, ...
0168 'B', B, 'L', L, 'J_min', J_min,...
0169 'Reality', true,...
0170 'Upsample', true);
0171 f_gen = ssht_inverse(flm_gen, L,'Method', 'MW');
0172 f_rec = ssht_inverse(flm_rec, L,'Method', 'MW');
0173 disp('- Test exact transform:');
0174 disp('Check the difference between flm_gen and flm_rec:');
0175 maxerr = max(abs(flm_gen - flm_rec))
0176 disp('Check the difference between f_gen and f_rec: ');
0177 maxerr = max(abs(f_gen(:) - f_rec(:)))
0178 disp('----------- ');
0179
0180
0181 disp('Curvelet transform: Multi-resolution (Upsample: false): ');
0182
0183
0184
0185 disp('Real signal, Multi-reolution: analysis_lm2lmn...')
0186 [f_cur_lmn, f_scal_lm] = s2let_transform_curvelet_analysis_lm2lmn(flm_gen, cur_lm, scal_l, ...
0187 'B', B, 'L', L, 'J_min', J_min,...
0188 'Reality', true, ...
0189 'Upsample', false);
0190
0191
0192
0193 disp('Real signal, Multi-reolution: synthesis_lmn2lm...')
0194 flm_rec = s2let_transform_curvelet_synthesis_lmn2lm(f_cur_lmn, f_scal_lm, cur_lm, scal_l, ...
0195 'B', B, 'L', L, 'J_min', J_min,...
0196 'Reality', true,...
0197 'Upsample', false);
0198 f_gen = ssht_inverse(flm_gen, L,'Method', 'MW');
0199 f_rec = ssht_inverse(flm_rec, L,'Method', 'MW');
0200 disp('- Test exact transform:');
0201 disp('Check the difference between flm_gen and flm_rec:');
0202 maxerr = max(abs(flm_gen - flm_rec))
0203 disp('Check the difference between f_gen and f_rec: ');
0204 maxerr = max(abs(f_gen(:) - f_rec(:)))
0205 disp('----------- ');