braintools.input.sinusoidal

Contents

braintools.input.sinusoidal#

braintools.input.sinusoidal(amplitude, frequency, duration, t_start=None, t_end=None, bias=False)#

Generate sinusoidal current input.

Creates a sinusoidal waveform with specified amplitude and frequency. Useful for testing frequency response, resonance properties, and oscillatory behavior of neural models.

Parameters:
  • amplitude (Array | ndarray | bool | number | bool | int | float | complex | Quantity) – Peak amplitude of the sinusoidal wave. Supports current units.

  • frequency (Array | ndarray | bool | number | bool | int | float | complex | Quantity) – Frequency of oscillation. Must be in Hz units.

  • duration (Array | ndarray | bool | number | bool | int | float | complex | Quantity) – Total duration of the signal. Supports time units.

  • t_start (Array | ndarray | bool | number | bool | int | float | complex | Quantity | None) – Time when sinusoid starts. Before this, output is 0. Default is 0.

  • t_end (Array | ndarray | bool | number | bool | int | float | complex | Quantity | None) – Time when sinusoid ends. After this, output is 0. Default is duration.

  • bias (bool) – If True, adds DC offset equal to amplitude (non-negative output). If False, oscillates around 0 (default).

Returns:

current – The sinusoidal current array with shape (n_timesteps,).

Return type:

ndarray or Quantity

Raises:

AssertionError – If frequency is not in Hz units.

Examples

>>> import brainunit as u
>>> import brainstate
>>> brainstate.environ.set(dt=0.1 * u.ms)

Simple 10 Hz sinusoid

>>> current = sinusoidal(
...     amplitude=5 * u.pA,
...     frequency=10 * u.Hz,
...     duration=1000 * u.ms
... )

High-frequency stimulation

>>> current = sinusoidal(
...     amplitude=2 * u.nA,
...     frequency=100 * u.Hz,
...     duration=500 * u.ms
... )

Sinusoid with positive bias (always >= 0)

>>> current = sinusoidal(
...     amplitude=10 * u.pA,
...     frequency=5 * u.Hz,
...     duration=2000 * u.ms,
...     bias=True  # Oscillates between 0 and 20 pA
... )

Windowed sinusoid

>>> current = sinusoidal(
...     amplitude=8 * u.pA,
...     frequency=20 * u.Hz,
...     duration=1000 * u.ms,
...     t_start=200 * u.ms,
...     t_end=800 * u.ms
... )

Testing resonance at theta frequency

>>> current = sinusoidal(
...     amplitude=1 * u.nA,
...     frequency=8 * u.Hz,  # Theta band
...     duration=5000 * u.ms
... )

Subthreshold membrane oscillations

>>> current = sinusoidal(
...     amplitude=0.1 * u.nA,
...     frequency=40 * u.Hz,  # Gamma band
...     duration=200 * u.ms,
...     t_start=50 * u.ms,
...     t_end=150 * u.ms
... )

Notes

  • The phase starts at 0 (sine wave starts at 0)

  • Frequency must be less than Nyquist frequency (1/(2*dt))

  • With bias=True, output ranges from 0 to 2*amplitude

  • Without bias, output ranges from -amplitude to +amplitude