def create_objects(self): ## DEFINE PARAMETERS ########### self.CharSet = 'lowerCaseLiterals' self.CharactersPerMessage = 5 self.SourceEncodeMethod = 'basic' self.errorCorrection = 'HardHamming' self.FEC_Size = 7 self.FEC_msg = 4 # Choose frequencies matching those on the sender side exactly from set: # [23.26, 23.81, 24.39, 25, 25.64, 26.36, 27.03, 27.78, 28.57, 29.41, 30.30, 31.25, 32.26, 33.33, # 34.48, 35.71, 37.04, 38.46 ] self.TransmissionFrequenciesIdeal = [ 23.26, 25, 26.36, 27.78, 28.57, 30.30, 31.25, 33.33 ] self.TimePerSymbolSeconds = 4 self.ChannelSource = 'Emokit' self.FlushBuffer = True self.Electrodes = ['O1', 'O2', 'P7', 'P8'] self.DetectionMethod = 'PSDA' self.DecisionType = 'HARD' self.syncMethod = 'HeaderV2' #'HeaderV2' self.FileWrite = False self.readFileName = '20171009-182912.csv' ########################### self.TransmissionFrequenciesActual = FD.mapToClosestFrequencies( self.TransmissionFrequenciesIdeal, 128 * self.TimePerSymbolSeconds) print(self.TransmissionFrequenciesActual) self.EEGChannel = CH.Channel(self.ChannelSource, self.Electrodes, WriteToFile=self.FileWrite, ReadFile=self.readFileName, useHeader=False, holdFreq=28.57, headerFreq=30.30, startThreshold=300, startThresholdRelative=0.8, crossoverThresholdRelative=0.5) self.Detector = RL.DetectionObject(self.DetectionMethod, self.TransmissionFrequenciesActual, None, self.Electrodes, self.TimePerSymbolSeconds, self.DecisionType) self.CharSet = RL.loadCharacterSet(self.CharSet) self.CD = RL.ChannelDecoder(self.errorCorrection, 'HARD', self.FEC_Size, self.FEC_msg) self.SD = RL.sourceDecoder(self.CharSet, self.SourceEncodeMethod) self.recordTime = RL.calculateRecvTime( self.TimePerSymbolSeconds, len(self.TransmissionFrequenciesActual), self.FEC_Size, self.FEC_msg, self.CharactersPerMessage, len(self.CharSet)) print(self.recordTime) self.recordTime = int(self.recordTime)
def create_objects(self): self.CharSet = 'lowerCaseLiterals' self.CharactersPerMessage = 7 self.SourceEncodeMethod = 'basic' self.errorCorrection = 'HardHamming' self.FEC_blockSize = 15 self.FEC_msgSize = 11 ########################### self.ValidDictionary = IL.loadCharacterSet(self.CharSet) self.InputValidationObject = IL.InputValidation(self.ValidDictionary,self.CharactersPerMessage) self.SrcEncoder = IL.SrcEncoder(self.ValidDictionary , self.SourceEncodeMethod) self.FEC = IL.ChannelEncoder(self.errorCorrection, self.FEC_blockSize , self.FEC_msgSize) ################################ self.CharSet = RL.loadCharacterSet(self.CharSet) self.CD = RL.ChannelDecoder(self.errorCorrection,'HARD', self.FEC_blockSize, self.FEC_msgSize) self.SD = RL.sourceDecoder(self.CharSet, self.SourceEncodeMethod)
CharactersPerMessage = 5 SourceEncodeMethod = 'basic' errorCorrection = 'HardHamming' FEC_Size = 7 FEC_msg = 4 TransmissionFrequenciesIdeal = [ 23.26, 25, 26.36, 27.78, 28.57, 30.30, 31.25, 33.33 ] TimePerSymbolSeconds = 4 ChannelSource = 'Emokit' flushBuffer = True Electrodes = ['O1', 'O2', 'P7', 'P8'] DecisionType = 'HARD' syncMethod = 'HeaderV2' fileWrite = True CharSet = RL.loadCharacterSet(CharSet) actualFrequencies = FD.mapToClosestFrequencies( TransmissionFrequenciesIdeal, 512) Channel = CH.Channel(ChannelSource, Electrodes, fileWrite, useHeader=True, holdFreq=28.57, headerFreq=30.30, startThreshold=300, startThresholdRelative=0.8, crossoverThresholdRelative=0.5) DetectorCCA = RL.DetectionObject('CCA', actualFrequencies, None, Electrodes, TimePerSymbolSeconds, DecisionType)
def RunReciever( data_file, results_file , config_parameters, test_option ): # function which will execute a run of the emotiv reciever channel = Channel.Channel(config_parameters["CHANNEL_SOURCE"], config_parameters["ELECTRODES"], config_parameters["FILE_WRITE"],\ holdFreq= HOLD_FREQUENCY, headerFreq = HEADER_FREQUENCY ,startThreshold= START_THRESHOLD ,\ startThresholdRelative= START_THRESHOLD_RELATIVE,\ crossoverThresholdRelative= CROSSOVER_THRESHOLD_RELATIVE ) detectorCCA = Reciever.DetectionObject("CCA", config_parameters["TRANSMISSION_FREQUENCIES"], None, config_parameters["ELECTRODES"], config_parameters["TIME_PER_SYMBOL"],config_parameters["DECISION_TYPE"]) detectorPSDA = Reciever.DetectionObject("PSDA", config_parameters["TRANSMISSION_FREQUENCIES"], None, config_parameters["ELECTRODES"][0], config_parameters["TIME_PER_SYMBOL"],config_parameters["DECISION_TYPE"]) channelDecoder = Reciever.ChannelDecoder(config_parameters["ERROR_CORRECTION"],"HARD",\ config_parameters["FEC_BLOCK_SIZE"], config_parameters["FEC_MESSAGE_SIZE"]) characterSet = Reciever.loadCharacterSet(config_parameters["CHARACTER_SET"]) sourceDecoder = Reciever.sourceDecoder(characterSet,config_parameters["SOURCE_ENCODER"]) #calculate the record time recordTime = Reciever.calculateRecvTime(config_parameters["TIME_PER_SYMBOL"],\ len( config_parameters["TRANSMISSION_FREQUENCIES"] ),\ config_parameters["FEC_BLOCK_SIZE"],\ config_parameters["FEC_MESSAGE_SIZE"],\ config_parameters["CHARACTERS_PER_MESSAGE"],\ len(characterSet)) print('calculated record time is: '+ str(recordTime)) # need to now do the actual recording here # channel.setFileName(data_file) raw_input("ready ... press Enter to Start") if config_parameters["SYNC_METHOD"] == 'HeaderV2': print('--- DETECTING GAZE ----') channel.gaze_detect() print('--- GAZE DETECTED ----') channel.threshold_detect() print('--- THRESHOLD DETECTED ----') else: channel.waitForStart(config_parameters["SYNC_METHOD"]) recordStartTime = time.time() symbolsToCapture = int(float(recordTime)/float(config_parameters["TIME_PER_SYMBOL"])) print("--- DATA RECORDING STARTED --- " + str(recordStartTime)) channel.flushBuffer() symbolsCCA = [] symbolsPSDA = [] Data = numpy.zeros((0, len(config_parameters["ELECTRODES"]))) for symbol in range(symbolsToCapture): print("Getting Symbol "+str(symbol)+'. . . .') DataBlock = channel.getDataBlock(int(config_parameters["TIME_PER_SYMBOL"]),False) Data = numpy.concatenate([Data, DataBlock]) print( 'Number of samples collected: ' + str(len(DataBlock))) symbolsPSDA.append(detectorPSDA.getSymbols(DataBlock)[0]) symbolsCCA.append(detectorCCA.getSymbols(DataBlock)[0]) print('psda symbol vector :' + str(symbolsPSDA)) print('cca symbol vector :' + str(symbolsCCA)) if int(recordTime) != 0: intCCA = Reciever.Demapper(symbolsCCA, len(config_parameters["TRANSMISSION_FREQUENCIES"] ),'HARD') intPSDA = Reciever.Demapper(symbolsPSDA,len(config_parameters["TRANSMISSION_FREQUENCIES"] ),'HARD') encodedCCA = channelDecoder.de_interleave(intCCA) encodedPSDA =channelDecoder.de_interleave(intPSDA) binaryCCA = channelDecoder.Decode(encodedCCA) binaryPSDA = channelDecoder.Decode(encodedPSDA) StringCCA = sourceDecoder.Decode(binaryCCA) StringPSDA = sourceDecoder.Decode(binaryPSDA) print('Message Recieved from the CCA reciever '+StringCCA) print('Message Recieved from the PSDA reciever '+StringPSDA) successful = raw_input("Was this a successful run (Y/n): ") comments = raw_input("Provide any comments on the trial here: \n") results = {} results["SUCCESSFUL"] = successful results["COMMENTS"] = comments results["CONFIGURATION"] = config_parameters results["RECORD_START_TIME"] = recordStartTime if test_option != 'protocol_only': results["INTERLEAVED_CCA"]= intCCA results["INTERLEAVED_PSDA"]= intPSDA results["ENCODED_CCA"]= encodedCCA results["ENCODED_PSDA"]= encodedPSDA results["BINARY_CCA"]= binaryCCA results["BINARY_PSDA"]= binaryPSDA results["STRING_PSDA"]= StringPSDA results["STRING_CCA"]= StringCCA print(results) with open(results_file, 'w') as outfile: json.dump(results, outfile) with open(data_file,'w') as outfile: outfile.write(Data) data_file = open(data_file,'w') writer = csv.writer(data_file) for i in range(len(Data)): writer.writerow(Data[i]) data_file.close()