# DynamicDecouplingSequence¶

class qctrlopencontrols.DynamicDecouplingSequence(duration: float, offsets: numpy.ndarray, rabi_rotations: numpy.ndarray, azimuthal_angles: numpy.ndarray, detuning_rotations: numpy.ndarray, name: Optional[str] = None)[source]

Creates a dynamic decoupling sequence.

Parameters
• duration (float) – The total time in seconds for the sequence $$\tau$$.

• offsets (np.ndarray) – The times offsets $$\{t_j\}$$ in seconds for the center of pulses.

• rabi_rotations (np.ndarray) – The rabi rotation $$\omega_j$$ at each time offset $$t_j$$.

• azimuthal_angles (np.ndarray) – The azimuthal angle $$\phi_j$$ at each time offset $$t_j$$.

• detuning_rotations (np.ndarray) – The detuning rotation $$\delta_j$$ at each time offset $$t_j$$.

• name (str, optional) – Name of the sequence. Defaults to None.

Notes

Dynamical decoupling sequence (DDS) is canonically defined as a series of $$n$$-instantaneous unitary operations, often $$\pi$$-pulses, executed at time offsets $$\{t_j\}_{j=1}^n$$ over the time interval with a total duration $$\tau$$. The $$j$$-th operation applied at time $$t_j$$ can be parameterized as

$U_j = \exp\left[-\frac{i}{2}(\omega_j \cos \phi_j \sigma_x + \omega_j\sin \phi_j\sigma_y + \delta_j\sigma_z)\right] \;,$

Note that in practice all DDSs typically have a $$X_{\pi/2}$$ operation at the start $$t = 0$$ and end $$t = \tau$$ of the sequence. This is because it is assumed that the qubit is initially in the state $$|0\rangle$$ and a superposition needs to be created and removed to make the qubit sensitive to dephasing.

Methods

 export Returns a dictionary for plotting using the qctrl-visualizer package. export_to_file Prepares and saves the dynamical decoupling sequence in a file.