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.