예제 #1
0
    def main_loop(self):
        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

                unsolved = np.ones(Kprime) > 0
                m_i = 0
                while np.all(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
                    #SEND TO TARGET HERE
                    (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)
                    #RECEIVE FROM TARGET HERE
                    #INTERPRET ACKS HERE
                    m_i += 1
                    i += 1
                    self.final_messages = final_messages
                # update data structures
                self.map = np.nonzero(np.isnan(
                    self.final_messages.reshape(-1)))[0]
                self.rx_symbols = self.rx_symbols[unsolved, :]
                self.J = self.J[unsolved, :]
                self.I = self.I[unsolved, :]
                self.A = self.A[unsolved, :]
        if self.verbose:
            print 'Total number of transmissions: ', self.TOTAL_TRANSMISSIONS
        return self.TOTAL_TRANSMISSIONS
    def main_loop(self):
        eps_vec = 0.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

                unsolved = np.ones(Kprime) > 0
                m_i = 0
                while np.all(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
                    # SEND TO TARGET HERE
                    (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,
                    )
                    # RECEIVE FROM TARGET HERE
                    # INTERPRET ACKS HERE
                    m_i += 1
                    i += 1
                    self.final_messages = final_messages
                    # update data structures
                self.map = np.nonzero(np.isnan(self.final_messages.reshape(-1)))[0]
                self.rx_symbols = self.rx_symbols[unsolved, :]
                self.J = self.J[unsolved, :]
                self.I = self.I[unsolved, :]
                self.A = self.A[unsolved, :]
        if self.verbose:
            print "Total number of transmissions: ", self.TOTAL_TRANSMISSIONS
        return self.TOTAL_TRANSMISSIONS
	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 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