discrete

Module for builtin discrete pulses.

Note the sampling strategy use for all discrete pulses is midpoint.

Functions

constant(duration, amp[, name])

Generates constant-sampled SamplePulse.

cos(duration, amp[, freq, phase, name])

Generates cosine wave SamplePulse.

drag(duration, amp, sigma, beta[, name, …])

Generates Y-only correction DRAG SamplePulse for standard nonlinear oscillator (SNO) [1].

gaussian(duration, amp, sigma[, name, zero_ends])

Generates unnormalized gaussian SamplePulse.

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

Generates unnormalized gaussian derivative SamplePulse.

gaussian_square(duration, amp, sigma[, …])

Generates gaussian square SamplePulse.

sawtooth(duration, amp[, freq, period, …])

Generates sawtooth wave SamplePulse.

sech(duration, amp, sigma[, name, zero_ends])

Generates unnormalized sech SamplePulse.

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

Generates unnormalized sech derivative SamplePulse.

sin(duration, amp[, freq, phase, name])

Generates sine wave SamplePulse.

square(duration, amp[, freq, period, phase, …])

Generates square wave SamplePulse.

triangle(duration, amp[, freq, period, …])

Generates triangle wave SamplePulse.

zero(duration[, name])

Generates zero-sampled SamplePulse.

constant(duration, amp, name=None)[source]

Generates constant-sampled SamplePulse.

For \(A=\) amp, samples from the function:

\[f(x) = A\]
Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Complex pulse amplitude.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse

cos(duration, amp, freq=None, phase=0, name=None)[source]

Generates cosine wave SamplePulse.

For \(A=\) amp, \(\omega=\) freq, and \(\phi=\) phase, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A \cos(2 \pi \omega x + \phi)\]
Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude.

  • freq (Optional[float]) – Pulse frequency, units of 1/dt. If None defaults to single cycle.

  • phase (float) – Pulse phase.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse

drag(duration, amp, sigma, beta, name=None, zero_ends=True)[source]

Generates Y-only correction DRAG SamplePulse for standard nonlinear oscillator (SNO) [1].

For \(A=\) amp, \(\sigma=\) sigma, and \(\beta=\) beta, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = g(x) + i \beta h(x),\]

where \(g(x)\) is the function sampled in gaussian(), and \(h(x)\) is the function sampled in gaussian_deriv().

If zero_ends == True, the samples from \(g(x)\) are remapped as in gaussian().

References

  1. Gambetta, J. M., Motzoi, F., Merkel, S. T. & Wilhelm, F. K. “Analytic control methods for high-fidelity unitary operations in a weakly nonlinear oscillator.” Phys. Rev. A 83, 012308 (2011).

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude at center duration/2.

  • sigma (float) – Width (standard deviation) of pulse.

  • beta (float) – Y correction amplitude. For the SNO this is \(\beta=-\frac{\lambda_1^2}{4\Delta_2}\). Where \(\lambda_1\) is the relative coupling strength between the first excited and second excited states and \(\Delta_2\) is the detuning between the respective excited states.

  • name (Optional[str]) – Name of pulse.

  • zero_ends (bool) – If True, make the first and last sample zero, but rescale to preserve amp.

Return type

SamplePulse

gaussian(duration, amp, sigma, name=None, zero_ends=True)[source]

Generates unnormalized gaussian SamplePulse.

For \(A=\) amp and \(\sigma=\) sigma, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A\exp\left(\left(\frac{x - \mu}{2\sigma}\right)^2 \right),\]

with the center \(\mu=\) duration/2.

If zero_ends==True, each output sample \(y\) is modifed according to:

\[y \mapsto A\frac{y-y^*}{A-y^*},\]

where \(y^*\) is the value of the endpoint samples. This sets the endpoints to \(0\) while preserving the amplitude at the center. If \(A=y^*\), \(y\) is set to \(1\).

Integrated area under the full curve is amp * np.sqrt(2*np.pi*sigma**2)

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude at duration/2.

  • sigma (float) – Width (standard deviation) of pulse.

  • name (Optional[str]) – Name of pulse.

  • zero_ends (bool) – If True, make the first and last sample zero, but rescale to preserve amp.

Return type

SamplePulse

gaussian_deriv(duration, amp, sigma, name=None)[source]

Generates unnormalized gaussian derivative SamplePulse.

For \(A=\) amp and \(\sigma=\) sigma applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A\frac{(x - \mu)}{\sigma^2}\exp\left(\left(\frac{x - \mu}{2\sigma}\right)^2 \right)\]

i.e. the derivative of the Gaussian function, with center \(\mu=\) duration/2.

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude of corresponding Gaussian at the pulse center (duration/2).

  • sigma (float) – Width (standard deviation) of pulse.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse

gaussian_square(duration, amp, sigma, risefall=None, width=None, name=None, zero_ends=True)[source]

Generates gaussian square SamplePulse.

For \(d=\) duration, \(A=\) amp, \(\sigma=\) sigma, and \(r=\) risefall, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[\begin{split}f(x) = \begin{cases} g(x - r) ) & x\leq r \\ A & r\leq x\leq d-r \\ g(x - (d - r)) & d-r\leq x \end{cases}\end{split}\]

where \(g(x)\) is the Gaussian function sampled from in gaussian() with \(A=\) amp, \(\mu=1\), and \(\sigma=\) sigma. I.e. \(f(x)\) represents a square pulse with smooth Gaussian edges.

If zero_ends == True, the samples for the Gaussian ramps are remapped as in gaussian().

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude.

  • sigma (float) – Width (standard deviation) of Gaussian rise/fall portion of the pulse.

  • risefall (Optional[float]) – Number of samples over which pulse rise and fall happen. Width of square portion of pulse will be duration-2*risefall.

  • width (Optional[float]) – The duration of the embedded square pulse. Only one of width or risefall should be specified as the functional form requires width = duration - 2 * risefall.

  • name (Optional[str]) – Name of pulse.

  • zero_ends (bool) – If True, make the first and last sample zero, but rescale to preserve amp.

Raises

PulseError – If risefall and width arguments are inconsistent or not enough info.

Return type

SamplePulse

sawtooth(duration, amp, freq=None, period=None, phase=0, name=None)[source]

Generates sawtooth wave SamplePulse.

For \(A=\) amp, \(T=\) period, and \(\phi=\) phase, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = 2 A \left( g(x) - \left\lfloor \frac{1}{2} + g(x) \right\rfloor\right)\]

where \(g(x) = x/T + \phi/\pi\).

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude. Wave range is \([-\) amp \(,\) amp \(]\).

  • freq (Optional[float]) – Pulse frequency, units of 1./dt. If None defaults to 1./duration.

  • period (Optional[float]) – Pulse period, units of dt. (Deprecated, use freq instead)

  • phase (float) – Pulse phase.

  • name (Optional[str]) – Name of pulse.

Example

import matplotlib.pyplot as plt
from qiskit.pulse.pulse_lib import sawtooth
import numpy as np

duration = 100
amp = 1
period = duration
sawtooth_wave = np.real(sawtooth(duration, amp, period).samples)
plt.plot(range(duration), sawtooth_wave)
[<matplotlib.lines.Line2D at 0x7f1bfbc7c910>]
Return type

SamplePulse

sech(duration, amp, sigma, name=None, zero_ends=True)[source]

Generates unnormalized sech SamplePulse.

For \(A=\) amp and \(\sigma=\) sigma, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A\text{sech}\left(\frac{x-\mu}{\sigma} \right)\]

with the center \(\mu=\) duration/2.

If zero_ends==True, each output sample \(y\) is modifed according to:

\[y \mapsto A\frac{y-y^*}{A-y^*},\]

where \(y^*\) is the value of the endpoint samples. This sets the endpoints to \(0\) while preserving the amplitude at the center. If \(A=y^*\), \(y\) is set to \(1\).

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude at duration/2.

  • sigma (float) – Width (standard deviation) of pulse.

  • name (Optional[str]) – Name of pulse.

  • zero_ends (bool) – If True, make the first and last sample zero, but rescale to preserve amp.

Return type

SamplePulse

sech_deriv(duration, amp, sigma, name=None)[source]

Generates unnormalized sech derivative SamplePulse.

For \(A=\) amp, \(\sigma=\) sigma, and center \(\mu=\) duration/2, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = \frac{d}{dx}\left[A\text{sech}\left(\frac{x-\mu}{\sigma} \right)\right],\]

i.e. the derivative of \(\text{sech}\).

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude at center.

  • sigma (float) – Width (standard deviation) of pulse.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse

sin(duration, amp, freq=None, phase=0, name=None)[source]

Generates sine wave SamplePulse.

For \(A=\) amp, \(\omega=\) freq, and \(\phi=\) phase, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A \sin(2 \pi \omega x + \phi)\]
Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude.

  • freq (Optional[float]) – Pulse frequency, units of 1/dt. If None defaults to single cycle.

  • phase (float) – Pulse phase.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse

square(duration, amp, freq=None, period=None, phase=0, name=None)[source]

Generates square wave SamplePulse.

For \(A=\) amp, \(T=\) period, and \(\phi=\) phase, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A \text{sign}\left[ \sin\left(\frac{2 \pi x}{T} + 2\phi\right) \right]\]

with the convention \(\text{sign}(0) = 1\).

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude. Wave range is \([-\) amp \(,\) amp \(]\).

  • freq (Optional[float]) – Pulse frequency, units of 1./dt. If None defaults to 1./duration.

  • period (Optional[float]) – Pulse period, units of dt. (Deprecated, use freq instead)

  • phase (float) – Pulse phase.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse

triangle(duration, amp, freq=None, period=None, phase=0, name=None)[source]

Generates triangle wave SamplePulse.

For \(A=\) amp, \(T=\) period, and \(\phi=\) phase, applies the midpoint sampling strategy to generate a discrete pulse sampled from the continuous function:

\[f(x) = A \left(-2\left|\text{sawtooth}(x, A, T, \phi)\right| + 1\right)\]

This a non-sinusoidal wave with linear ramping.

Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • amp (complex) – Pulse amplitude. Wave range is \([-\) amp \(,\) amp \(]\).

  • freq (Optional[float]) – Pulse frequency, units of 1./dt. If None defaults to 1./duration.

  • period (Optional[float]) – Pulse period, units of dt. (Deprecated, use freq instead)

  • phase (float) – Pulse phase.

  • name (Optional[str]) – Name of pulse.

Example

import matplotlib.pyplot as plt
from qiskit.pulse.pulse_lib import triangle
import numpy as np

duration = 100
amp = 1
period = duration
triangle_wave = np.real(triangle(duration, amp, period).samples)
plt.plot(range(duration), triangle_wave)
[<matplotlib.lines.Line2D at 0x7f1bf94d9a90>]
Return type

SamplePulse

zero(duration, name=None)[source]

Generates zero-sampled SamplePulse.

Samples from the function:

\[f(x) = 0\]
Parameters
  • duration (int) – Duration of pulse. Must be greater than zero.

  • name (Optional[str]) – Name of pulse.

Return type

SamplePulse