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 aspsf. 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.readoutis 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). Voxeln // 2is 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 appliesifftshiftalong 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.