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