Skip to main contentIBM Quantum Documentation
This page is from an old version of Qiskit SDK and does not exist in the latest version. We recommend you migrate to the latest version. See the release notes for more information.

qiskit.providers.aer.pulse.duffing_system_model

duffing_system_model(dim_oscillators, oscillator_freqs, anharm_freqs, drive_strengths, coupling_dict, dt)

GitHub

Returns a PulseSystemModel representing a physical model for a collection of Duffing oscillators.

In the model, each individual oscillator is specified by the parameters:

  • Frequency: ν\nu, specified in the list oscillator_freqs
  • Anharmonicity: α\alpha, specified in the list anharm_freqs, and
  • Drive strength: rr, specified in the list drive_strengths.

For each oscillator, the above parameters enter into the Hamiltonian via the terms:

π(2να)aa+πα(aa)2+2πrD(t)(a+a),\pi(2 \nu - \alpha)a^\dagger a + \pi \alpha (a^\dagger a)^2 + 2 \pi r D(t) (a + a^\dagger),

where aa^\dagger and aa are, respectively, the creation and annihilation operators for the oscillator, and D(t)D(t) is the drive signal for the oscillator.

Each coupling term between a pair of oscillators is specified by:

  • Oscillator pair: (i,k)(i,k), and
  • Coupling strength: jj,

which are passed in the argument coupling_dict, which is a dict with keys being the tuple (i,k), and values the strength j. Specifying a coupling results in the Hamiltonian term:

2πj(aiak+aiak).2 \pi j (a_i^\dagger a_k + a_i a_k^\dagger).

Finally, the returned PulseSystemModel is setup for performing cross-resonance drives between coupled qubits. The index for the ControlChannel corresponding to a particular cross-resonance drive channel is retreived by calling PulseSystemModel.control_channel_index() with the tuple (drive_idx, target_idx), where drive_idx is the index of the oscillator being driven, and target_idx is the target oscillator (see example below).

Note: In this model, all frequencies are in frequency units (as opposed to radial).

Example

Constructing a three Duffing Oscillator :class:PulseSystemModel.

# cutoff dimensions
dim_oscillators = 3
 
# single oscillator drift parameters
oscillator_freqs = [5.0e9, 5.1e9, 5.2e9]
anharm_freqs = [-0.33e9, -0.33e9, -0.33e9]
 
# drive strengths
drive_strengths = [0.02e9, 0.02e9, 0.02e9]
 
# specify coupling as a dictionary; here the qubit pair (0,1) is coupled with
# strength 0.002e9, and the qubit pair (1,2) is coupled with strength 0.001e9
coupling_dict = {(0,1): 0.002e9, (1,2): 0.001e9}
 
# time
dt = 1e-9
 
# create the model
three_qubit_model = duffing_system_model(dim_oscillators=dim_oscillators,
                                         oscillator_freqs=oscillator_freqs,
                                         anharm_freqs=anharm_freqs,
                                         drive_strengths=drive_strengths,
                                         coupling_dict=coupling_dict,
                                         dt=dt)

In the above model, qubit pairs (0,1) and (1,2) are coupled. To perform a cross-resonance drive on qubit 1 with target 0, use the ControlChannel with index:

three_qubit_model.control_channel_index((1,0))

Parameters

  • dim_oscillators (int) – Dimension of truncation for each oscillator.
  • oscillator_freqs (list) – Oscillator frequencies in frequency units.
  • anharm_freqs (list) – Anharmonicity values in frequency units.
  • drive_strengths (list) – Drive strength values in frequency units.
  • coupling_dict (dict) – Coupling graph with keys being edges, and values the coupling strengths in frequency units.
  • dt (float) – Sample width for pulse instructions.

Returns

The generated Duffing system model

Return type

PulseSystemModel

Was this page helpful?
Report a bug or request content on GitHub.