def predict(self, window): if self.m: y=signal.filtfilt(self.b, self.a, window) p = pburg(y, self.order, sampling=self.sampling/self.downsample) p.run() power = eeg.bin_power(abs(p.psd),p.frequencies(), self.band, self.sampling/self.downsample) p_labs, p_acc, p_vals = svm_predict([0], [(10*log10(power*2./(2.*pi))).tolist()], self.m, '-q') print p_labs return p_labs return None
def train(self, log): f = open(log,'r') raw=[] label=[] while 1: line=f.readline() if not line: break label.append(int(line)) raw.append(map(float, f.readline().split(','))) print 'Trials : {0}'.format(len(raw)) f.close() #downsample to 128Hz for i in range(len(raw)): raw[i]=raw[i][::self.downsample] #windowing and calculating PSD of each window psd=[[],[]] for i in range(len(raw)): while True: y=signal.filtfilt(self.b, self.a, raw[i][:self.window]) p = pburg(y, self.order, sampling=self.sampling/self.downsample) p.run() power = eeg.bin_power(abs(p.psd),p.frequencies(), self.band, self.sampling/self.downsample) psd[label[i]].append(10*log10(power*2./(2.*pi)))#logPSD raw[i]=raw[i][self.increment:] if len(raw[i])<self.window: break #averaging psd self.avg_psd=np.mean(psd,axis=0) #training svm using svm y = [0] * len(psd[0])+[1]*len(psd[1]) x = map(list,psd[0])+map(list,psd[1]) print 'n_sample : {0}'.format(len(y)) prob = svm_problem(y, x) param = '-t 0 -c 4' svm_train(prob, svm_parameter(param+' -v 10 -q'))#just calulating ross-validation accuracy for classification self.m = svm_train(prob, svm_parameter(param))