SOLVE_BPDN - Solve BPDN (basis pursuit denoising) problem

Usage

sol = solve_bpdn(y, epsilon, A, At, Psi, Psit, param)
sol = solve_bpdn(y, epsilon, A, At, Psi, Psit)
[sol, info] = solve_bpdn(...)

Input parameters

y Measurements
epsilon Radius of the L2 ball
A Operator
At Adjoint of A
Psi Operator
Psit Adjoint of Psi
param Optional parameter

Output parameters

sol Solution
info Structure summarizing informations at convergence

Description

sol = solve_BPDN(y, A, At, Psi, Psit, param) solves:

\begin{equation*} arg \min_x \| \Psi x\|_1 s.t. \|y-A x\|_2 < \epsilon \end{equation*}

Y contains the measurements. A is the forward measurement operator and At the associated adjoint operator. Psit is a sparfying transform and Psi its adjoint. PARAM a Matlab structure containing the following fields:

General parameters:

  • param.verbose : 0 no log, 1 print main steps, 2 print all steps.

  • param.maxit : max. nb. of iterations (default: 200).

  • param.tol : is stop criterion for the loop. The algorithm stops if

    \begin{equation*} \frac{ n(t) - n(t-1) }{ n(t)} < tol, \end{equation*}

    where \(n(t) = ||\Psi(x)||\) is the objective function at iteration t by default, tol=10e-4.

  • param.gamma : control the converge speed (default: 1).

Projection onto the L2-ball :

  • param.tight_b2 : 1 if A is a tight frame or 0 if not (default = 1)

  • nu_b2 : bound on the norm of the operator A, i.e.

    \begin{equation*} \|A x\|^2 \leq \nu \|x\|^2 \end{equation*}
  • tol_b2 : tolerance for the projection onto the L2 ball (default: 1e-3):

\begin{equation*} \frac{\epsilon}{1-tol} \leq \|y - A z\|_2 \leq \frac{\epsilon}{1+tol} \end{equation*}
  • maxit_b2 : max. nb. of iterations for the projection onto the L2 ball (default 200).

Proximal L1 operator:

  • tol_l1 : Used as stopping criterion for the proximal L1 operator. Min. relative change of the objective value between two successive estimates.

  • maxit_l1 : Used as stopping criterion for the proximal L1 operator. Maximum number of iterations.

  • param.nu_l1 : bound on the norm^2 of the operator Psi, i.e.

    \begin{equation*} \|\Psi x\|^2 \leq \nu \|x\|^2 \end{equation*}
  • param.tight_l1 : 1 if Psit is a tight frame or 0 if not (default = 1)

  • param.weights : weights (default = 1) for a weighted L1-norm defined as:

    \begin{equation*} \sum_i w_i |x_i| \end{equation*}

The problem is solved thanks to a Douglas-Rachford splitting algorithm.

References:

P. Combettes and J. Pesquet. A douglas--rachford splitting approach to nonsmooth convex variational signal recovery. Selected Topics in Signal Processing, IEEE Journal of, 1(4):564--574, 2007.