make_sms_pulse#
- pypulseqpp.make_sms_pulse()[source]#
Modulate one RF pulse into equispaced spectral bands.
The envelope is multiplied by
sum(weights * exp(2j*pi*offsets*rf.t)), so band phases are referenced to the start of the shape, not its centre. The offsets always include 0 Hz; for an even band count the unpaired band goes on the positive-frequency side.- Parameters:
rf (RfEvent or SimpleNamespace) – Base pulse to modulate.
num_bands (int) – Number of bands, counting the on-resonance one.
band_offset (float) – Spacing between adjacent bands (Hz).
sideband_power (float or sequence of float, default=1.0) – Power, not amplitude, relative to the on-resonance band; weights take its square root. A scalar applies to every off-resonance band; a sequence gives one value per band, the on-resonance one included.
phases ({'quadratic', 'wong', 'malik'} or sequence of float, default=None) – Per-band phase (rad), lowest frequency first, or a schedule that keeps the peak down: Grissom’s quadratic one, Wong’s optimised table (3 to 16 bands) or Malik’s Hermitian one (4 to 12 bands).
Noneleaves every band in phase.
- Returns:
rf (RfEvent) – The modulated pulse.
offsets (numpy.ndarray) – Band offsets applied (Hz).
weights (numpy.ndarray) – Complex weight applied to each band.
Examples
>>> import numpy as np >>> import pypulseqpp as pp >>> system = pp.Opts(max_grad=40, grad_unit="mT/m", max_slew=150, slew_unit="T/m/s") >>> base = pp.make_sinc_pulse(flip_angle=np.deg2rad(30), duration=2e-3, system=system) >>> rf, offsets, weights = pp.make_sms_pulse(base, 3, 1000.0) >>> offsets.tolist() [-1000.0, 0.0, 1000.0]
See also
sim_rfcheck where the bands actually land.