def __init__(self, encoder_list_0, input_size, output_size): gr.hier_block2.__init__( self, "Threaded Encoder", gr.io_signature(1, 1, input_size * 1), gr.io_signature(1, 1, output_size * 1), ) ################################################## # Parameters ################################################## self.encoder_list_0 = encoder_list_0 ################################################## # Variables ################################################## ################################################## # Blocks ################################################## self.fec_deinterleave_0 = fec.deinterleave( input_size, fec.get_encoder_input_size(encoder_list_0[0])) self.generic_encoders_0 = [] for i in range(len(encoder_list_0)): self.generic_encoders_0.append( fec.encoder(encoder_list_0[i], input_size, output_size)) self.fec_interleave_0 = fec.interleave( output_size, fec.get_encoder_output_size(encoder_list_0[0])) ################################################## # Connections ################################################## for i in range(len(encoder_list_0)): self.connect((self.fec_deinterleave_0, i), (self.generic_encoders_0[i], 0)) for i in range(len(encoder_list_0)): self.connect((self.generic_encoders_0[i], 0), (self.fec_interleave_0, i)) self.connect((self, 0), (self.fec_deinterleave_0, 0)) self.connect((self.fec_interleave_0, 0), (self, 0))
def __init__(self, encoder_list_0, input_size, output_size): gr.hier_block2.__init__( self, "Threaded Encoder", gr.io_signature(1, 1, input_size*1), gr.io_signature(1, 1, output_size*1), ) ################################################## # Parameters ################################################## self.encoder_list_0 = encoder_list_0 ################################################## # Variables ################################################## ################################################## # Blocks ################################################## self.fec_deinterleave_0 = fec.deinterleave(input_size, fec.get_encoder_input_size(encoder_list_0[0])) self.generic_encoders_0 = []; for i in range(len(encoder_list_0)): self.generic_encoders_0.append(fec.encoder(encoder_list_0[i], input_size, output_size)) self.fec_interleave_0 = fec.interleave(output_size, fec.get_encoder_output_size(encoder_list_0[0])) ################################################## # Connections ################################################## for i in range(len(encoder_list_0)): self.connect((self.fec_deinterleave_0, i), (self.generic_encoders_0[i], 0)) for i in range(len(encoder_list_0)): self.connect((self.generic_encoders_0[i], 0), (self.fec_interleave_0, i)) self.connect((self, 0), (self.fec_deinterleave_0, 0)) self.connect((self.fec_interleave_0, 0), (self, 0))
def __init__(self, decoder_list_0, input_size, output_size): gr.hier_block2.__init__( self, "Capillary Threaded Decoder", gr.io_signature(1, 1, input_size*1), gr.io_signature(1, 1, output_size*1), ) ################################################## # Parameters ################################################## self.decoder_list_0 = decoder_list_0 ################################################## # Variables ################################################## ################################################## # Blocks ################################################## self.fec_deinterleaves_0 = []; for i in range(int(math.log(len(decoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_deinterleaves_0.append(fec.deinterleave(input_size, fec.get_decoder_input_size(decoder_list_0[0]))) self.generic_decoders_0 = []; for i in range(len(decoder_list_0)): self.generic_decoders_0.append(fec.decoder(decoder_list_0[i], input_size, output_size)) self.fec_interleaves_0 = []; for i in range(int(math.log(len(decoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_interleaves_0.append(fec.interleave(output_size, fec.get_decoder_output_size(decoder_list_0[0]))) ################################################## # Connections ################################################## rootcount = 0; branchcount = 1; for i in range(int(math.log(len(decoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.fec_deinterleaves_0[branchcount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.fec_deinterleaves_0[branchcount + 1], 0)) rootcount += 1; branchcount += 2; codercount = 0; for i in range(len(decoder_list_0)/2): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.generic_decoders_0[codercount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.generic_decoders_0[codercount + 1], 0)) rootcount += 1; codercount += 2; rootcount = 0; branchcount = 1; for i in range(int(math.log(len(decoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_interleaves_0[branchcount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.fec_interleaves_0[branchcount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1; branchcount += 2; codercount = 0; for i in range(len(decoder_list_0)/2): self.connect((self.generic_decoders_0[codercount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.generic_decoders_0[codercount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1; codercount += 2; if ((len(self.decoder_list_0)) > 1): self.connect((self, 0), (self.fec_deinterleaves_0[0], 0)) self.connect((self.fec_interleaves_0[0], 0), (self, 0)) else: self.connect((self, 0), (self.generic_decoders_0[0], 0)) self.connect((self.generic_decoders_0[0], 0), (self, 0))
def make_packet(payload, samples_per_symbol, bits_per_symbol, preamble=default_preamble, access_code=default_access_code, pad_for_usrp=True, whitener_offset=0, whitening=True, calc_crc=True, repeat=1, interleave=None, debug=False): """ Build a packet, given access code, payload, and whitener offset Args: payload: packet payload, len [0, 4096] samples_per_symbol: samples per symbol (needed for padding calculation) (int) bits_per_symbol: (needed for padding calculation) (int) preamble: string of ascii 0's and 1's access_code: string of ascii 0's and 1's pad_for_usrp: If true, packets are padded such that they end up a multiple of 128 samples(512 bytes) whitener_offset: offset into whitener string to use [0-16) whitening: Whether to turn on data whitening(scrambling) (boolean) calc_crc: Whether to calculate CRC32 or not (boolean) Packet will have access code at the beginning, followed by length, payload and finally CRC-32. """ if not is_1_0_string(preamble): raise ValueError, "preamble must be a string containing only 0's and 1's (%r)" % (preamble,) if not is_1_0_string(access_code): raise ValueError, "access_code must be a string containing only 0's and 1's (%r)" % (access_code,) if not whitener_offset >=0 and whitener_offset < 16: raise ValueError, "whitener_offset must be between 0 and 15, inclusive (%i)" % (whitener_offset,) (packed_access_code, padded) = conv_1_0_string_to_packed_binary_string(access_code) (packed_preamble, ignore) = conv_1_0_string_to_packed_binary_string(preamble) if(calc_crc): payload_with_crc = crc.gen_and_append_crc32(payload) else: payload_with_crc = payload if repeat > 1: payload_with_crc = fec.repeat_encode(payload_with_crc, repeat) if interleave == 1: payload_with_crc = fec.interleave(payload_with_crc, repeat) elif interleave == 2: payload_with_crc = fec.shuffle_encode(payload_with_crc) L = len(payload_with_crc) if debug: print "" print "length =", L print "outbound crc =", string_to_hex_list(payload_with_crc[-4:]) print "payload_with_crc =", string_to_hex_list(payload_with_crc) print "" MAXLEN = len(random_mask_tuple) if L > MAXLEN: raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,) if whitening: pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset), whiten(payload_with_crc, whitener_offset), '\x55')) else: pkt = ''.join((packed_preamble, packed_access_code, make_header(L, whitener_offset), (payload_with_crc), '\x55')) if pad_for_usrp: pkt = pkt + (_npadding_bytes(len(pkt), int(samples_per_symbol), bits_per_symbol) * '\x55') #print "make_packet: len(pkt) =", len(pkt) return pkt
def __init__(self, encoder_list_0, input_size=gr.sizeof_char, output_size=gr.sizeof_float): gr.hier_block2.__init__( self, "Capillary Threaded Encoder", gr.io_signature(1, 1, input_size), gr.io_signature(1, 1, output_size), ) ################################################## # Parameters ################################################## self.encoder_list_0 = encoder_list_0 ################################################## # Variables ################################################## ################################################## # Blocks ################################################## self.fec_deinterleaves_0 = [] for i in range(int(math.log(len(encoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_deinterleaves_0.append( fec.deinterleave( input_size, fec.get_encoder_input_size(encoder_list_0[0]))) self.generic_encoders_0 = [] for i in range(len(encoder_list_0)): self.generic_encoders_0.append( fec.encoder(encoder_list_0[i], input_size, output_size)) self.fec_interleaves_0 = [] for i in range(int(math.log(len(encoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_interleaves_0.append( fec.interleave( output_size, fec.get_encoder_output_size(encoder_list_0[0]))) ################################################## # Connections ################################################## rootcount = 0 branchcount = 1 for i in range(int(math.log(len(encoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.fec_deinterleaves_0[branchcount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.fec_deinterleaves_0[branchcount + 1], 0)) rootcount += 1 branchcount += 2 codercount = 0 for i in range(len(encoder_list_0) / 2): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.generic_encoders_0[codercount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.generic_encoders_0[codercount + 1], 0)) rootcount += 1 codercount += 2 rootcount = 0 branchcount = 1 for i in range(int(math.log(len(encoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_interleaves_0[branchcount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.fec_interleaves_0[branchcount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1 branchcount += 2 codercount = 0 for i in range(len(encoder_list_0) / 2): self.connect((self.generic_encoders_0[codercount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.generic_encoders_0[codercount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1 codercount += 2 if ((len(self.encoder_list_0)) > 1): self.connect((self, 0), (self.fec_deinterleaves_0[0], 0)) self.connect((self.fec_interleaves_0[0], 0), (self, 0)) else: self.connect((self, 0), (self.generic_encoders_0[0], 0)) self.connect((self.generic_encoders_0[0], 0), (self, 0))
def __init__(self, decoder_list_0, input_size, output_size): gr.hier_block2.__init__( self, "Capillary Threaded Decoder", gr.io_signature(1, 1, input_size * 1), gr.io_signature(1, 1, output_size * 1), ) ################################################## # Parameters ################################################## self.decoder_list_0 = decoder_list_0 ################################################## # Variables ################################################## ################################################## # Blocks ################################################## self.fec_deinterleaves_0 = [] for i in range(int(math.log(len(decoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_deinterleaves_0.append( fec.deinterleave(input_size, fec.get_decoder_input_size(decoder_list_0[0])) ) self.generic_decoders_0 = [] for i in range(len(decoder_list_0)): self.generic_decoders_0.append(fec.decoder(decoder_list_0[i], input_size, output_size)) self.fec_interleaves_0 = [] for i in range(int(math.log(len(decoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_interleaves_0.append( fec.interleave(output_size, fec.get_decoder_output_size(decoder_list_0[0])) ) ################################################## # Connections ################################################## rootcount = 0 branchcount = 1 for i in range(int(math.log(len(decoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.fec_deinterleaves_0[branchcount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.fec_deinterleaves_0[branchcount + 1], 0)) rootcount += 1 branchcount += 2 codercount = 0 for i in range(len(decoder_list_0) / 2): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.generic_decoders_0[codercount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.generic_decoders_0[codercount + 1], 0)) rootcount += 1 codercount += 2 rootcount = 0 branchcount = 1 for i in range(int(math.log(len(decoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_interleaves_0[branchcount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.fec_interleaves_0[branchcount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1 branchcount += 2 codercount = 0 for i in range(len(decoder_list_0) / 2): self.connect((self.generic_decoders_0[codercount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.generic_decoders_0[codercount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1 codercount += 2 if (len(self.decoder_list_0)) > 1: self.connect((self, 0), (self.fec_deinterleaves_0[0], 0)) self.connect((self.fec_interleaves_0[0], 0), (self, 0)) else: self.connect((self, 0), (self.generic_decoders_0[0], 0)) self.connect((self.generic_decoders_0[0], 0), (self, 0))
def __init__(self, encoder_list_0, input_size=gr.sizeof_char, output_size=gr.sizeof_float): gr.hier_block2.__init__( self, "Capillary Threaded Encoder", gr.io_signature(1, 1, input_size), gr.io_signature(1, 1, output_size), ) ################################################## # Parameters ################################################## self.encoder_list_0 = encoder_list_0 ################################################## # Variables ################################################## ################################################## # Blocks ################################################## self.fec_deinterleaves_0 = []; for i in range(int(math.log(len(encoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_deinterleaves_0.append(fec.deinterleave(input_size, fec.get_encoder_input_size(encoder_list_0[0]))) self.generic_encoders_0 = []; for i in range(len(encoder_list_0)): self.generic_encoders_0.append(fec.encoder(encoder_list_0[i], input_size, output_size)) self.fec_interleaves_0 = []; for i in range(int(math.log(len(encoder_list_0), 2))): for j in range(int(math.pow(2, i))): self.fec_interleaves_0.append(fec.interleave(output_size, fec.get_encoder_output_size(encoder_list_0[0]))) ################################################## # Connections ################################################## rootcount = 0; branchcount = 1; for i in range(int(math.log(len(encoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.fec_deinterleaves_0[branchcount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.fec_deinterleaves_0[branchcount + 1], 0)) rootcount += 1; branchcount += 2; codercount = 0; for i in range(len(encoder_list_0)/2): self.connect((self.fec_deinterleaves_0[rootcount], 0), (self.generic_encoders_0[codercount], 0)) self.connect((self.fec_deinterleaves_0[rootcount], 1), (self.generic_encoders_0[codercount + 1], 0)) rootcount += 1; codercount += 2; rootcount = 0; branchcount = 1; for i in range(int(math.log(len(encoder_list_0), 2)) - 1): for j in range(int(math.pow(2, i))): self.connect((self.fec_interleaves_0[branchcount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.fec_interleaves_0[branchcount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1; branchcount += 2; codercount = 0; for i in range(len(encoder_list_0)/2): self.connect((self.generic_encoders_0[codercount], 0), (self.fec_interleaves_0[rootcount], 0)) self.connect((self.generic_encoders_0[codercount + 1], 0), (self.fec_interleaves_0[rootcount], 1)) rootcount += 1; codercount += 2; if ((len(self.encoder_list_0)) > 1): self.connect((self, 0), (self.fec_deinterleaves_0[0], 0)) self.connect((self.fec_interleaves_0[0], 0), (self, 0)) else: self.connect((self, 0), (self.generic_encoders_0[0], 0)) self.connect((self.generic_encoders_0[0], 0), (self, 0))