46 lines
1.0 KiB
Python
46 lines
1.0 KiB
Python
import numpy as np
|
|
from IPython import embed
|
|
|
|
|
|
def zero_crossing(eod, time):
|
|
threshold = 0
|
|
shift_eod = np.roll(eod, 1)
|
|
eod_times = time[(eod >= threshold) & (shift_eod < threshold)]
|
|
sampling_rate = 40000.0
|
|
eod_idx = eod_times*sampling_rate
|
|
return eod_idx
|
|
|
|
|
|
def vector_strength(spike_times, eod_durations):
|
|
n = len(spike_times)
|
|
phase_times = np.zeros(len(spike_times))
|
|
for i, idx in enumerate(spike_times):
|
|
phase_times[i] = (spike_times[i] / eod_durations[i]) * 2 * np.pi
|
|
vs = np.sqrt((1/n*sum(np.cos(phase_times)))**2 + (1/n*sum(np.sin(phase_times)))**2)
|
|
return vs
|
|
|
|
|
|
def gaussian(x, sig):
|
|
y = np.exp(-0.5 * (x/sig)**2) / np.sqrt(2*np.pi)/sig
|
|
return y
|
|
|
|
|
|
def smooth(data, window, dt):
|
|
sigma = window
|
|
time_gauss = np.arange(-4 * sigma, 4 * sigma, dt)
|
|
gauss = gaussian(time_gauss, sigma)
|
|
smoothed_data = np.convolve(data, gauss, 'same')
|
|
return smoothed_data
|
|
|
|
|
|
def map_keys(input):
|
|
df_map = {}
|
|
for k in input.keys():
|
|
freq = k[1]
|
|
df = int(freq.strip('Hz'))
|
|
if df in df_map.keys():
|
|
df_map[df].append(k)
|
|
else:
|
|
df_map[df] = [k]
|
|
return df_map
|