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 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 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
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 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 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 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