sinusoidal stimulus with beat
This commit is contained in:
parent
15bb88776e
commit
6fcdf1eee0
30
stimuli/SinusAmplitudeModulation.py
Normal file
30
stimuli/SinusAmplitudeModulation.py
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
from stimuli.AbstractStimulus import AbstractStimulus
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
|
||||||
|
class SinusAmplitudeModulationStimulus(AbstractStimulus):
|
||||||
|
|
||||||
|
def __init__(self, carrier_frequency, amplitude, contrast, modulation_frequency, start_time=0, duration=np.inf):
|
||||||
|
self.contrast = contrast
|
||||||
|
self.modulation_frequency = modulation_frequency
|
||||||
|
self.amplitude = amplitude
|
||||||
|
self.carrier_frequency = carrier_frequency
|
||||||
|
self.start_time = start_time
|
||||||
|
self.duration = duration
|
||||||
|
|
||||||
|
def value_at_time_in_s(self, time_point):
|
||||||
|
if time_point < self.start_time or time_point > self.start_time + self.duration:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
am = (1 + self.contrast * np.sin(2*np.pi*self.modulation_frequency * time_point))
|
||||||
|
carrier = np.sin(2*np.pi*self.carrier_frequency*time_point)
|
||||||
|
return self.amplitude * am * carrier
|
||||||
|
|
||||||
|
def get_stimulus_start_ms(self):
|
||||||
|
return self.start_time
|
||||||
|
|
||||||
|
def get_stimulus_duration_ms(self):
|
||||||
|
return self.duration
|
||||||
|
|
||||||
|
def get_amplitude(self):
|
||||||
|
return self.contrast
|
Loading…
Reference in New Issue
Block a user