braintools.input.noisy_sinusoidal

braintools.input.noisy_sinusoidal#

braintools.input.noisy_sinusoidal(amplitude, frequency, noise_amplitude, duration, t_start=None, t_end=None, seed=None)#

Generate sinusoidal current input with additive noise.

Creates a sinusoidal waveform with added Gaussian white noise. Useful for testing robustness to noise, stochastic resonance, and realistic synaptic input conditions.

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

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

  • noise_amplitude (Array | ndarray | bool | number | bool | int | float | complex | Quantity) – Standard deviation of additive Gaussian noise. Must have same units as amplitude.

  • 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 noisy sinusoid starts. Before this, output is 0. Default is 0.

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

  • seed (int | None) – Random seed for reproducible noise. Default is None (uses global random state).

Returns:

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

Return type:

ndarray or Quantity

Raises:
  • AssertionError – If frequency is not in Hz units.

  • UnitMismatchError – If amplitude and noise_amplitude have different units.

Examples

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

Sinusoid with small noise

>>> current = noisy_sinusoidal(
...     amplitude=10 * u.pA,
...     frequency=10 * u.Hz,
...     noise_amplitude=1 * u.pA,  # 10% noise
...     duration=1000 * u.ms
... )

High noise for stochastic resonance

>>> current = noisy_sinusoidal(
...     amplitude=5 * u.pA,
...     frequency=5 * u.Hz,
...     noise_amplitude=10 * u.pA,  # Noise > signal
...     duration=2000 * u.ms
... )

Theta rhythm with synaptic noise

>>> current = noisy_sinusoidal(
...     amplitude=2 * u.nA,
...     frequency=8 * u.Hz,  # Theta frequency
...     noise_amplitude=0.5 * u.nA,
...     duration=5000 * u.ms
... )

Windowed noisy stimulation

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

Reproducible noisy signal

>>> current = noisy_sinusoidal(
...     amplitude=15 * u.pA,
...     frequency=40 * u.Hz,
...     noise_amplitude=3 * u.pA,
...     duration=500 * u.ms,
...     seed=42  # Fixed random seed
... )

Subthreshold oscillation with realistic noise

>>> current = noisy_sinusoidal(
...     amplitude=0.1 * u.nA,
...     frequency=60 * u.Hz,  # Gamma frequency
...     noise_amplitude=0.05 * u.nA,
...     duration=2000 * u.ms,
...     t_start=500 * u.ms
... )

Notes

  • Noise is Gaussian white noise with zero mean

  • Signal-to-noise ratio = amplitude / noise_amplitude

  • Total variance = amplitude²/2 + noise_amplitude²

  • Useful for testing noise robustness and filtering properties