add convert to array with jit

This commit is contained in:
a.ott 2020-02-17 16:51:10 +01:00
parent a53d6f4a4e
commit 04ba55bbc5

View File

@ -2,11 +2,12 @@ from stimuli.AbstractStimulus import AbstractStimulus
import numpy as np import numpy as np
from numba import jit, njit from numba import jit, njit
import time import time
from warnings import warn
class SinusAmplitudeModulationStimulus(AbstractStimulus): class SinusAmplitudeModulationStimulus(AbstractStimulus):
def __init__(self, carrier_frequency, contrast, modulation_frequency, amplitude=1, start_time=0, duration=np.inf): def __init__(self, carrier_frequency, contrast, modulation_frequency, start_time=0, duration=np.inf, amplitude=1):
self.contrast = contrast self.contrast = contrast
self.modulation_frequency = modulation_frequency self.modulation_frequency = modulation_frequency
self.amplitude = amplitude self.amplitude = amplitude
@ -56,16 +57,33 @@ def convert_to_array(carrier_freq, amplitude, modulation_freq, contrast, start_t
return values return values
# if it is split into parts with and without amplitude modulation built it in parts: # if it is split into parts with and without amplitude modulation built it in parts:
values = np.array(0) values = np.array([])
if time_start < start_time: if time_start < start_time:
carrier_before_am = np.sin(2 * np.pi * carrier_freq * np.arange(time_start, start_time, step_size / 1000)) carrier_before_am = np.sin(2 * np.pi * carrier_freq * np.arange(time_start, start_time, step_size / 1000))
np.concatenate(values, amplitude * carrier_before_am) values = np.concatenate((values, amplitude * carrier_before_am))
# there is at least a second part of the stimulus that contains the amplitude:
# time starts before the end of the am and ends after it was started
if time_start < start_time+duration and time_start+total_time > start_time: if time_start < start_time+duration and time_start+total_time > start_time:
if duration is np.inf:
carrier_during_am = np.sin(
2 * np.pi * carrier_freq * np.arange(start_time, time_start+total_time, step_size / 1000))
am = 1 + contrast * np.sin(
2 * np.pi * modulation_freq * np.arange(start_time, time_start+total_time, step_size / 1000))
else:
carrier_during_am = np.sin(
2 * np.pi * carrier_freq * np.arange(start_time, start_time + duration, step_size / 1000))
am = 1 + contrast * np.sin(
2 * np.pi * modulation_freq * np.arange(start_time, start_time + duration, step_size / 1000))
values = np.concatenate((values, amplitude * am * carrier_during_am))
else:
if contrast != 0:
print("Given stimulus time parameters (start, total) result in no part of it containing the amplitude modulation!")
if time_start+total_time > start_time+duration: if time_start+total_time > start_time+duration:
carrier_during_am = np.sin(2 * np.pi * carrier_freq * np.arange(start_time, start_time+duration, step_size/1000)) carrier_after_am = np.sin(2 * np.pi * carrier_freq * np.arange(start_time+duration, time_start+total_time, step_size/1000))
am = 1 + contrast * np.sin(2 * np.pi * modulation_freq * np.arange(start_time, start_time+duration, step_size/1000)) values = np.concatenate((values, amplitude*carrier_after_am))
np.concatenate(values, amplitude*am*carrier_during_am)
return values return values