예제 #1
0
    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)
예제 #2
0
	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)
예제 #3
0
        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)
    DetectorPSDA = RL.DetectionObject('PSDA', actualFrequencies, None, ['O1'],
                                      TimePerSymbolSeconds, DecisionType)
    chnDecoder = RL.ChannelDecoder(errorCorrection, 'HARD', FEC_Size, FEC_msg)
    srcDecoder = RL.sourceDecoder(CharSet, SourceEncodeMethod)

    recordTime = RL.calculateRecvTime(TimePerSymbolSeconds,
                                      len(actualFrequencies), FEC_Size,
                                      FEC_msg, CharactersPerMessage,
                                      len(CharSet))
    recordTime = int(recordTime)
    while True:
        run = raw_input('Enter Run Number: ')
        path = TL.makePath(user, testType, run)
        Channel.setFileName(path + '\\raw.csv')
        Channel.gaze_detect()
        Channel.threshold_detect()
        TL.quickRunReceiver(path, Channel, DetectorCCA, DetectorPSDA,
                            chnDecoder, srcDecoder, recordTime,
예제 #4
0
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()