Module src.sara
Implementation of the SARA algorithm [Carrillo2012, Onose2017].
- src.sara.sara(y, epsilon, A, At, pU, G, W, Psi, Psit, param, warsmtart_name, checkpoint_name, alph, flag_dimensionality_reduction, Lambda, varargin)
Implementation of the SARA imaging algorithm.
Implementation of the reweighting / PDFB algorithm underlying the SARA imaging approach [Onose2017]. At each iteration of the outer reweighting scheme, the PDFB solves a problem of the form
\[\min_{x \in \mathbb{R}_+^{N}} \mu \|\Psi^\dagger x \|_{\omega, 1} + \sum_{b} \iota_{ \{\| y_{b} - \Phi_{b}(\cdot) \|_2 \leq \varepsilon_{b}\} } (x).\]- Parameters
y (composite, cell) – Blocks of visibilities {L}{nblocks_l}.
epsilon (composite, cell) – Data fidelity constraints {L}{nblocks_l}.
A (function handle) – Measurement operator.
At (function handle) – Adjoint of the measurement operator.
pU (composite, cell) – Preconditioning matrices {L}{nblocks_l}.
G (composite, cell of sparse matrices) – Degridding matrices {L}{nblocks_l}.
W (composite, cell of int[:]) – Masks for selection of the blocks of visibilities.
Psi (anonymous function) – Function handle representing the serial implementation of the SARA dictionary.
Psit (anonymous function) – Function handle representing the serial implementation of the adjoint SARA dictionary.
param (struct) – Algorithm parameters (see full description below).
warmstart_name (string) – Name of a valid
.mat
file to initialize the solver (warm-start).checkpoint_name (string) – Name defining the name for checkpoint files saved throughout the iterations.
alph (double) – Regularization parameter.
flag_dimensionality_reduction ([type]) – [description]
Lambda (composite, cell of complex[:, :]) – Dimensionality reduction matrix. (?)
varargin{1} (double[:, :]) – Initial value for the primal variable.
varargin{2} (double[:, :]) – Ground truth wideband image (only when debugging synthetic data experiments).
- Returns
xsol – Reconstructed image.
- Return type
double[:]
Important
The param structure should contain the following fields.
- param.verbose (string)
Print log or not
- param.save_intermediate_results_mat (bool)
Flag to save all estimates in a
.mat
file after each re-weighted- param.nu1 (double)
Upper bound on the norm of the SARA operator \(\Psi^\dagger\).
- param.nu2 (double)
Upper bound on the norm of the measurement operator \(\Phi\)
- param.gamma (double)
Regularization parameter.
- param.pdfb_min_iter (int)
Minimum number of iterations (PDFB).
- param.pdfb_max_iter (int)
Maximum number of iterations (PDFB).
- param.pdfb_rel_var (double)
Relative variation tolerance (PDFB).
- param.pdfb_fidelity_tolerance (double)
Tolerance to check data constraints are satisfied (PDFB).
- param.reweighting_max_iter (int)
Maximum number of reweighting steps.
- param.reweighting_min_iter (int)
Minimum number of reweighting steps (to reach “noise” level).
- param.reweighting_rel_var (double)
Tolerance relative variation (reweighting).
- param.reweighting_alpha (double)
Starting reweighting parameter.
- param.reweighting_sig (double)
Noise level (in wavelet space)
- param.elipse_proj_max_iter (int)
Maximum number of iterations for the FB algo that implements the projection onto the ellipsoid.
- param.elipse_proj_min_iter (int)
Minimum number of iterations for the FB algo that implements the projection onto the ellipsoid.
- parma.elipse_proj_eps (double)
Stopping criterion for the projection.
The following fileds are added to param in the course of the algorithm to be able to restart it from a previous state
- param.reweighting_alpha (double)
Current state of the reweighting parameter.
- param.init_reweight_step_count (int)
Iteration index of the current reweighting step when the checkpoint file is written.
- param.init_reweight_last_iter_step (int)
Global iteration index (unrolled over all pdfb iterations performed in the reweighting scheme) from which to restart the algorithm.
- param.init_t_start (int)
Global iteration index (unrolled over all pdfb iterations performed in the reweighting scheme) from which to restart the algorithm (
param.init_t_start = param.init_reweight_last_iter_step + 1
).
The following fileds are involved in the adaptive estimation of the noise level
- param.adjust_flag_noise (bool)
Flag to activate the adaptive procedure to estimate the noise level.
- param.adjust_noise_min_iter (int)
Minimum number of iterations to enable the adjustement of the estimate of the noise level.
- param.adjust_noise_rel_var (double)
Tolerance relative variation (reweighting) to to enable the adjustement of the estimate of the noise level.
- param.adjust_noise_start_iter (int)
Number of iterations to force triggering noise adjustement.
Note
The checkpoint file saved throughout the iterations is composed of the following variables (to be verified).
- param (struct)
Current state of the parameter structure (updated with auxiliary parameters describing the state of the solver when the checkpoint file has been written).
- xsol (double[:])
Current state of the image estimate.
- res (double[:, :])
Current state of the residual image.
- g (double[:])
Auxiliary variable involved in the update of the primal variable.
- epsilon (cell)
(Updated) Value of the l2-ball radii.
- t_block (cell of int)
Index of the last iteration where the weigths have been updated.
- proj (cell of complex[:])
Auxiliary variable involved in the update of the data fidelity dual variables.
- norm_res (cell of double)
Norm of the residual image (per block).
- v1 (double[:])
Dual variables associated with the sparsity prior.
- v2 (cell of complex[:])
Dual variables associated with the data fidelity terms (each cell corresponding to a data block).
- weights1 (double[:])
Weights associated with the sparsity prior.
- end_iter (int)
Last iteration (unrolled over all pdfb iterations).
- t_l11 (double)
Time to update the sparsity dual variable.
- t_master (double)
Time to perform update/computations on the master process.
- t_data (double)
Time to update the data fidelity dual variables.
- rel_val (double)
Relative variation of the solution across the iterations.