def __init__(self, data=[ [], ], fft_len=64, cp_len=16, nofdm_symbols=10, nofdm_frames=1, ofdm_symbol_scale=1, constellation=digital.constellation_bpsk(), occupied_carriers=(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27), ), pilot_carriers=((-21, -7, 7, 21), ), pilot_symbols=tuple([ (1, -1, 1, -1), ]), scale=1.0, seq_seed=42, debug=False): gr.hier_block2.__init__( self, "ofdm_create_frames_bc", gr.io_signature(0, 0, 0), # Input signature gr.io_signature(1, 1, gr.sizeof_gr_complex)) # Output signature # ===================================================================== # Generate class-members # ===================================================================== self._def_occupied_carriers = occupied_carriers self._def_pilot_carriers = pilot_carriers self._def_pilot_symbols = pilot_symbols self._seq_seed = seq_seed self.data = data self.fft_len = fft_len self.cp_len = cp_len self.ofdm_symbol_scale = ofdm_symbol_scale self.constellation = constellation self.packet_len_tag = "packet_length" self.frame_length_tag_key = "frame_length" self.nofdm_symbols = nofdm_symbols self.nofdm_frames = nofdm_frames self.scale = scale self.debug = debug # ===================================================================== # Create data to convert into OFDM-Frames # ===================================================================== random.seed(self._seq_seed) self.data_len = utils.ofdm_get_data_len( nofdm_symbols=self.nofdm_symbols, noccupied_carriers=len(self._def_occupied_carriers[0]), constellation=constellation) if debug == True: print 'Frames: {}'.format(self.nofdm_frames) print 'Länge: {}'.format(self.data_len) (data_tosend, tags) = packet_utils.packets_to_vectors(self.data, self.packet_len_tag) # =================================================================== # Create all blocks # =================================================================== self.data_source = blocks.vector_source_b(data=data_tosend, vlen=1, tags=tags, repeat=False) self.payload_unpack = blocks.repack_bits_bb( k=8, l=self.constellation.bits_per_symbol(), len_tag_key=self.packet_len_tag) self.payload_mod = digital.chunks_to_symbols_bc( symbol_table=self.constellation.points()) self.allocator = digital.ofdm_carrier_allocator_cvc( fft_len=self.fft_len, occupied_carriers=self._def_occupied_carriers, pilot_carriers=self._def_pilot_carriers, pilot_symbols=self._def_pilot_symbols, sync_words=[ utils.ofdm_make_sync_word1(self.fft_len, self._def_occupied_carriers, self._def_pilot_carriers), utils.ofdm_make_sync_word2(self.fft_len, self._def_occupied_carriers, self._def_pilot_carriers), ], len_tag_key=self.packet_len_tag) self.ffter = fft.fft_vcc(fft_size=self.fft_len, forward=False, window=(), shift=True) self.scale = mimoots.ofdm_scale_symbol_vcvc(symbol_len=self.fft_len, scale=self.scale) self.cyclic_prefixer = digital.ofdm_cyclic_prefixer( input_size=self.fft_len, output_size=self.fft_len + cp_len, rolloff_len=0, len_tag_key=self.packet_len_tag) # =================================================================== # Connect all blocks # =================================================================== self.connect(self.data_source, self.payload_unpack, self.payload_mod, self.allocator, self.ffter, self.scale, self.cyclic_prefixer, self) #self.connect( # self.data_source, self.payload_mod, self.payload_unpack, # self.allocator, self.ffter, self.scale, self.cyclic_prefixer, # self #) # =================================================================== # Debug-Output # =================================================================== if self.debug == True: self.connect( self.data_source, blocks.file_sink(gr.sizeof_char, 'create-data_source.dat')) self.connect( self.payload_unpack, blocks.file_sink(gr.sizeof_char, 'create-payload_unpack.dat')) self.connect( self.payload_mod, blocks.file_sink(gr.sizeof_gr_complex, 'create-payload_mod.dat')) self.connect( self.allocator, blocks.file_sink(self.fft_len * gr.sizeof_gr_complex, 'create-allocator.dat')) self.connect( self.ffter, blocks.file_sink(self.fft_len * gr.sizeof_gr_complex, 'create-ffter.dat')) self.connect( self.scale, blocks.file_sink(self.fft_len * gr.sizeof_gr_complex, 'create-scale.dat')) self.connect( self.cyclic_prefixer, blocks.file_sink(gr.sizeof_gr_complex, 'create-cyclic_prefixer.dat'))
def main(): #self.data = ( [[random.randint(0,255) for x in xrange(self.data_len)] \ # +50*[0,],] ) #self.data = [[0 for x in xrange(self.data_len)],] \ # +self.nofdm_frames*[[random.randint(0,255) \ # for x in xrange(self.data_len)],] #self.data = self.nofdm_frames*[[x for x in xrange(self.data_len)],] \ # + [50*[0,],] args = get_arguments() constellation = { 1: digital.constellation_bpsk(), 2: digital.constellation_qpsk(), 3: digital.constellation_8psk(), } packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 occupied_carriers = (range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27), ) pilot_carriers = ((-21, -7, 7, 21), ) pilot_symbols = tuple([ (1, -1, 1, -1), ]) data_len = utils.ofdm_get_data_len(nofdm_symbols=args.nsymbols, noccupied_carriers=len( occupied_carriers[0]), constellation=constellation[args.bits]) data0 = args.nframes * [ [1 for x in xrange(data_len)], ] data1 = args.nframes * [ [2 for x in xrange(data_len)], ] # sometimes Schmidl-Cox-Correlator ignores first frame # so a dummy-frame is a good idea if args.dummy_frame == True: data0.insert(0, data_len * [0]) data1.insert(0, data_len * [0]) # if file-output GNURadio needs extra frame at the and to loop over all # OFDM-Frames before, last OFDM-Frame is ignored # not so in case of using UHD-devices because there exists incoming # input-data all the time if args.freq == None: data0.append(data_len * [0]) data1.append(data_len * [0]) (data0_tosend, tags0) = packet_utils.packets_to_vectors(data0, packet_len_tag) (data1_tosend, tags1) = packet_utils.packets_to_vectors(data1, packet_len_tag) tb = gr.top_block() data_source0 = blocks.vector_source_b(data=data0_tosend, vlen=1, tags=tags0, repeat=False) data_source1 = blocks.vector_source_b(data=data1_tosend, vlen=1, tags=tags1, repeat=False) ofdm_mapper0 = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag) ofdm_mapper1 = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag) ofdm_framer0 = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag) ofdm_framer1 = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag) ofdm_basebander0 = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag) ofdm_basebander1 = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag) if args.freq == None: data_sink = mimoots.file_sink2( itemsize=(gr.sizeof_gr_complex, gr.sizeof_gr_complex), filename=('1.'.join(args.to_file.rsplit('.', 1)), '2.'.join(args.to_file.rsplit('.', 1)))) else: data_sink = mimoots.uhd_sink2(freq=args.freq, gain=args.gain) tb.connect(data_source0, ofdm_mapper0, ofdm_framer0, ofdm_basebander0, (data_sink, 0)) tb.connect(data_source1, ofdm_mapper1, ofdm_framer1, ofdm_basebander1, (data_sink, 1)) tb.run() time.sleep(5)
def main(): #self.data = ( [[random.randint(0,255) for x in xrange(self.data_len)] # +50*[0,],] ) #self.data = [[0 for x in xrange(self.data_len)],] \ # + self.nofdm_frames*[[random.randint(0,255) \ # for x in xrange(self.data_len)],] #self.data = self.nofdm_frames*[[x for x in xrange(self.data_len)],]\ # + [50*[0,],] args = get_arguments() constellation = { 1:digital.constellation_bpsk(), 2:digital.constellation_qpsk(), 3:digital.constellation_8psk(), } packet_len_tag = "packet_length" #fft_len = 64 #cp_len = 16 #occupied_carriers = (range(-26, -21) + range(-20, -7) + # range(-6, 0) + range(1, 7) + # range(8, 21) + range(22, 27),) #pilot_carriers = ((-21, -7, 7, 21),) #pilot_symbols = tuple([(1, -1, 1, -1),]) fft_len = 16 cp_len = 4 occupied_carriers = ((-5, -4, -2, -1, 1, 2, 4, 5),) pilot_carriers = ((-3, 3),) pilot_symbols = tuple([(1, -1),]) data_len = utils.ofdm_get_data_len( nofdm_symbols=args.nsymbols, noccupied_carriers=len(occupied_carriers[0]), constellation=constellation[args.bits] ) data = args.nframes*[[39 for x in xrange(data_len)],] # sometimes Schmidl-Cox-Correlator ignores first frame # so a dummy-frame is a good idea if args.dummy_frame_start == True: data.insert(0, data_len*[0]) # if file-output GNURadio needs extra frame at the and to loop over all # OFDM-Frames before, last OFDM-Frame is ignored # not so in case of using UHD-devices because there exists incoming # input-data all the time if args.dummy_frame_end == True: data.append(data_len*[0]) tb = gr.top_block() (data_tosend, tags) = packet_utils.packets_to_vectors( data, packet_len_tag ) data_source = blocks.vector_source_b( data=data_tosend, vlen=1, tags=tags, repeat=False ) ofdm_mapper = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag, verbose=args.verbose ) ofdm_framer = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag, verbose=args.verbose ) ofdm_basebander = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag, verbose=args.verbose ) if args.freq == None: data_sink = blocks.file_sink( itemsize=gr.sizeof_gr_complex, filename=args.to_file ) else: data_sink = mimoots.uhd_sink(freq=args.freq, gain=args.gain) tb.connect(data_source, ofdm_mapper, ofdm_framer, ofdm_basebander, data_sink) tb.run() # need to wait until the GNURadio-graph is finished time.sleep(5)
def main(): args = get_arguments() constellation = { 1: digital.constellation_bpsk(), 2: digital.constellation_qpsk(), 3: digital.constellation_8psk(), } packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 occupied_carriers = (range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27), ) pilot_carriers = ((-21, -7, 7, 21), ) pilot_symbols = tuple([ (1, -1, 1, -1), ]) tb = gr.top_block() if args.freq == None: data_source = blocks.file_source(itemsize=gr.sizeof_gr_complex, filename=args.from_file) else: data_source = mimoots.uhd_source(freq=args.freq, gain=args.gain) skip = blocks.skiphead(itemsize=gr.sizeof_gr_complex, nitems_to_skip=args.skiphead) #ofdm_frames = mimoots.ofdm_receive_frames_cb( # nofdm_frames=args.nframes, # nofdm_symbols=args.nsymbols, # constellation=constellation[args.bits], # occupied_carriers=occupied_carriers, # pilot_carriers=pilot_carriers, # pilot_symbols=pilot_symbols, # debug=args.debug #) ofdm_framer = mimoots.ofdm_basebandsignal_to_frames_cvc( fft_len=fft_len, cp_len=cp_len, nofdm_symbols=args.nsymbols) ofdm_symboler = mimoots.ofdm_frame_to_symbols_vcc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, constellation=constellation[args.bits], nofdm_symbols=args.nsymbols, packet_len_tag=packet_len_tag) ofdm_demapper = mimoots.ofdm_symbol_demapper_cb( constellation=constellation[args.bits], packet_len_tag=packet_len_tag) data_sink = blocks.vector_sink_b() tb.connect(data_source, skip, ofdm_framer, ofdm_symboler, ofdm_demapper, data_sink) tb.run() random.seed(42) #data_expected = tuple(args.nframes*[random.randint(0,255) for x in xrange(args.bits*60)]) data_len = utils.ofdm_get_data_len(nofdm_symbols=args.nsymbols, noccupied_carriers=len( occupied_carriers[0]), constellation=constellation[args.bits]) if args.dummy_frame == True: data_expected = tuple(data_len * [0] + args.nframes * [1 for x in xrange(data_len)]) else: data_expected = tuple(args.nframes * [1 for x in xrange(data_len)]) data = data_sink.data() # TODO: args.bits*60=datalen, 60 depends on len of data_carriers len_data = [] len_data_expected = [] ignored_correlations = [] biterrors_complete = [] biterrorrate_complete = [] biterror = 0 index = 0 for i, j in itertools.izip_longest(data, data_expected): index += 1 if i != j: if i is None or j is None: biterror += 8 else: #print("Index: {} data: {} expected: {}".format(index, i, j)) biterror += bin(i ^ j).count("1") bits = args.bits len_data = len(data) len_data_expected = len(data_expected) ignored_correlations = (len(data_expected) - len(data)) / (args.bits * 60) biterrors_complete = float(biterror) / float(8 * len(data_expected)) biterrorrate_complete = float(biterror) / float(8 * len(data_expected)) print 'len(data): {}'.format(len_data) print 'len(data_expected): {}'.format(len_data_expected) print 'Correlation didn\'t work: {} times'.format(ignored_correlations) print 'biterrors: {} biterrorrate: {}'.format(biterror, biterrorrate_complete)
def main(): args = get_arguments() constellation = { 1:digital.constellation_bpsk(), 2:digital.constellation_qpsk(), 3:digital.constellation_8psk(), } packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 occupied_carriers=(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),) pilot_carriers=((-21, -7, 7, 21),) pilot_symbols=tuple([(1, -1, 1, -1),]) tb = gr.top_block() if args.freq == None: data_source = blocks.file_source( itemsize=gr.sizeof_gr_complex, filename=args.from_file ) else: data_source = mimoots.uhd_source(freq=args.freq, gain=args.gain) skip = blocks.skiphead( itemsize=gr.sizeof_gr_complex, nitems_to_skip=args.skiphead ) #ofdm_frames = mimoots.ofdm_receive_frames_cb( # nofdm_frames=args.nframes, # nofdm_symbols=args.nsymbols, # constellation=constellation[args.bits], # occupied_carriers=occupied_carriers, # pilot_carriers=pilot_carriers, # pilot_symbols=pilot_symbols, # debug=args.debug #) ofdm_framer = mimoots.ofdm_basebandsignal_to_frames_cvc( fft_len=fft_len, cp_len=cp_len, nofdm_symbols=args.nsymbols ) ofdm_symboler = mimoots.ofdm_frame_to_symbols_vcc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, constellation=constellation[args.bits], nofdm_symbols=args.nsymbols, packet_len_tag=packet_len_tag ); ofdm_demapper = mimoots.ofdm_symbol_demapper_cb( constellation=constellation[args.bits], packet_len_tag=packet_len_tag ); data_sink = blocks.vector_sink_b() tb.connect(data_source, skip, ofdm_framer, ofdm_symboler, ofdm_demapper, data_sink) tb.run() random.seed(42) #data_expected = tuple(args.nframes*[random.randint(0,255) for x in xrange(args.bits*60)]) data_len = utils.ofdm_get_data_len( nofdm_symbols=args.nsymbols, noccupied_carriers=len(occupied_carriers[0]), constellation=constellation[args.bits] ) if args.dummy_frame == True: data_expected = tuple(data_len*[0] + args.nframes*[1 for x in xrange(data_len)]) else: data_expected = tuple(args.nframes*[1 for x in xrange(data_len)]) data = data_sink.data() # TODO: args.bits*60=datalen, 60 depends on len of data_carriers len_data = [] len_data_expected = [] ignored_correlations = [] biterrors_complete = [] biterrorrate_complete = [] biterror = 0 index = 0 for i,j in itertools.izip_longest(data, data_expected): index += 1 if i != j: if i is None or j is None: biterror += 8 else: #print("Index: {} data: {} expected: {}".format(index, i, j)) biterror += bin(i^j).count("1") bits = args.bits len_data = len(data) len_data_expected = len(data_expected) ignored_correlations = (len(data_expected)-len(data))/(args.bits*60) biterrors_complete = float(biterror)/float(8*len(data_expected)) biterrorrate_complete = float(biterror)/float(8*len(data_expected)) print 'len(data): {}'.format(len_data) print 'len(data_expected): {}'.format(len_data_expected) print 'Correlation didn\'t work: {} times'.format(ignored_correlations) print 'biterrors: {} biterrorrate: {}'.format(biterror, biterrorrate_complete)
def main(): args = get_arguments() constellation = { 1:digital.constellation_bpsk(), 2:digital.constellation_qpsk(), 3:digital.constellation_8psk(), } occupied_carriers=(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),) pilot_carriers=((-21, -7, 7, 21),) pilot_symbols=tuple([(1, -1, 1, -1),]) packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 tb = gr.top_block() if args.freq == None: data_source = mimoots.file_source2( itemsize=(gr.sizeof_gr_complex, gr.sizeof_gr_complex), filename=( '1.'.join(args.from_file.rsplit('.',1)), '2.'.join(args.from_file.rsplit('.',1)) ) ) else: data_source = mimoots.uhd_source(freq=args.freq, gain=args.gain) skip0 = blocks.skiphead( itemsize=gr.sizeof_gr_complex, nitems_to_skip=args.skiphead ) skip1 = blocks.skiphead( itemsize=gr.sizeof_gr_complex, nitems_to_skip=args.skiphead ) #ofdm_frames1 = mimoots.ofdm_receive_frames_cb( # nofdm_frames=args.nframes, # nofdm_symbols=args.nsymbols, # constellation=constellation[args.bits], # occupied_carriers=occupied_carriers, # pilot_carriers=pilot_carriers, # pilot_symbols=pilot_symbols, # debug=args.debug #) #ofdm_frames2 = mimoots.ofdm_receive_frames_cb( # nofdm_frames=args.nframes, # nofdm_symbols=args.nsymbols, # constellation=constellation[args.bits], # occupied_carriers=occupied_carriers, # pilot_carriers=pilot_carriers, # pilot_symbols=pilot_symbols, # debug=args.debug #) ofdm_framer0 = mimoots.ofdm_basebandsignal_to_frames_cvc( fft_len=fft_len, cp_len=cp_len, nofdm_symbols=args.nsymbols ) ofdm_framer1 = mimoots.ofdm_basebandsignal_to_frames_cvc( fft_len=fft_len, cp_len=cp_len, nofdm_symbols=args.nsymbols ) ofdm_symboler0 = mimoots.ofdm_frame_to_symbols_vcc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, constellation=constellation[args.bits], nofdm_symbols=args.nsymbols, packet_len_tag=packet_len_tag ) ofdm_symboler1 = mimoots.ofdm_frame_to_symbols_vcc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, constellation=constellation[args.bits], nofdm_symbols=args.nsymbols, packet_len_tag=packet_len_tag ) ofdm_demapper0 = mimoots.ofdm_symbol_demapper_cb( constellation=constellation[args.bits], packet_len_tag=packet_len_tag ) ofdm_demapper1 = mimoots.ofdm_symbol_demapper_cb( constellation=constellation[args.bits], packet_len_tag=packet_len_tag ) data_sink0 = blocks.vector_sink_b() data_sink1 = blocks.vector_sink_b() tb.connect((data_source, 0), skip0, ofdm_framer0, ofdm_symboler0, ofdm_demapper0, data_sink0) tb.connect((data_source, 1), skip1, ofdm_framer1, ofdm_symboler1, ofdm_demapper1, data_sink1) tb.run() random.seed(42) #data_expected = tuple(args.nframes*[random.randint(0,255) for x in xrange(args.bits*60)]) data_len = utils.ofdm_get_data_len( nofdm_symbols=args.nsymbols, noccupied_carriers=len(occupied_carriers[0]), constellation=constellation[args.bits] ) if args.dummy_frame == True: data_expected = [ tuple(data_len*[0] + args.nframes*[1 for x in xrange(data_len)]), tuple(data_len*[0] + args.nframes*[2 for x in xrange(data_len)]) ] else: data_expected = [ tuple(args.nframes*[1 for x in xrange(data_len)]), tuple(args.nframes*[2 for x in xrange(data_len)]) ] data = [data_sink0.data(), data_sink1.data()] len_data = [] len_data_expected = [] ignored_correlations = [] biterrors_complete = [] biterrorrate_complete = [] for data_index in range(2): biterror = 0 index = 0 for i,j in itertools.izip_longest(data[data_index], data_expected[data_index]): index += 1 if i != j: if i is None or j is None: biterror += 8 else: #print("Index: {} data: {} expected: {}".format(index, i, j)) biterror += bin(i^j).count("1") bits = args.bits len_data = len(data[data_index]) len_data_expected = len(data_expected[data_index]) ignored_correlations = (len(data_expected[data_index])-len(data[data_index]))/(args.bits*60) biterrors_complete = float(biterror)/float(8*len(data_expected[data_index])) biterrorrate_complete = float(biterror)/float(8*len(data_expected[data_index])) print '{}:len(data): {}'.format(data_index, len_data) print '{}:len(data_expected): {}'.format(data_index, len_data_expected) print '{}:Correlation didn\'t work: {} times'.format(data_index, ignored_correlations) print '{}:biterrors: {} biterrorrate: {}'.format(data_index, biterror, biterrorrate_complete) print "\n"
def main(): args = get_arguments() constellation = { 1:digital.constellation_bpsk(), 2:digital.constellation_qpsk(), 3:digital.constellation_8psk(), } packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 occupied_carriers=(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),) pilot_carriers=((-21, -7, 7, 21),) pilot_symbols=tuple([(1, -1, 1, -1),]) data_len = utils.ofdm_get_data_len( nofdm_symbols=args.nsymbols, noccupied_carriers=len(occupied_carriers[0]), constellation=constellation[args.bits] ) data = args.nframes*[[1 for x in xrange(data_len)],] tb = gr.top_block() (data_tosend, tags) = packet_utils.packets_to_vectors( data, packet_len_tag ) data_source = blocks.vector_source_b( data=data_tosend, vlen=1, tags=tags, repeat=False ) ofdm_mapper = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag ) ofdm_framer = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag ) ofdm_basebander = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag ) shifter = blocks.delay( itemsize=gr.sizeof_gr_complex, delay=(fft_len+cp_len)*(3) ) xor_source = blocks.vector_source_c( data=5*[0]+(3*(fft_len+cp_len)-10)*[1]+5*[0]+3*(fft_len+cp_len)*[0], repeat=True ) xor1 = blocks.multiply_cc() xor2 = blocks.multiply_cc() if args.freq == None: data_sink = mimoots.file_sink2( itemsize=(gr.sizeof_gr_complex, gr.sizeof_gr_complex), filename=( '1.'.join(args.to_file.rsplit('.',1)), '2.'.join(args.to_file.rsplit('.',1)) ) ) else: data_sink = mimoots.uhd_sink2(freq=args.freq, gain=args.gain) tb.connect(xor_source, (xor1, 1)) tb.connect(xor_source, (xor2, 1)) tb.connect(data_source, ofdm_mapper, ofdm_framer, ofdm_basebander) tb.connect(ofdm_basebander, (xor1, 0), (data_sink, 0)) tb.connect(ofdm_basebander, (xor2, 0), shifter, (data_sink, 1)) tb.run() time.sleep(5)
def main(): #self.data = ( [[random.randint(0,255) for x in xrange(self.data_len)] # +50*[0,],] ) #self.data = [[0 for x in xrange(self.data_len)],] \ # + self.nofdm_frames*[[random.randint(0,255) \ # for x in xrange(self.data_len)],] #self.data = self.nofdm_frames*[[x for x in xrange(self.data_len)],]\ # + [50*[0,],] args = get_arguments() constellation = { 1: digital.constellation_bpsk(), 2: digital.constellation_qpsk(), 3: digital.constellation_8psk(), } packet_len_tag = "packet_length" #fft_len = 64 #cp_len = 16 #occupied_carriers = (range(-26, -21) + range(-20, -7) + # range(-6, 0) + range(1, 7) + # range(8, 21) + range(22, 27),) #pilot_carriers = ((-21, -7, 7, 21),) #pilot_symbols = tuple([(1, -1, 1, -1),]) fft_len = 16 cp_len = 4 occupied_carriers = ((-5, -4, -2, -1, 1, 2, 4, 5), ) pilot_carriers = ((-3, 3), ) pilot_symbols = tuple([ (1, -1), ]) data_len = utils.ofdm_get_data_len(nofdm_symbols=args.nsymbols, noccupied_carriers=len( occupied_carriers[0]), constellation=constellation[args.bits]) data = args.nframes * [ [39 for x in xrange(data_len)], ] # sometimes Schmidl-Cox-Correlator ignores first frame # so a dummy-frame is a good idea if args.dummy_frame_start == True: data.insert(0, data_len * [0]) # if file-output GNURadio needs extra frame at the and to loop over all # OFDM-Frames before, last OFDM-Frame is ignored # not so in case of using UHD-devices because there exists incoming # input-data all the time if args.dummy_frame_end == True: data.append(data_len * [0]) tb = gr.top_block() (data_tosend, tags) = packet_utils.packets_to_vectors(data, packet_len_tag) data_source = blocks.vector_source_b(data=data_tosend, vlen=1, tags=tags, repeat=False) ofdm_mapper = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag, verbose=args.verbose) ofdm_framer = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag, verbose=args.verbose) ofdm_basebander = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag, verbose=args.verbose) if args.freq == None: data_sink = blocks.file_sink(itemsize=gr.sizeof_gr_complex, filename=args.to_file) else: data_sink = mimoots.uhd_sink(freq=args.freq, gain=args.gain) tb.connect(data_source, ofdm_mapper, ofdm_framer, ofdm_basebander, data_sink) tb.run() # need to wait until the GNURadio-graph is finished time.sleep(5)
def main(): args = get_arguments() constellation = { 1: digital.constellation_bpsk(), 2: digital.constellation_qpsk(), 3: digital.constellation_8psk(), } packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 occupied_carriers = (range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27), ) pilot_carriers = ((-21, -7, 7, 21), ) pilot_symbols = tuple([ (1, -1, 1, -1), ]) data_len = utils.ofdm_get_data_len(nofdm_symbols=args.nsymbols, noccupied_carriers=len( occupied_carriers[0]), constellation=constellation[args.bits]) data = args.nframes * [ [1 for x in xrange(data_len)], ] tb = gr.top_block() (data_tosend, tags) = packet_utils.packets_to_vectors(data, packet_len_tag) data_source = blocks.vector_source_b(data=data_tosend, vlen=1, tags=tags, repeat=False) ofdm_mapper = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag) ofdm_framer = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag) ofdm_basebander = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag) shifter = blocks.delay(itemsize=gr.sizeof_gr_complex, delay=(fft_len + cp_len) * (3)) xor_source = blocks.vector_source_c( data=5 * [0] + (3 * (fft_len + cp_len) - 10) * [1] + 5 * [0] + 3 * (fft_len + cp_len) * [0], repeat=True) xor1 = blocks.multiply_cc() xor2 = blocks.multiply_cc() if args.freq == None: data_sink = mimoots.file_sink2( itemsize=(gr.sizeof_gr_complex, gr.sizeof_gr_complex), filename=('1.'.join(args.to_file.rsplit('.', 1)), '2.'.join(args.to_file.rsplit('.', 1)))) else: data_sink = mimoots.uhd_sink2(freq=args.freq, gain=args.gain) tb.connect(xor_source, (xor1, 1)) tb.connect(xor_source, (xor2, 1)) tb.connect(data_source, ofdm_mapper, ofdm_framer, ofdm_basebander) tb.connect(ofdm_basebander, (xor1, 0), (data_sink, 0)) tb.connect(ofdm_basebander, (xor2, 0), shifter, (data_sink, 1)) tb.run() time.sleep(5)
def main(): #self.data = ( [[random.randint(0,255) for x in xrange(self.data_len)] \ # +50*[0,],] ) #self.data = [[0 for x in xrange(self.data_len)],] \ # +self.nofdm_frames*[[random.randint(0,255) \ # for x in xrange(self.data_len)],] #self.data = self.nofdm_frames*[[x for x in xrange(self.data_len)],] \ # + [50*[0,],] args = get_arguments() constellation = { 1:digital.constellation_bpsk(), 2:digital.constellation_qpsk(), 3:digital.constellation_8psk(), } packet_len_tag = "packet_length" fft_len = 64 cp_len = 16 occupied_carriers=(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),) pilot_carriers=((-21, -7, 7, 21),) pilot_symbols=tuple([(1, -1, 1, -1),]) data_len = utils.ofdm_get_data_len( nofdm_symbols=args.nsymbols, noccupied_carriers=len(occupied_carriers[0]), constellation=constellation[args.bits] ) data0 = args.nframes*[[1 for x in xrange(data_len)],] data1 = args.nframes*[[2 for x in xrange(data_len)],] # sometimes Schmidl-Cox-Correlator ignores first frame # so a dummy-frame is a good idea if args.dummy_frame == True: data0.insert(0, data_len*[0]) data1.insert(0, data_len*[0]) # if file-output GNURadio needs extra frame at the and to loop over all # OFDM-Frames before, last OFDM-Frame is ignored # not so in case of using UHD-devices because there exists incoming # input-data all the time if args.freq == None: data0.append(data_len*[0]) data1.append(data_len*[0]) (data0_tosend, tags0) = packet_utils.packets_to_vectors( data0, packet_len_tag ) (data1_tosend, tags1) = packet_utils.packets_to_vectors( data1, packet_len_tag ) tb = gr.top_block() data_source0 = blocks.vector_source_b( data=data0_tosend, vlen=1, tags=tags0, repeat=False ) data_source1 = blocks.vector_source_b( data=data1_tosend, vlen=1, tags=tags1, repeat=False ) ofdm_mapper0 = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag ) ofdm_mapper1 = mimoots.ofdm_symbol_mapper_bc( constellation=constellation[args.bits], packet_len_tag=packet_len_tag ) ofdm_framer0 = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag ) ofdm_framer1 = mimoots.ofdm_symbols_to_frame_cvc( fft_len=fft_len, cp_len=cp_len, occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, packet_len_tag=packet_len_tag ) ofdm_basebander0 = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag ) ofdm_basebander1 = mimoots.ofdm_frames_to_basebandsignal_vcc( fft_len=fft_len, cp_len=cp_len, packet_len_tag=packet_len_tag ) if args.freq == None: data_sink = mimoots.file_sink2( itemsize=(gr.sizeof_gr_complex, gr.sizeof_gr_complex), filename=( '1.'.join(args.to_file.rsplit('.',1)), '2.'.join(args.to_file.rsplit('.',1)) ) ) else: data_sink = mimoots.uhd_sink2(freq=args.freq, gain=args.gain) tb.connect(data_source0, ofdm_mapper0, ofdm_framer0, ofdm_basebander0, (data_sink, 0)) tb.connect(data_source1, ofdm_mapper1, ofdm_framer1, ofdm_basebander1, (data_sink, 1)) tb.run() time.sleep(5)