Pulse (qiskit.pulse)

Qiskit-Pulse is a pulse-level quantum programming kit. This lower level of programming offers the user more control than programming with QuantumCircuit s.

Extracting the greatest performance from quantum hardware requires real-time pulse-level instructions. Pulse answers that need: it enables the quantum physicist user to specify the exact time dynamics of an experiment. It is especially powerful for error mitigation techniques.

The input is given as arbitrary, time-ordered signals (see: Instructions (instructions)) scheduled in parallel over multiple virtual hardware or simulator resources (see: Channels (channels)). The system also allows the user to recover the time dynamics of the measured output.

This is sufficient to allow the quantum physicist to explore and correct for noise in a quantum system.

Instructions (instructions)


The instruction module holds the various Instruction s which are supported by Qiskit Pulse.

Acquire(duration[, channel, mem_slot, …])

The Acquire instruction is used to trigger the ADC associated with a particular qubit; e.g.

Delay(duration[, channel, name])

A blocking instruction with no other effect.

Play(pulse, channel[, name])

This instruction is responsible for applying a pulse on a channel.

SetFrequency(frequency, channel[, name])

Set the channel frequency.

ShiftPhase(phase[, channel, name])

The shift phase instruction updates the modulation phase of proceeding pulses played on the same Channel.

Snapshot(label[, snapshot_type, name])

An instruction targeted for simulators, to capture a moment in the simulation.

Pulse Library (waveforms pulse_lib)


This library provides Pulse users with convenient methods to build Pulse waveforms.


Module for builtin discrete pulses.

SamplePulse(samples[, name, epsilon])

A pulse specified completely by complex-valued samples; each sample is played for the duration of the backend cycle-time, dt.

Constant(duration, amp[, name])

A simple constant pulse, with an amplitude value and a duration:

Drag(duration, amp, sigma, beta[, name])

The Derivative Removal by Adiabatic Gate (DRAG) pulse is a standard Gaussian pulse with an additional Gaussian derivative component.

Gaussian(duration, amp, sigma[, name])

A truncated pulse envelope shaped according to the Gaussian function whose mean is centered at the center of the pulse (duration / 2):

GaussianSquare(duration, amp, sigma, width)

A square pulse with a Gaussian shaped risefall on either side:

Channels (channels)

Pulse is meant to be agnostic to the underlying hardware implementation, while still allowing low-level control. Therefore, our signal channels are virtual hardware channels. The backend which executes our programs is responsible for mapping these virtual channels to the proper physical channel within the quantum control hardware.

Channels are characterized by their type and their index. See each channel type below to learn more.


This module defines Pulse Channels.


Drive channels transmit signals to qubits which enact gate operations.


Measure channels transmit measurement stimulus pulses for readout.


Acquire channels are used to collect data.


Control channels provide supplementary control over the qubit to the drive channel.


Classical resister slot channels represent classical registers (low-latency classical memory).


Memory slot channels represent classical memory storage.


Schedules are Pulse programs. They describe instruction sequences for the control hardware.

Schedule(*schedules[, name])

A quantum program schedule with exact time constraints for its instructions, operating over all input signal channels and supporting special syntaxes for building.

Instruction(operands, duration, channels[, name])

The smallest schedulable unit: a single instruction.



Mapping from QuantumCircuit qiskit.circuit.Instruction names and qubits to Schedule s.

Rescheduling Utilities

These utilities return modified Schedule s.

align_measures(schedules[, inst_map, …])

Return new schedules where measurements occur at the same physical time.

add_implicit_acquires(schedule, meas_map)

Return a new schedule with implicit acquires from the measurement mapping replaced by explicit ones.

pad(schedule[, channels, until])

Pad the input Schedule with Delay s on all unoccupied timeslots until until if it is provided, otherwise until schedule.duration.



Errors raised by the pulse module.