Inputs: |
y - acquired (Cartesian/non-Cartesian) data from all channels |
D/D† - operators relating reconstructed data to the acquired data y, and vice versa |
H/H† - operators that construct the data matrix from k-space values, and vice versa |
k - rank of the data matrix |
Tol - tolerance on error |
Outputs: |
xn - reconstructed data for all channels |
Algorithm: |
x0 = D†y, n = 0 |
do { |
n = n + 1 |
An = H(xn−1)% construct data matrix |
[U Σ V] = svd(An) % perform SVD |
An = U|| Σk
V||H % hard-threshold singular values (low-rankness projection) |
xn = H†(An) % transform data matrix back to k-space data (structural consistency projection) |
xn = (I − D†D) xn + D†y % data consistency projection (see Appendix for details) |
err = ||xn − xn−1|| |
} while err > Tol |