diff --git a/code/eod_chirp_beat.py b/code/eod_chirp_beat.py new file mode 100644 index 0000000..7f825df --- /dev/null +++ b/code/eod_chirp_beat.py @@ -0,0 +1,96 @@ +import numpy as np +import matplotlib.pyplot as plt +import thunderfish.peakdetection as pd + + +def create_chirp(eodf): + stimulusrate = eodf # 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 + + + 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) + + return time, signal + + +def plot_chirp(eodf, eodf1, phase, axis): + time, chirp_eod = create_chirp(eodf) + eod = np.sin(time * 2 * np.pi * eodf1 + phase) + + y = chirp_eod * 0.4 + eod + p, t = pd.detect_peaks(y, 0.1) + axis.plot(time*1000, y) + axis.plot(time[p]*1000, (y)[p], lw=2, color='k') + axis.plot(time[t]*1000, (y)[t], lw=2, color='k') + axis.spines["top"].set_visible(False) + axis.spines["right"].set_visible(False) + + + +inch_factor = 2.54 + +fig = plt.figure(figsize=(20 / inch_factor, 10 / inch_factor)) +ax1 = fig.add_subplot(221) +ax2 = fig.add_subplot(222) +ax3 = fig.add_subplot(223) +ax4 = fig.add_subplot(224) + +plot_chirp(600, 650, 0, ax1) +plot_chirp(600, 650, np.pi, ax3) + +plot_chirp(600, 620, 0, ax2) +plot_chirp(600, 620, np.pi, ax4) + +ax1.set_ylabel('EOD [mV]', fontsize=22) +ax1.set_title('$\Delta$f = 50 Hz', fontsize = 18) +ax1.yaxis.set_tick_params(labelsize=18) +ax1.set_xticklabels([]) + +ax2.set_title('$\Delta$f = 20 Hz', fontsize = 18) +ax2.set_xticklabels([]) +ax2.set_yticklabels([]) +ax3.set_ylabel('EOD [mV]', fontsize=22) +ax3.xaxis.set_tick_params(labelsize=18) +ax3.yaxis.set_tick_params(labelsize=18) + +ax3.set_xlabel('time [ms]', fontsize=22) +ax4.set_xlabel('time [ms]', fontsize=22) +ax4.xaxis.set_tick_params(labelsize=18) +ax4.set_yticklabels([]) + + + + + + +fig.tight_layout() +#plt.show() +plt.savefig('chirps_while_beat.png')