Exemple #1
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)
Exemple #2
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
Exemple #3
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
 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)
Exemple #6
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)
Exemple #7
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
    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