qiskit.providers.aer.pulse.duffing_system_model
duffing_system_model(dim_oscillators, oscillator_freqs, anharm_freqs, drive_strengths, coupling_dict, dt)
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: , specified in the list
oscillator_freqs
- Anharmonicity: , specified in the list
anharm_freqs
, and- Drive strength: , specified in the list
drive_strengths
.
For each oscillator, the above parameters enter into the Hamiltonian via the terms:
where and are, respectively, the creation and annihilation operators for the oscillator, and is the drive signal for the oscillator.
Each coupling term between a pair of oscillators is specified by:
- Oscillator pair: , and
- Coupling strength: ,
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:
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