In [85]:
from scipy import signal, stats
import numpy as np
import pandas as pd
from matplotlib.pyplot import *

%matplotlib inline

In [86]:
## sampling rate of ganglion is 200Hz
fs = 200.0

In [87]:
def extract_data(fname):
    d = pd.read_csv(fname)
    eeg = np.array(d.ix[:, 1:5])
    tag = np.array(d.Marker)
    start = np.where(tag == 1)[0][0]
    end = np.where(tag == 2)[0][0]
    eeg = eeg[start:end]
    return eeg

In [88]:
## get data
eeg1 = extract_data('../data/data_bunny_pierre_1.csv')
eeg2 = extract_data('../data/data_bunny_pierre_2.csv')
eeg3 = extract_data('../data/data_bunny_pierre_3.csv')

In [89]:
## data may be off by a few samples, so need to align
N_samp = min(len(eeg1), len(eeg2), len(eeg3))
eeg1 = eeg1[:N_samp]
eeg2 = eeg2[:N_samp]
eeg3 = eeg3[:N_samp]

In [90]:
## filter signal to remove noise
b, a = signal.butter(2, (2/fs, 30/fs), btype='bandpass')
eeg1 = signal.filtfilt(b, a, eeg1, axis=0)
eeg2 = signal.filtfilt(b, a, eeg2, axis=0)
eeg3 = signal.filtfilt(b, a, eeg3, axis=0)

In [91]:
## advance window of 200 samples
## take correlation between signals across each sample
window = 200
step = 25
corr = []
corr2 = []
times = []

for start in np.arange(0, N_samp, step):
    end = start + window
    w1 = eeg1[start:end]
    w2 = eeg2[start:end]
    w3 = eeg3[start:end]
    
    ## average the correlation across each channel
    r = 0
    r2 = 0
    for c in range(w1.shape[1]):
        r += stats.pearsonr(w1[:, c], w2[:, c])[0]
        r2 += stats.pearsonr(w1[:, c], w3[:, c])[0]
    r /= w1.shape[1]
    r2 /= w2.shape[1]
    
    mid = (start+end)/2 # middle sample
    t = mid / fs # convert middle sample to time
    
    
    times.append(t)
    corr.append(r)
    corr2.append(r2)

times = np.array(times)
corr = np.array(corr)
corr2 = np.array(corr2)

In [92]:
figure(figsize=(14,4))
plot(times, corr)
xlabel('Time (s)')
ylabel('Correlation')
_ = title('Correlation across brains')



In [ ]:


In [ ]: