sinusoid_stf

signals.sinusoid_stf(amplitude, angular_frequency, phase=0.0)

Create an Stf representing a sinusoidal oscillation.

Parameters:
  • amplitude (float or complex or Tensor) – The amplitude of the oscillation, \(A\). It must either be a scalar or contain a single element.

  • angular_frequency (float or Tensor) – The angular frequency of the oscillation, \(\omega\). It must either be a scalar or contain a single element.

  • phase (float or Tensor, optional) – The phase of the oscillation, \(\phi\). If passed, it must either be a scalar or contain a single element. Defaults to 0.

Returns:

The sampleable sinusoid.

Return type:

Stf

See also

Graph.signals.hann_series_stf

Create an Stf representing a sum of Hann window functions.

boulderopal.signals.sinusoid

Create a Signal object representing a sinusoidal oscillation.

Graph.signals.sinusoid_pwc

Corresponding operation with Pwc output.

Graph.sin

Calculate the element-wise sine of an object.

Notes

The sinusoid is defined as

\[\mathop{\mathrm{Sinusoid}}(t) = A \sin \left( \omega t + \phi \right) .\]

Examples

Define an STF oscillation.

>>> oscillation = graph.signals.sinusoid_stf(
...     amplitude=2.0, angular_frequency=3.0, phase=np.pi/4
... )
>>> graph.discretize_stf(
...     oscillation, duration=10, segment_count=5, name="oscillation"
... )
<Pwc: name="oscillation", operation_name="discretize_stf", value_shape=(), batch_shape=()>
>>> result = bo.execute_graph(graph=graph, output_node_names="oscillation")
>>> result["output"]["oscillation"]
{'durations': array([2., 2., 2., 2., 2.]),
'values': array([-1.20048699, -0.70570922, -0.15471507,  0.4086036 ,  0.93937314]),
'time_dimension': 0}

Define a sinusoid with optimizable parameters.

>>> amplitude = graph.optimizable_scalar(
...     lower_bound=0, upper_bound=4e3, name="amplitude"
... )
>>> angular_frequency = graph.optimizable_scalar(
...     lower_bound=5e6, upper_bound=20e6, name="angular_frequency"
... )
>>> phase = graph.optimization_variable(
...     count=1,
...     lower_bound=0,
...     upper_bound=2*np.pi,
...     is_lower_unbounded=True,
...     is_upper_unbounded=True,
...     name="phase",
... )
>>> graph.signals.sinusoid_stf(
...     amplitude=amplitude, angular_frequency=angular_frequency, phase=phase
... )
<Stf: operation_name="multiply", value_shape=(), batch_shape=()>