62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
stimulusrate = 500. # the eod frequency of the fake fish
|
|
currentchirptimes = [0.0]
|
|
chirpwidth = 0.014 # ms
|
|
chirpsize = 100.
|
|
chirpampl = 0.02
|
|
chirpkurtosis = 1.
|
|
p = 0.
|
|
stepsize = 0.00001
|
|
inch_factor = 2.54
|
|
|
|
time = np.arange(-0.05, 0.05, stepsize)
|
|
signal = np.zeros(time.shape)
|
|
ampl = np.ones(time.shape)
|
|
freq = np.ones(time.shape)
|
|
|
|
ck = 0
|
|
csig = 0.5 * chirpwidth / np.power(2.0*np.log(10.0), 0.5/chirpkurtosis)
|
|
|
|
for k, t in enumerate(time):
|
|
a = 1.
|
|
f = stimulusrate
|
|
if ck < len(currentchirptimes):
|
|
if np.abs(t - currentchirptimes[ck]) < 2.0 * chirpwidth:
|
|
x = t - currentchirptimes[ck]
|
|
g = np.exp(-0.5 * (x/csig)**2)
|
|
f = chirpsize * g + stimulusrate
|
|
a *= 1.0 - chirpampl * g
|
|
elif t > currentchirptimes[ck] + 2.0 * chirpwidth:
|
|
ck += 1
|
|
freq[k] = f
|
|
ampl[k] = a
|
|
p += f * stepsize
|
|
signal[k] = a * np.sin(6.28318530717959 * p)
|
|
|
|
fig = plt.figure(figsize = (20/inch_factor, 12/inch_factor))
|
|
ax1 = fig.add_subplot(211)
|
|
plt.yticks(fontsize=18)
|
|
ax2 = fig.add_subplot(212, sharex=ax1)
|
|
plt.setp(ax1.get_xticklabels(), visible=False)
|
|
ax1.plot(time*1000, signal, color = 'royalblue', lw = 1)
|
|
ax2.plot(time*1000, freq, color = 'royalblue', lw = 3)
|
|
|
|
ax1.set_ylabel("Field [mV]", fontsize = 22)
|
|
|
|
|
|
ax1.yaxis.set_label_coords(-0.1, 0.5)
|
|
ax2.set_xlabel("Time [ms]", fontsize = 22)
|
|
ax2.set_ylabel("Frequency [Hz]", fontsize = 22)
|
|
ax2.yaxis.set_label_coords(-0.1, 0.5)
|
|
plt.xticks(fontsize=18)
|
|
plt.yticks(fontsize=18)
|
|
ax1.spines["top"].set_visible(False)
|
|
ax1.spines["right"].set_visible(False)
|
|
ax2.spines["top"].set_visible(False)
|
|
ax2.spines["right"].set_visible(False)
|
|
fig.tight_layout()
|
|
#plt.show()
|
|
plt.savefig('stimulus_chirp.png')
|