From 6fcdf1eee03e9b4edb7be1831c0ff54404e150f6 Mon Sep 17 00:00:00 2001 From: "a.ott" Date: Fri, 24 Jan 2020 13:39:12 +0100 Subject: [PATCH] sinusoidal stimulus with beat --- stimuli/SinusAmplitudeModulation.py | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 stimuli/SinusAmplitudeModulation.py diff --git a/stimuli/SinusAmplitudeModulation.py b/stimuli/SinusAmplitudeModulation.py new file mode 100644 index 0000000..2296d28 --- /dev/null +++ b/stimuli/SinusAmplitudeModulation.py @@ -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