Skip to main contentIBM Quantum Documentation
You are viewing the API reference for an old version of Qiskit SDK. Switch to latest version

duffing_system_model

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

GitHub(opens in a new tab)

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.