complex_pwc_signal
- Graph.complex_pwc_signal(moduli, phases, duration, *, name=None)
Create a complex piecewise-constant signal from moduli and phases.
Use this function to create a complex piecewise-constant signal from moduli and phases defined for each segment, in which the constant segments all have the same duration.
- Parameters:
moduli (np.ndarray(real) or Tensor(real)) – The moduli \(\{\Omega_n\}\) of the values of \(N\) constant segments. These can represent either the moduli of a single sequence of segment values or of a batch of them. To provide a batch of sequences of segment values of shape \(B_1 \times \ldots \times B_n\), represent these moduli as a tensor of shape \(B_1 \times \ldots \times B_n \times N\).
phases (np.ndarray(real) or Tensor(real)) – The phases \(\{\phi_n\}\) of the complex segment values. Must have the same length as moduli (or same shape, if you’re providing a batch).
duration (float) – The total duration \(\tau\) of the signal.
name (str or None, optional) – The name of the node.
- Returns:
The piecewise-constant function of time \(v(t)\), satisfying \(v(t)=\Omega_n e^{i\phi_n}\) for \(t_{n-1}\leq t\leq t_n\), where \(t_n=n\tau/N\) (where \(N\) is the number of values in \(\{\Omega_n\}\) and \(\{\phi_n\}\)). If you provide a batch of moduli and phases, the returned Pwc represents a corresponding batch of \(B_1 \times \ldots \times B_n\) functions \(v(t)\).
- Return type:
Pwc(complex)
See also
pwc_signal
Create Pwc signals from (possibly complex) values.
Notes
For more information on Pwc nodes see the Working with time-dependent functions in Boulder Opal topic.
Examples
Create a complex piecewise-constant signal with batched moduli and phases.
>>> moduli = np.array([[1, 2], [3, 4]]) >>> phases = np.array([[0.1, 0.2], [0.5, 0.7]]) >>> graph.complex_pwc_signal(moduli=moduli, phases=phases, duration=0.2, name="signal") <Pwc: name="signal", operation_name="complex_pwc_signal", value_shape=(), batch_shape=(2,)> >>> result = qctrl.functions.calculate_graph(graph=graph, output_node_names=["signal"]) >>> result.output["signal"] [ [ {"value": (0.9950041652780258 + 0.09983341664682815j), "duration": 0.1}, {"value": (1.9601331556824833 + 0.39733866159012243j), "duration": 0.1}, ], [ {"value": (2.6327476856711183 + 1.438276615812609j), "duration": 0.1}, {"value": (3.059368749137954 + 2.576870748950764j), "duration": 0.1}, ], ]
See more examples in the Design robust single-qubit gates using computational graphs tutorial.