def tdma_stage(self):
		smsg = TxSerialMsg()
		self.TDMA_MODE = 1;
		self.TDleft = np.arange(self.N, dtype=np.uint8)
		self.ackList = np.nan*self.TDleft
		#test to send something
		#smsg.set_messageid(1)
		#self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
		tm = 0;
		#set packet number
		while np.any(np.isnan(self.ackList)): #change while to if and call at the end of receive loop?
			tm = tm + 1
			for i in self.TDleft:
				#mote doesnt see any of these??
				self.TDMA_TRANSMISSIONS = self.TDMA_TRANSMISSIONS + 1
				#smsg.set_crow(255) #something to signal tdma mode, still necessary?
				smsg.set_messageid(int(i)) 
				#for(j=len(self.dest[i])) eventually loop through J matrix columns that are -1
				smsg.set_data(self.W[self.dest[i]])
				#also send own message w[i] for comparison????, set to V_row?
				smsg.set_V_row(self.W[i])
				smsg.set_current_transmission(self.TDMA_TRANSMISSIONS)
				self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
				time.sleep(.25) #.125 too fast?
				print'TDMA TRANSMISSION ', self.TDMA_TRANSMISSIONS, ': Motes remaining: ', self.TDleft
			##call tinyos receive thread instead?
			#rmsg = AckMsg(msg.dataGet())
			##check for acks, remove nodes with ack type 1 from TDMAleft, record transmissions?
			#newAck = rmsg.get_ACKs()
			#acklist[newAck==1] = 1
		print 'Finished TDMA after ', tm, ' transmissions.' #use tm or get_transmission from receive function? will it make a difference?
	def send(self,m_i):
		smsg = TxSerialMsg()
		#smsg.set_counter(self.counter)
		smsg.set_crow(self.current_row)
		#smsg.set_V_row(self.A[self.current_row])
		smsg.set_V_row(V[m_i,:])
		smsg.set_data(self.tx_symbols[:,m_i])
		Symbol(V[self.current_row,:], self.W, self.map)	  
		smsg.set_data(self.sym[self.current_row])
		self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
Example #3
0
 def send(self):
     smsg = TxSerialMsg()
     #smsg.set_counter(self.counter)
     smsg.set_crow(self.current_row)
     smsg.set_V_row(self.A[self.current_row])
     smsg.set_data(self.sym[self.current_row])
     self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
Example #4
0
 def tdma_stage(self):
     smsg = TxSerialMsg()
     #self.TDMA_MODE = 1;
     #self.TDleft = np.arange(self.N, dtype=np.uint8)
     #self.ackList = np.nan*self.TDleft
     #test to send something
     #smsg.set_messageid(1)
     #self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
     #tm = 0; #move up
     #set packet number
     #while np.any(np.isnan(self.ackList)): #change while to if and call at the end of receive loop?
     #tm = tm + 1
     #for i in self.TDleft:
     #mote doesnt see any of these??
     self.TDMA_TRANSMISSIONS += 1
     #smsg.set_crow(255) #something to signal tdma mode, still necessary?
     #smsg.set_messageid(int(self.ileft))
     smsg.set_messageid(int(self.TDleft[self.ileft]))
     #for(j=len(self.dest[i])) eventually loop through J matrix columns that are -1
     #smsg.set_data(self.W[self.dest[self.ileft],:])
     smsg.set_data(self.W[self.dest[self.TDleft[self.ileft]], :])
     #also send own message w[i] for comparison????, set to V_row?
     #print 'TDMA V Row ', self.W
     #smsg.set_V_row(self.W[self.ileft])
     smsg.set_current_transmission(self.TDMA_TRANSMISSIONS)
     self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
     if self.verbose:
         print 'TDMA TRANSMISSION ', self.TDMA_TRANSMISSIONS, ': Motes remaining: ', self.TDleft
	def tdma_stage(self):
		smsg = TxSerialMsg()
		#self.TDMA_MODE = 1;
		#self.TDleft = np.arange(self.N, dtype=np.uint8)
		#self.ackList = np.nan*self.TDleft
		#test to send something
		#smsg.set_messageid(1)
		#self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
		#tm = 0; #move up
		#set packet number
		#while np.any(np.isnan(self.ackList)): #change while to if and call at the end of receive loop?
			#tm = tm + 1
			#for i in self.TDleft:
				#mote doesnt see any of these??
		self.TDMA_TRANSMISSIONS += 1
		#smsg.set_crow(255) #something to signal tdma mode, still necessary?
		#smsg.set_messageid(int(self.ileft)) 
		smsg.set_messageid(int(self.TDleft[self.ileft])) 
		#for(j=len(self.dest[i])) eventually loop through J matrix columns that are -1
		#smsg.set_data(self.W[self.dest[self.ileft],:])
		smsg.set_data(self.W[self.dest[self.TDleft[self.ileft]],:])
		#also send own message w[i] for comparison????, set to V_row?
		#print 'TDMA V Row ', self.W
		#smsg.set_V_row(self.W[self.ileft])
		smsg.set_current_transmission(self.TDMA_TRANSMISSIONS)
		self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
		if self.verbose:
			print'TDMA TRANSMISSION ', self.TDMA_TRANSMISSIONS, ': Motes remaining: ', self.TDleft
 def send(self):
     smsg = TxSerialMsg()
     # smsg.set_counter(self.counter)
     smsg.set_crow(self.current_row)
     smsg.set_V_row(self.A[self.current_row])
     smsg.set_data(self.sym[self.current_row])
     self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
	def index_stage(self):
		smsgx = TxSerialMsg()
		smsgx.set_messageid(255)  #now something to represent index coding, 255?
		#print 'V is ', self.V
		#print 'm_i is ', self.m_i
		#PIECES HERE? matrix multiply handles it
		smsgx.set_data(np.dot(self.V[self.m_i,:],self.W,))					
		##also send own message w[i] for comparison????
		#smsgx.set_V_row(np.asarray(self.V[self.m_i], dtype=np.float32))
		#smsgx.set_V_row(np.array([1, 2, 3.5, 4.2, 5, 6, 7, 8], dtype=np.float64))
		#print 'sending row m of V: ', self.V[self.m_i]
		smsgx.set_V_row(self.V[self.m_i,:])
		smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
		self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx)
		if self.verbose:
				print 'Transmission ', self.m_i+1, '/', self.m  #m_i+1 or now just m_i ???
				#print self.rx_symbols.astype(int)
		self.m_i += 1
		self.i += 1
Example #8
0
	def index_stage(self):
		smsgx = TxSerialMsg()
		smsgx.set_messageid(255)  #now something to represent index coding, 255?
		#print 'V is ', self.V
		#print 'm_i is ', self.m_i
		#PIECES HERE? matrix multiply handles it
		#print 'mi: ', self.m_i
		#print 'map: ', self.map[self.m_i]
		smsgx.set_data(np.dot(self.V[self.m_i,:],self.W,))					
		#smsgx.set_data(np.dot(self.V[self.map[self.m_i],:],self.W,))					
		##also send own message w[i] for comparison????
		#smsgx.set_V_row(np.asarray(self.V[self.m_i], dtype=np.float32))
		#smsgx.set_V_row(np.array([1, 2, 3.5, 4.2, 5, 6, 7, 8], dtype=np.float64))
		#print 'sending row m of V: ', self.V[self.m_i]
		#smsgx.set_crow()
		
		smsgx.set_V_row(self.V[self.m_i,:])
		
		###random coding instead?
		#randomVrow = np.random.randn(1,self.N)
		###blah[0,abs(np.array(self.V[self.m_i]))<.0001] = 0
		###blah2 = np.asarray(blah,dtype="float64")
		###blah2 = np.asarray(blah)
		###print self.V[self.m_i,:], type(self.V[self.m_i,2])
		###print blah[0,:], type(blah[0,:])		
		#smsgx.set_V_row(randomVrow[0,:])

		##does not decode for random combinations, larger matrix needed to find a null vector????
		##smsgx.set_V_row(np.random.randn(1,self.N))
		
		smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
		self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx)
		if self.verbose:
				print 'Transmission ', self.m_i+1, '/', self.m  #m_i+1 or now just m_i ???
				#print self.rx_symbols.astype(int)
		self.m_i += 1
		self.i += 1
Example #9
0
 def index_stage(self):
     smsgx = TxSerialMsg()
     smsgx.set_messageid(
         255)  #now something to represent index coding, 255?
     #print 'V is ', self.V
     #print 'm_i is ', self.m_i
     #PIECES HERE? matrix multiply handles it
     #print 'mi: ', self.m_i
     #print 'map: ', self.map[self.m_i]
     smsgx.set_data(np.dot(
         self.V[self.m_i, :],
         self.W,
     ))
     #smsgx.set_data(np.dot(self.V[self.map[self.m_i],:],self.W,))
     ##also send own message w[i] for comparison????
     #smsgx.set_V_row(np.asarray(self.V[self.m_i], dtype=np.float32))
     #smsgx.set_V_row(np.array([1, 2, 3.5, 4.2, 5, 6, 7, 8], dtype=np.float64))
     #print 'sending row m of V: ', self.V[self.m_i]
     #smsgx.set_crow()
     smsgx.set_V_row(self.V[self.m_i, :])
     #smsgx.set_V_row(self.V[self.map[self.m_i],:])
     smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
     self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx)
     if self.verbose:
         print 'Transmission ', self.m_i + 1, '/', self.m  #m_i+1 or now just m_i ???
         #print self.rx_symbols.astype(int)
     self.m_i += 1
     self.i += 1
Example #10
0
    def index_stage(self):
        smsgx = TxSerialMsg()
        smsgx.set_messageid(
            255)  #now something to represent index coding, 255?
        #print 'V is ', self.V
        #print 'm_i is ', self.m_i
        #PIECES HERE? matrix multiply handles it
        #print 'mi: ', self.m_i
        #print 'map: ', self.map[self.m_i]
        smsgx.set_data(np.dot(
            self.V[self.m_i, :],
            self.W,
        ))
        #smsgx.set_data(np.dot(self.V[self.map[self.m_i],:],self.W,))
        ##also send own message w[i] for comparison????
        #smsgx.set_V_row(np.asarray(self.V[self.m_i], dtype=np.float32))
        #smsgx.set_V_row(np.array([1, 2, 3.5, 4.2, 5, 6, 7, 8], dtype=np.float64))
        #print 'sending row m of V: ', self.V[self.m_i]
        #smsgx.set_crow()

        smsgx.set_V_row(self.V[self.m_i, :])

        ###random coding instead?
        #randomVrow = np.random.randn(1,self.N)
        ###blah[0,abs(np.array(self.V[self.m_i]))<.0001] = 0
        ###blah2 = np.asarray(blah,dtype="float64")
        ###blah2 = np.asarray(blah)
        ###print self.V[self.m_i,:], type(self.V[self.m_i,2])
        ###print blah[0,:], type(blah[0,:])
        #smsgx.set_V_row(randomVrow[0,:])

        ##does not decode for random combinations, larger matrix needed to find a null vector????
        ##smsgx.set_V_row(np.random.randn(1,self.N))

        smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
        self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx)
        if self.verbose:
            print 'Transmission ', self.m_i + 1, '/', self.m  #m_i+1 or now just m_i ???
            #print self.rx_symbols.astype(int)
        self.m_i += 1
        self.i += 1
Example #11
0
	def index_stage(self):
		smsgx = TxSerialMsg()
		smsgx.set_messageid(255)  #now something to represent index coding, 255?
		#print 'V is ', self.V
		#print 'm_i is ', self.m_i
		#print 'row of V is type ', type(self.V[self.m_i])
		#print 'converted row of V is type ', type(np.asarray(self.V[self.m_i], dtype=np.float64))
		#print 'an element of V is ', type(self.V[2,3])
		#print 'the dot is fine, type ', type(np.dot(self.V[self.m_i,:],self.W,))
		#PIECES HERE?
		smsgx.set_data(np.dot(self.V[self.m_i,:],self.W,))					
		##also send own message w[i] for comparison????
		#says its not a float????!! ndarray works fine in Decoded.py
		#print 'expected size of V_row is', smsgx.numElements_V_row(0)
		#smsgx.set_V_row(np.asarray(self.V[self.m_i], dtype=np.float32))
		smsgx.set_V_row(np.array([1, 2, 3.5, 4.2, 5, 6, 7, 8], dtype=np.float64))
		#print 'sending row m of V: ', self.V[self.m_i]
		smsgx.set_V_row(self.V[self.m_i])
		smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
		self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx)
	def main_loop(self): #change to compute_matrixes
		smsgx = TxSerialMsg()
		self.TDMA_MODE = 0;
		eps_vec = .5*np.ones(self.N)
		i = 1
		while np.any(np.isnan(self.final_messages)):
			Kprime = len(self.map);
			if self.verbose:
				print 'Remaining ', Kprime, ' nodes are: '
				print self.map

			## special case for one remaining node
			if Kprime == 1:
				self.TOTAL_TRANSMISSIONS += 1
				while not transmit_messages(1, eps_vec[self.map]):
					self.TOTAL_TRANSMISSIONS += 1
				self.final_messages[self.map] = self.W[self.map]
			else:
				## Generate next m transmissions
				(V, U) = alignment('mixed', self.J, 1e-4, 100, False)
				m = np.shape(V)[0]
				if self.verbose:
					print 'Minimum rank is ', m

				# generate next symbol based on current V
				L = len(self.tx_symbols);
				if i == 1:
					L = 0

				self.unsolved = np.ones(Kprime) > 0
				m_i = 0
				while np.all(self.unsolved) and m_i < m:
					self.tx_symbols = np.append(self.tx_symbols, Symbol(V[m_i,:], self.W, self.map))
					R = transmit_messages(1, eps_vec[self.map])
					if i == 1:
						self.rx_symbols = R
					else:
						self.rx_symbols = np.bmat([self.rx_symbols, R])
					if self.verbose:
						print 'Transmission ', m_i+1, '/', m
						print self.rx_symbols.astype(int)
					self.TOTAL_TRANSMISSIONS += 1
					# solve for messages if possible
					(self.unsolved, final_messages) = bs_decode_messages(self.dest, Kprime, self.map,
							self.rx_symbols, self.tx_symbols, self.A, self.I, self.J, self.W, self.final_messages, self.verbose)
					time.sleep(.2)
					print 'UNSOLVED: ', self.unsolved
					print 'MAP: ' , self.map
					#SEND TO TARGET HERE, rewrite these lines
					#smsg.set_crow
					print 'tx map ', self.map
					smsgx.set_messageid(255)  #now something to represent index coding, 255?
					smsgx.set_data(np.dot(V[m_i],self.W,))					
					##also send own message w[i] for comparison????
					smsgx.set_V_row(V[m_i]) 
					smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
					self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(), 0, smsgx)
					#time.sleep(1) #.125 too fast?
	
					#INTERPRET ACKS IN RECEIVE FUNCTION
					m_i += 1
					i += 1
					self.final_messages = final_messages #still need final messages??
				# update data structures
				self.map = np.nonzero(np.isnan(self.final_messages.reshape(-1)))[0]
				self.rx_symbols = self.rx_symbols[self.unsolved, :]
				self.J = self.J[self.unsolved, :]
				self.I = self.I[self.unsolved, :]
				self.A = self.A[self.unsolved, :]
		if self.verbose:
			print 'Total number of transmissions: ', self.TOTAL_TRANSMISSIONS
		return self.TOTAL_TRANSMISSIONS
 def tdma_stage(self):
     smsg = TxSerialMsg()
     self.TDMA_MODE = 1
     self.TDleft = np.arange(self.N, dtype=np.uint8)
     self.ackList = np.nan * self.TDleft
     #test to send something
     #smsg.set_messageid(1)
     #self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
     tm = 0
     #set packet number
     while np.any(
             np.isnan(self.ackList)
     ):  #change while to if and call at the end of receive loop?
         tm = tm + 1
         for i in self.TDleft:
             #mote doesnt see any of these??
             self.TDMA_TRANSMISSIONS = self.TDMA_TRANSMISSIONS + 1
             #smsg.set_crow(255) #something to signal tdma mode, still necessary?
             smsg.set_messageid(int(i))
             #for(j=len(self.dest[i])) eventually loop through J matrix columns that are -1
             smsg.set_data(self.W[self.dest[i]])
             #also send own message w[i] for comparison????, set to V_row?
             smsg.set_V_row(self.W[i])
             smsg.set_current_transmission(self.TDMA_TRANSMISSIONS)
             self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0,
                              smsg)
             time.sleep(.25)  #.125 too fast?
             print 'TDMA TRANSMISSION ', self.TDMA_TRANSMISSIONS, ': Motes remaining: ', self.TDleft
         ##call tinyos receive thread instead?
         #rmsg = AckMsg(msg.dataGet())
         ##check for acks, remove nodes with ack type 1 from TDMAleft, record transmissions?
         #newAck = rmsg.get_ACKs()
         #acklist[newAck==1] = 1
     print 'Finished TDMA after ', tm, ' transmissions.'  #use tm or get_transmission from receive function? will it make a difference?
 def send(self, m_i):
     smsg = TxSerialMsg()
     #smsg.set_counter(self.counter)
     smsg.set_crow(self.current_row)
     #smsg.set_V_row(self.A[self.current_row])
     smsg.set_V_row(V[m_i, :])
     smsg.set_data(self.tx_symbols[:, m_i])
     Symbol(V[self.current_row, :], self.W, self.map)
     smsg.set_data(self.sym[self.current_row])
     self.mif.sendMsg(self.source, 0xFFFF, smsg.get_amType(), 0, smsg)
    def main_loop(self):  #change to compute_matrixes
        smsgx = TxSerialMsg()
        self.TDMA_MODE = 0
        eps_vec = .5 * np.ones(self.N)
        i = 1
        while np.any(np.isnan(self.final_messages)):
            Kprime = len(self.map)
            if self.verbose:
                print 'Remaining ', Kprime, ' nodes are: '
                print self.map

            ## special case for one remaining node
            if Kprime == 1:
                self.TOTAL_TRANSMISSIONS += 1
                while not transmit_messages(1, eps_vec[self.map]):
                    self.TOTAL_TRANSMISSIONS += 1
                self.final_messages[self.map] = self.W[self.map]
            else:
                ## Generate next m transmissions
                (V, U) = alignment('mixed', self.J, 1e-4, 100, False)
                m = np.shape(V)[0]
                if self.verbose:
                    print 'Minimum rank is ', m

                # generate next symbol based on current V
                L = len(self.tx_symbols)
                if i == 1:
                    L = 0

                self.unsolved = np.ones(Kprime) > 0
                m_i = 0
                while np.all(self.unsolved) and m_i < m:
                    self.tx_symbols = np.append(
                        self.tx_symbols, Symbol(V[m_i, :], self.W, self.map))
                    R = transmit_messages(1, eps_vec[self.map])
                    if i == 1:
                        self.rx_symbols = R
                    else:
                        self.rx_symbols = np.bmat([self.rx_symbols, R])
                    if self.verbose:
                        print 'Transmission ', m_i + 1, '/', m
                        print self.rx_symbols.astype(int)
                    self.TOTAL_TRANSMISSIONS += 1
                    # solve for messages if possible
                    (self.unsolved, final_messages) = bs_decode_messages(
                        self.dest, Kprime, self.map, self.rx_symbols,
                        self.tx_symbols, self.A, self.I, self.J, self.W,
                        self.final_messages, self.verbose)
                    time.sleep(.2)
                    print 'UNSOLVED: ', self.unsolved
                    print 'MAP: ', self.map
                    #SEND TO TARGET HERE, rewrite these lines
                    #smsg.set_crow
                    print 'tx map ', self.map
                    smsgx.set_messageid(
                        255)  #now something to represent index coding, 255?
                    smsgx.set_data(np.dot(
                        V[m_i],
                        self.W,
                    ))
                    ##also send own message w[i] for comparison????
                    smsgx.set_V_row(V[m_i])
                    smsgx.set_current_transmission(self.TOTAL_TRANSMISSIONS)
                    self.mif.sendMsg(self.source, 0xFFFF, smsgx.get_amType(),
                                     0, smsgx)
                    #time.sleep(1) #.125 too fast?

                    #INTERPRET ACKS IN RECEIVE FUNCTION
                    m_i += 1
                    i += 1
                    self.final_messages = final_messages  #still need final messages??
                # update data structures
                self.map = np.nonzero(np.isnan(
                    self.final_messages.reshape(-1)))[0]
                self.rx_symbols = self.rx_symbols[self.unsolved, :]
                self.J = self.J[self.unsolved, :]
                self.I = self.I[self.unsolved, :]
                self.A = self.A[self.unsolved, :]
        if self.verbose:
            print 'Total number of transmissions: ', self.TOTAL_TRANSMISSIONS
        return self.TOTAL_TRANSMISSIONS