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.

  • 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.


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.



Returns a dictionary for plotting using the qctrl-visualizer package.


Prepares and saves the dynamical decoupling sequence in a file.