add actual input scaling
This commit is contained in:
parent
7e65ebae4e
commit
04815de85c
@ -7,6 +7,7 @@ from numba import jit
|
||||
import helperFunctions as hF
|
||||
from stimuli.SinusAmplitudeModulation import SinusAmplitudeModulationStimulus
|
||||
from scipy.optimize import curve_fit
|
||||
from warnings import warn
|
||||
|
||||
|
||||
class LifacNoiseModel(AbstractModel):
|
||||
@ -27,6 +28,8 @@ class LifacNoiseModel(AbstractModel):
|
||||
def __init__(self, params: dict = None):
|
||||
super().__init__(params)
|
||||
|
||||
if self.parameters["step_size"] >= 0.0001:
|
||||
warn("LifacNoiseModel: The step size is quite big simulation could fail.")
|
||||
self.voltage_trace = []
|
||||
self.adaption_trace = []
|
||||
self.spiketimes = []
|
||||
@ -49,7 +52,7 @@ class LifacNoiseModel(AbstractModel):
|
||||
for i in range(1, len(time), 1):
|
||||
time_point = time[i]
|
||||
# rectified input:
|
||||
stimulus_strength = fu.rectify(stimulus.value_at_time_in_s(time_point))
|
||||
stimulus_strength = fu.rectify(stimulus.value_at_time_in_s(time_point)) * self.parameters["input_scaling"]
|
||||
|
||||
v_next = self._calculate_voltage_step(current_v, stimulus_strength - current_a)
|
||||
a_next = self._calculate_adaption_step(current_a)
|
||||
@ -99,9 +102,10 @@ class LifacNoiseModel(AbstractModel):
|
||||
v_offset = self.parameters["v_offset"]
|
||||
mem_tau = self.parameters["mem_tau"]
|
||||
noise_strength = self.parameters["noise_strength"]
|
||||
input_scaling = self.parameters["input_scaling"]
|
||||
|
||||
rectified_stimulus = rectify_stimulus_array(stimulus.as_array(time_start, total_time_s, step_size))
|
||||
parameters = np.array([v_zero, a_zero, step_size, threshold, v_base, delta_a, tau_a, v_offset, mem_tau, noise_strength, time_start])
|
||||
parameters = np.array([v_zero, a_zero, step_size, threshold, v_base, delta_a, tau_a, v_offset, mem_tau, noise_strength, time_start, input_scaling])
|
||||
|
||||
voltage_trace, adaption, spiketimes = simulate_fast(rectified_stimulus, total_time_s, parameters)
|
||||
|
||||
@ -161,6 +165,9 @@ class LifacNoiseModel(AbstractModel):
|
||||
:return: baseline_freq, vs, sc
|
||||
"""
|
||||
base_stimulus = SinusAmplitudeModulationStimulus(base_stimulus_freq, 0, 0)
|
||||
import matplotlib.pyplot as plt
|
||||
plt.plot(base_stimulus.as_array(0,30,0.00005))
|
||||
plt.show()
|
||||
_, spiketimes = self.simulate_fast(base_stimulus, 30)
|
||||
time_x = 5
|
||||
baseline_freq = hF.mean_freq_of_spiketimes_after_time_x(spiketimes, time_x)
|
||||
@ -263,6 +270,7 @@ def simulate_fast(rectified_stimulus_array, total_time_s, parameters: np.ndarray
|
||||
mem_tau = parameters[8]
|
||||
noise_strength = parameters[9]
|
||||
time_start = parameters[10]
|
||||
input_scaling = parameters[11]
|
||||
|
||||
time = np.arange(time_start, total_time_s, step_size)
|
||||
length = len(time)
|
||||
@ -279,7 +287,7 @@ def simulate_fast(rectified_stimulus_array, total_time_s, parameters: np.ndarray
|
||||
noise_value = np.random.normal()
|
||||
noise = noise_strength * noise_value / np.sqrt(step_size)
|
||||
|
||||
output_voltage[i] = output_voltage[i-1] + ((v_base - output_voltage[i-1] + v_offset + stimulus_values[i] - adaption[i-1] + noise) / mem_tau) * step_size
|
||||
output_voltage[i] = output_voltage[i-1] + ((v_base - output_voltage[i-1] + v_offset + (stimulus_values[i]*input_scaling) - adaption[i-1] + noise) / mem_tau) * step_size
|
||||
adaption[i] = adaption[i-1] + ((-adaption[i-1]) / tau_a) * step_size
|
||||
|
||||
if output_voltage[i] > threshold:
|
||||
|
Loading…
Reference in New Issue
Block a user