bloch_siegert.m
Applies Bloch-Siegert corrections to Cartesian control pulses. Takes control operators and their amplitude arrays and returns augmented arrays with the Bloch-Siegert response operator of each control channel appended as a virtual channel whose coefficient vector is the square of the corresponding control amplitude vector. The output arguments are ready for the shaped_pulse_xy.m function, which then propagates the system under the same slice generators that the GRAPE engines use when Bloch-Siegert corrections are enabled. The response operators themselves are not built here: they are taken from spin_system.control.resp_ops, which optimcon.m fills using bss_ops.m. The physical channels are left untouched and the appended channels are added after them, so the first half of each output array is the input.
Syntax
[ctrl_opers,...
ctrl_coefs]=bloch_siegert(spin_system,ctrl_opers,...
ctrl_coefs)
Parameters
spin_system - Spinach spin system object containing the
Bloch-Siegert settings added by optimcon()
ctrl_opers - a cell array of control operators, one per
control channel
ctrl_coefs - a cell array of control coefficient vectors
in rad/s, one vector per control channel
Outputs
ctrl_opers - an augmented cell array of control opera-
tors, with the response operator of each
channel appended
ctrl_coefs - an augmented cell array of coefficient vec-
tors, with the squared amplitude vector of
each channel appended
Notes
Note: the augmented arrays are only valid for the piecewise-constant propagation methods of shaped_pulse_xy; piecewise-linear methods would interpolate the squared coefficients, which does not correspond to the square of the interpolated control amplitude.
See also
bss_ops.m, shaped_pulse_xy.m, optimcon.m, Optimal control module
Version 2.13, authors: Aditya Dev, Ilya Kuprov