def handle_msg_fft_average(self, msg_pmt): # PMT TYPE CHECK AND UNPACKING if pmt.is_symbol(msg_pmt): msg_str = pmt.symbol_to_string(msg_pmt) if msg_str == "FFT_AVG_FINISH_ACK": self.top_block.rise_fft_avg_flag() elif pmt.is_f32vector(msg_pmt): data = pmt.f32vector_elements(msg_pmt) self.fft_data_buffer = data
def handle_msg_energy(self, msg_pmt): # PMT TYPE CHECK AND UNPACKING if pmt.is_symbol(msg_pmt): msg_str = pmt.symbol_to_string(msg_pmt) if msg_str == "E_FINISH_ACK": self.top_block.rise_energy_flag() elif pmt.is_f32vector(msg_pmt): data = pmt.f32vector_elements(msg_pmt) self.top_block.on_receive_pkt_data(data)
def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_f32vector(msg): print("[ERROR] Received invalid message type. Expected f32vector") return packet_short = pmt.f32vector_elements(msg)[8:8 + 1020] packet_long = pmt.f32vector_elements(msg)[8:8 + 1996] self.message_port_pub( pmt.intern('short'), pmt.cons(pmt.PMT_NIL, pmt.init_f32vector(len(packet_short), packet_short))) self.message_port_pub( pmt.intern('long'), pmt.cons(pmt.PMT_NIL, pmt.init_f32vector(len(packet_long), packet_long)))
def handle_msg(self, msg_pmt): msg = pmt.cdr(msg_pmt) if not pmt.is_f32vector(msg): print("[ERROR] Received invalid message type. Expected f32vector") return pls = np.array(pmt.f32vector_elements(msg)[:64], dtype='float32') correlations = np.sum(pls[:, np.newaxis] * scrambled_PLS_bipolar, axis=0) code = PLS_codes[np.argmax(correlations)] # It seems that there is a typo in the rev 1.04 document # PLS-code 0 is listed as corresponding to data length 223 # PLS-code 1 is listed as corresponding to data length 48 # However, according to the test IQ data it is the other way # around data_len = 48 if code == 0 else 223 payload_len = (data_len + 32) * 2 payload_out = pmt.f32vector_elements(msg)[64:][:8 * payload_len] payload_out = pmt.init_f32vector(len(payload_out), payload_out) msg_out = pmt.cons(pmt.car(msg_pmt), payload_out) self.message_port_pub(pmt.intern('out'), msg_out)