BASIC_OSCILLATOR
The BASIC_OSCILLATOR node is a combination of the LINSPACE and SINE nodes.It offers a more straightforward way to generate signals, with sample rate and the time in seconds as parameters, along with all the parameters in the SINE node.Params:sample_rate : floatThe number of samples that are taken in a second.time : floatThe total amount of time of the signal.waveform : selectThe waveform type of the wave.amplitude : floatThe amplitude of the wave.frequency : floatThe wave frequency in radians/2pi.offset : floatThe y axis offset of the function.phase : floatThe x axis offset of the function.Returns:out : OrderedPairx: time domain
y: generated signal
Python Code
import numpy as np
from flojoy import flojoy, OrderedPair
from scipy import signal
from typing import Literal
@flojoy
def BASIC_OSCILLATOR(
sample_rate: int = 100,
time: int = 10,
waveform: Literal["sine", "square", "triangle", "sawtooth"] = "sine",
amplitude: float = 1,
frequency: float = 1,
offset: float = 0,
phase: float = 0,
) -> OrderedPair:
"""The BASIC_OSCILLATOR node is a combination of the LINSPACE and SINE nodes.
It offers a more straightforward way to generate signals, with sample rate and the time in seconds as parameters, along with all the parameters in the SINE node.
Parameters
----------
sample_rate : float
The number of samples that are taken in a second.
time : float
The total amount of time of the signal.
waveform : select
The waveform type of the wave.
amplitude : float
The amplitude of the wave.
frequency : float
The wave frequency in radians/2pi.
offset : float
The y axis offset of the function.
phase : float
The x axis offset of the function.
Returns
-------
OrderedPair
x: time domain
y: generated signal
"""
samples = sample_rate * time
x = np.linspace(0, time, samples)
if waveform == "sine":
y = offset + amplitude * np.sin(2 * np.pi * frequency * x + phase)
elif waveform == "square":
y = offset + amplitude * signal.square(2 * np.pi * frequency * x + phase)
elif waveform == "triangle":
y = offset + amplitude * signal.sawtooth(2 * np.pi * frequency * x + phase, 0.5)
else: # Sawtooth
y = offset + amplitude * signal.sawtooth(2 * np.pi * frequency * x + phase)
return OrderedPair(x=x, y=y)
Example
Having problem with this example app? Join our Discord community and we will help you out!
In this example, BASIC_OSCILLATOR
node generates a sine wave with a frequency of 1Hz and an amplitude of 3 for
10 seconds with a sample rate of 400Hz.
The same output can be generated with LINSPACE
and SINE
nodes combined.
SINE
would have the same parameters, but for LINSPACE
, the start
parameter will be 0, end
is the time, which is 10 in this case,
and step
is the total samples, which is sample_rate * time in this case