linop.wave_psf

Contents

linop.wave_psf#

bartorch.linop.wave_psf()#

Wave point-spread function from the wave’s phase-encode trajectory.

\[\mathrm{psf}[r, t] = \exp\left(-2\pi i \sum_a s_a k_a(t - d_a) \, r_a\right)\]

over voxel positions \(r\) along the phase encodes and readout samples \(t\), in the layout WaveSense() takes as psf. Any waveform is accepted, for instance a tapered wave.

Parameters:
  • trajectory (array_like) – Wave k-space coordinates along the phase encodes in cycles/m, one row per ADC sample in acquisition order: (readout, encodes) with the encodes (z, y) in 3D or (y,) in 2D. readout is the oversampled readout length.

  • image_shape (tuple of int) – Spatial image shape ([z,] y, x) before readout oversampling.

  • fov (float or tuple of float) – Field of view along the phase encodes in m, one value or (z, y). Voxel n // 2 is at the centre.

  • scale (float or tuple of float, default=1.0) – Gradient amplitude relative to nominal, one value or (z, y).

  • delay (float or tuple of float, default=0.0) – Delay of each wave relative to the ADC in readout samples, one value or (z, y). Applied as a linear phase on the trajectory’s spectrum, so the trajectory is taken as periodic over the readout.

  • centred (bool, default=True) – Readout in acquisition order, for WaveSense(centred=True). False applies ifftshift along the readout, for BART’s uncentred transform.

Returns:

The point spread function, complex128.

Return type:

tensor, shape ([z,] y, readout)

Raises:

ValueError – When the trajectory’s axes do not match the phase encodes, or the readout is shorter than x.