def __init__(self, receiver, spreadingFactor = 7, samp_rate = 1e6, capture_freq = 868.0e6, target_freq = 868.1e6, center_offset = 0, threshold = 0.01): ################################################## # Variables # ################################################## self.target_freq = target_freq self.sf = spreadingFactor # 6 7 8 12 self.samp_rate = samp_rate self.capture_freq = capture_freq self.bw = 125e3 #self.symbols_per_sec = self.bw / (2**self.sf) self.offset = -(self.capture_freq - self.target_freq) #self.bitrate = self.sf * (1 / (2**self.sf / self.bw )) # self.crc = True # self.pwr = 1 # self.codingRate = codingRate # 4/5 4/6 4/7 self.threshold = threshold # For FFT, determine Center Frequency Offset first, then set here. # For RN2483, usually -14.1e3 self.center_offset = center_offset ################################################## # Blocks # ################################################## self.tb = gr.top_block () self.source = receiver self.lora_lora_receiver_0 = lora.lora_receiver(self.samp_rate, self.capture_freq, ([868.1e6]), self.sf, self.samp_rate, self.threshold) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, self.samp_rate, True) self.freq_xlating_fir_filter_0 = filter.freq_xlating_fir_filter_ccc(1, (firdes.low_pass(1, self.samp_rate, 200000, 50000)), self.center_offset, self.samp_rate) self.tb.connect( (self.source, 0), (self.blocks_throttle_0, 0)) self.tb.connect( (self.blocks_throttle_0, 0), (self.freq_xlating_fir_filter_0, 0)) self.tb.connect( (self.freq_xlating_fir_filter_0, 0), (self.lora_lora_receiver_0, 0))
def __init__(self, sample_file, sample_rate, capture_freq, lc): gr.top_block.__init__(self, "Lora Receive File, No GUI") ################################################## # Variables ################################################## self.internal_sample_rate = 1e6 ################################################## # Blocks ################################################## self.message_socket_sink = lora.message_socket_sink( '127.0.0.1', 40868, False, False) self.lora_receiver = lora.lora_receiver(sample_rate, capture_freq, ([lc.freq]), lc.sf, self.internal_sample_rate, lc.implicit, lc.cr_num, lc.crc) self.blocks_throttle = blocks.throttle(gr.sizeof_gr_complex, sample_rate, True) self.blocks_file_source = blocks.file_source(gr.sizeof_gr_complex, sample_file, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_receiver, 'frames'), (self.message_socket_sink, 'in')) self.connect((self.blocks_file_source, 0), (self.blocks_throttle, 0)) self.connect((self.blocks_throttle, 0), (self.lora_receiver, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Irec2018 Gr") ################################################## # Variables ################################################## self.spread = spread = 7 self.samp_rate = samp_rate = 1e6 self.offset = offset = 0 self.capture_freq = capture_freq = 915e6 self.bandwidth = bandwidth = 125000 ################################################## # Blocks ################################################## self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=30, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.rtlsdr_source_0 = osmosdr.source(args="numchan=" + str(1) + " " + '') self.rtlsdr_source_0.set_sample_rate(samp_rate) self.rtlsdr_source_0.set_center_freq(capture_freq, 0) self.rtlsdr_source_0.set_freq_corr(0, 0) self.rtlsdr_source_0.set_dc_offset_mode(0, 0) self.rtlsdr_source_0.set_iq_balance_mode(0, 0) self.rtlsdr_source_0.set_gain_mode(False, 0) self.rtlsdr_source_0.set_gain(10, 0) self.rtlsdr_source_0.set_if_gain(20, 0) self.rtlsdr_source_0.set_bb_gain(20, 0) self.rtlsdr_source_0.set_antenna('', 0) self.rtlsdr_source_0.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink( '127.0.0.1', 40868, 0) self.lora_lora_receiver_0 = lora.lora_receiver( samp_rate, capture_freq, (capture_freq + offset, ), bandwidth, spread, False, 4, True, False, False, 1, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.rtlsdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.rtlsdr_source_0, 0), (self.wxgui_fftsink2_0, 0))
def __init__(self, num_messages, sample_rate=1000000, freq_offset=10000, sf=7, name="rtl-sdr"): Thread.__init__(self) self.setDaemon(True) self.num_messages = num_messages self.sample_rate = sample_rate self.freq_offset = freq_offset self.frequency = 868e6 self.name = name self.data = {'payloads': [], 'snrs': []} # Variables self.host = "127.0.0.1" self.port = 40868 # Setup socket self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server.bind((self.host, self.port)) self.server.settimeout(1) # Build flowgraph self.tb = gr.top_block() self.rtlsdr_source = osmosdr.source(args="numchan=" + str(1) + " " + '') self.rtlsdr_source.set_sample_rate(self.sample_rate) self.rtlsdr_source.set_center_freq(self.frequency, 0) self.rtlsdr_source.set_freq_corr(0, 0) self.rtlsdr_source.set_dc_offset_mode(0, 0) self.rtlsdr_source.set_iq_balance_mode(0, 0) self.rtlsdr_source.set_gain_mode(False, 0) self.rtlsdr_source.set_gain(10, 0) self.rtlsdr_source.set_if_gain(20, 0) self.rtlsdr_source.set_bb_gain(20, 0) self.rtlsdr_source.set_antenna('', 0) self.rtlsdr_source.set_bandwidth(0, 0) self.freq_xlating_fir_filter = filter.freq_xlating_fir_filter_ccc( 1, (firdes.low_pass(1, self.sample_rate, 500000, 100000, firdes.WIN_HAMMING, 6.67)), self.freq_offset, self.sample_rate) self.lora_receiver = lora.lora_receiver(self.sample_rate, self.frequency, [868100000], sf, 1000000, False, 4, True) self.message_socket_sink = lora.message_socket_sink( "127.0.0.1", 40868, 0) # Make connections self.tb.connect((self.rtlsdr_source, 0), (self.freq_xlating_fir_filter, 0)) self.tb.connect((self.freq_xlating_fir_filter, 0), (self.lora_receiver, 0)) self.tb.msg_connect((self.lora_receiver, 'frames'), (self.message_socket_sink, 'in'))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive Realtime") ################################################## # Variables ################################################## self.sf = sf = 11 self.samp_rate = samp_rate = 1e6 self.bw = bw = 125000 self.target_freq = target_freq = 868.1e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.downlink = downlink = False self.decimation = decimation = 1 self.capture_freq = capture_freq = 868e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' ) self.osmosdr_source_0.set_sample_rate(samp_rate) self.osmosdr_source_0.set_center_freq(capture_freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(10, 0) self.osmosdr_source_0.set_if_gain(20, 0) self.osmosdr_source_0.set_bb_gain(20, 0) self.osmosdr_source_0.set_antenna('', 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink('127.0.0.1', 40868, 0) self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, ([target_freq]), bw, sf, False, 4, True, False, downlink, decimation, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.osmosdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.wxgui_fftsink2_1, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive Realtime") ################################################## # Variables ################################################## self.sf = sf = 11 self.samp_rate = samp_rate = 1e6 self.bw = bw = 125000 self.target_freq = target_freq = 916.8e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.downlink = downlink = False self.decimation = decimation = 1 self.capture_freq = capture_freq = 916e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' ) self.osmosdr_source_0.set_sample_rate(samp_rate) self.osmosdr_source_0.set_center_freq(capture_freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(10, 0) self.osmosdr_source_0.set_if_gain(20, 0) self.osmosdr_source_0.set_bb_gain(20, 0) self.osmosdr_source_0.set_antenna('', 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink('127.0.0.1', 40868, 0) self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, ([target_freq]), bw, sf, False, 4, True, False, downlink, decimation, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.osmosdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.wxgui_fftsink2_1, 0))
def __init__(self, target_freq, sf, udp_port, rtl_address='rtl_tcp=localhost:7373', decimation=1, capture_freq=868e6): gr.top_block.__init__(self, "Lora Receive Realtime") ################################################## # Variables ################################################## self.target_freq = target_freq self.sf = sf self.websever_address = websever_address = "127.0.0.1" self.udp_port = udp_port self.samp_rate = samp_rate = 1e6 self.rtl_address = rtl_address self.downlink = downlink = False self.decimation = decimation self.capture_freq = capture_freq self.bw = bw = 125000 ################################################## # Blocks ################################################## self.osmosdr_source_0 = osmosdr.source(args="numchan=" + str(1) + " " + rtl_address) self.osmosdr_source_0.set_sample_rate(samp_rate) self.osmosdr_source_0.set_center_freq(capture_freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(10, 0) self.osmosdr_source_0.set_if_gain(20, 0) self.osmosdr_source_0.set_bb_gain(20, 0) self.osmosdr_source_0.set_antenna('', 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink( 'webserver_address', udp_port, 0) self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, ([target_freq]), bw, sf, False, 4, True, False, downlink, decimation, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.osmosdr_source_0, 0), (self.lora_lora_receiver_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Grlora Rtlsdr") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1e6 self.offset = offset = -26e3 self.capture_freq = capture_freq = 868e6 ################################################## # Blocks ################################################## self.wxgui_fftsink2_0 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_0.win) self.rtlsdr_source_0 = osmosdr.source(args="numchan=" + str(1) + " " + '') self.rtlsdr_source_0.set_sample_rate(samp_rate) self.rtlsdr_source_0.set_center_freq(capture_freq, 0) self.rtlsdr_source_0.set_freq_corr(0, 0) self.rtlsdr_source_0.set_dc_offset_mode(0, 0) self.rtlsdr_source_0.set_iq_balance_mode(0, 0) self.rtlsdr_source_0.set_gain_mode(False, 0) self.rtlsdr_source_0.set_gain(10, 0) self.rtlsdr_source_0.set_if_gain(20, 0) self.rtlsdr_source_0.set_bb_gain(20, 0) self.rtlsdr_source_0.set_antenna('', 0) self.rtlsdr_source_0.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink() self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, ([868.1e6 + offset]), 7, 1000000, 0.002) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.rtlsdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.rtlsdr_source_0, 0), (self.wxgui_fftsink2_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive File") ################################################## # Variables ################################################## self.sf = sf = 7 self.samp_rate = samp_rate = 10e6 self.bw = bw = 200e3 self.target_freq = target_freq = 902499999.999999 self.symbols_per_sec = symbols_per_sec = bw / (2**sf) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.capture_freq = capture_freq = 902499999.999999 self.bitrate = bitrate = sf * (1 / (2**sf / bw)) ################################################## # Blocks ################################################## self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.lora_lora_receiver_0 = lora.lora_receiver(10e6, capture_freq, ([target_freq]), 7, 1000000, 0.01) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_file_source_0 = blocks.file_source( gr.sizeof_gr_complex * 1, '/home/dell/Downloads/lora-04-100.dat', False) self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.wxgui_fftsink2_1, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive File") ################################################## # Variables ################################################## self.sf = sf = 7 self.samp_rate = samp_rate = 10e6 self.bw = bw = 125000 self.target_freq = target_freq = 868.1e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.capture_freq = capture_freq = 866.0e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, ([target_freq]), bw, sf, False, 4, True, False, False, 10, False, False) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_file_source_0 = blocks.file_source( gr.sizeof_gr_complex * 1, 'counting_cr4_sf7.cfile', True) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.wxgui_fftsink2_1, 0))
def __init__(self): gr.top_block.__init__(self, "Top Block") ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1e6 self.capture_freq = capture_freq = 868e6 ################################################## # Blocks ################################################## self.zeromq_push_msg_sink_0 = zeromq.push_msg_sink( 'tcp://127.0.0.1:5002', 100) self.zeromq_pub_msg_sink_0 = zeromq.pub_msg_sink( 'tcp://127.0.0.1:5001', 100) self.rtlsdr_source_1 = osmosdr.source(args="numchan=" + str(1) + " " + 'rtl_tcp=localhost:7373') self.rtlsdr_source_1.set_sample_rate(samp_rate) self.rtlsdr_source_1.set_center_freq(capture_freq, 0) self.rtlsdr_source_1.set_freq_corr(0, 0) self.rtlsdr_source_1.set_dc_offset_mode(0, 0) self.rtlsdr_source_1.set_iq_balance_mode(0, 0) self.rtlsdr_source_1.set_gain_mode(False, 0) self.rtlsdr_source_1.set_gain(10, 0) self.rtlsdr_source_1.set_if_gain(20, 0) self.rtlsdr_source_1.set_bb_gain(20, 0) self.rtlsdr_source_1.set_antenna('', 0) self.rtlsdr_source_1.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink( '127.0.0.1', 5005, 1) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, ([868.1e6]), 125000, 7, False, 4, True, False, False, 1, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.zeromq_pub_msg_sink_0, 'in')) self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.zeromq_push_msg_sink_0, 'in')) self.connect((self.rtlsdr_source_1, 0), (self.lora_lora_receiver_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive File") ################################################## # Variables ################################################## self.sf = sf = 7 self.samp_rate = samp_rate = 10e6 self.bw = bw = 125000 self.target_freq = target_freq = 868.1e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.capture_freq = capture_freq = 866.0e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title='FFT Plot', peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, ([target_freq]), bw, sf, False, 4, True, False, False, 10, False, False) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) self.blocks_file_source_0 = blocks.file_source(gr.sizeof_gr_complex*1, 'counting_cr4_sf7.cfile', True) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.wxgui_fftsink2_1, 0))
def __init__(self, bandwidth=125000, capture_freq=868500000, decoded_out_port=40868, samp_rate=1000000, spreading_factor=12, zmq_address_iq_in='tcp://127.0.0.1:5051'): gr.top_block.__init__(self, "Zero Mq Split B") ################################################## # Parameters ################################################## self.bandwidth = bandwidth self.capture_freq = capture_freq self.decoded_out_port = decoded_out_port self.samp_rate = samp_rate self.spreading_factor = spreading_factor self.zmq_address_iq_in = zmq_address_iq_in ################################################## # Variables ################################################## self.offset = offset = 0 ################################################## # Blocks ################################################## self.zeromq_sub_source_0 = zeromq.sub_source(gr.sizeof_gr_complex, 1, zmq_address_iq_in, -1, False, -1) self.lora_message_socket_sink_0 = lora.message_socket_sink( '127.0.0.1', decoded_out_port, 0) self.lora_lora_receiver_0_0 = lora.lora_receiver( samp_rate, capture_freq, (capture_freq, ), bandwidth, spreading_factor, False, 4, True, False, False, 1, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.zeromq_sub_source_0, 0), (self.lora_lora_receiver_0_0, 0))
def captureSequence(self, inputFile): self.inputFile = inputFile if os.path.isfile(self.inputFile): self.tb = gr.top_block() self.file_source = blocks.file_source( gr.sizeof_gr_complex * 1, self.inputFile, False) # Repeat input: True/False self.lora_lora_receiver_0 = lora.lora_receiver( self.samp_rate, self.capture_freq, self.offset, self.sf, self.samp_rate) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, self.samp_rate, True) self.tb.connect((self.file_source, 0), (self.blocks_throttle_0, 0)) self.tb.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.tb.run() self.tb = None if os.path.isfile(self.tempFile): if os.path.isfile(self.outputFile): inf = open(self.tempFile, 'r') seq = inf.read() # print(seq) out = open(self.outputFile, 'a') out.write(seq) out.close() inf.close() else: raise Exception("[ReceiveWhitening] Outputfile '" + self.outputFile + "' does not exist!") else: raise Exception("[ReceiveWhitening] Tempfile '" + self.tempFile + "' does not exist!") else: raise Exception("[ReceiveWhitening] Inputfile '" + self.inputFile + "' does not exist!")
def __init__(self, sample_file, sample_rate, capture_freq, lc): gr.top_block.__init__(self, "Lora Receive File, No GUI") ################################################## # Variables ################################################## self.decimation = 1 ################################################## # Blocks ################################################## self.message_socket_sink = lora.message_socket_sink('127.0.0.1', 40868, 1) self.lora_receiver = lora.lora_receiver(sample_rate, capture_freq, ([lc.freq]), 125000, lc.sf, lc.implicit, lc.cr_num, lc.crc, reduced_rate=False, decimation=self.decimation) self.blocks_throttle = blocks.throttle(gr.sizeof_gr_complex, sample_rate, True) self.blocks_file_source = blocks.file_source(gr.sizeof_gr_complex, sample_file, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_receiver, 'frames'), (self.message_socket_sink, 'in')) self.connect((self.blocks_file_source, 0), (self.blocks_throttle, 0)) self.connect((self.blocks_throttle, 0), (self.lora_receiver, 0))
def __init__(self, options): gr.top_block.__init__(self, "Lora Decode 3") ################################################## # Variables ################################################## print("Frequency: " + str(options.capt_freq)) self.sf = sf = options.sf self.samp_rate = samp_rate = options.samp_rate self.capt_freq = capt_freq = options.capt_freq self.bw = bw = options.bw ################################################## # Blocks ################################################## self.pluto_source_0 = iio.pluto_source('192.168.2.1', capt_freq, samp_rate, 1 - 1, 20000000, 0x8000, True, True, True, "manual", 64.0, '', True) self.lora_message_socket_sink_0 = lora.message_socket_sink( '127.0.0.1', 40868, 0) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capt_freq, ([868.1e6]), bw, sf, False, 4, True, False, False, 1, False, False) self.blocks_message_debug_0 = blocks.message_debug() ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.blocks_message_debug_0, 'store')) self.connect((self.pluto_source_0, 0), (self.lora_lora_receiver_0, 0))
def __init__(self): gr.top_block.__init__(self, "Exploring the Link Budget") Qt.QWidget.__init__(self) self.setWindowTitle("Exploring the Link Budget") try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "top_block") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.tx_power = tx_power = 20 self.tx_message = tx_message = "test" self.spreading_factor = spreading_factor = 7 self.signal_power = signal_power = 0 self.samp_rate = samp_rate = 250000 self.noise_power = noise_power = 0 self.frequency = frequency = 915e6 ################################################## # Blocks ################################################## self.tab = Qt.QTabWidget() self.tab_widget_0 = Qt.QWidget() self.tab_layout_0 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tab_widget_0) self.tab_grid_layout_0 = Qt.QGridLayout() self.tab_layout_0.addLayout(self.tab_grid_layout_0) self.tab.addTab(self.tab_widget_0, "Frequency") self.tab_widget_1 = Qt.QWidget() self.tab_layout_1 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tab_widget_1) self.tab_grid_layout_1 = Qt.QGridLayout() self.tab_layout_1.addLayout(self.tab_grid_layout_1) self.tab.addTab(self.tab_widget_1, "Time") self.tab_widget_2 = Qt.QWidget() self.tab_layout_2 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tab_widget_2) self.tab_grid_layout_2 = Qt.QGridLayout() self.tab_layout_2.addLayout(self.tab_grid_layout_2) self.tab.addTab(self.tab_widget_2, "I/Q") self.tab_widget_3 = Qt.QWidget() self.tab_layout_3 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.tab_widget_3) self.tab_grid_layout_3 = Qt.QGridLayout() self.tab_layout_3.addLayout(self.tab_grid_layout_3) self.tab.addTab(self.tab_widget_3, "Channel") self.top_layout.addWidget(self.tab) self._signal_power_range = Range(0, 120, 1, 0, 200) self._signal_power_win = RangeWidget(self._signal_power_range, self.set_signal_power, "Signal Attenuation (dB)", "counter_slider", float) self.top_layout.addWidget(self._signal_power_win) self._noise_power_range = Range(0, 120, 1, 0, 200) self._noise_power_win = RangeWidget(self._noise_power_range, self.set_noise_power, "Noise Level (dB)", "counter_slider", float) self.top_layout.addWidget(self._noise_power_win) self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_center_freq(frequency, 0) self.uhd_usrp_source_0.set_gain(20, 0) self.uhd_usrp_source_0.set_antenna("RX2", 0) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 2048, #size firdes.WIN_BLACKMAN_hARRIS, #wintype frequency, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.1) self.qtgui_waterfall_sink_x_0.enable_grid(False) if not True: self.qtgui_waterfall_sink_x_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_waterfall_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] colors = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_waterfall_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 0) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance( self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.tab_layout_3.addWidget(self._qtgui_waterfall_sink_x_0_win) self.qtgui_time_sink_x_0 = qtgui.time_sink_c( 1024, #size samp_rate, #samp_rate "", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) self.qtgui_time_sink_x_0.set_y_axis(-3, 3) self.qtgui_time_sink_x_0.set_y_label("Amplitude", "") self.qtgui_time_sink_x_0.enable_tags(-1, True) self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_0.enable_autoscale(False) self.qtgui_time_sink_x_0.enable_grid(False) self.qtgui_time_sink_x_0.enable_control_panel(True) if not True: self.qtgui_time_sink_x_0.disable_legend() labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue" ] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2 * 1): if len(labels[i]) == 0: if (i % 2 == 0): self.qtgui_time_sink_x_0.set_line_label( i, "Re{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label( i, "Im{{Data {0}}}".format(i / 2)) else: self.qtgui_time_sink_x_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_0_win = sip.wrapinstance( self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget) self.tab_layout_1.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype frequency, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 0) self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(True) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_control_panel(True) if not True: self.qtgui_freq_sink_x_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.tab_layout_0.addWidget(self._qtgui_freq_sink_x_0_win) self.qtgui_const_sink_x_0 = qtgui.const_sink_c( 1024, #size "", #name 1 #number of inputs ) self.qtgui_const_sink_x_0.set_update_time(0.10) self.qtgui_const_sink_x_0.set_y_axis(-1, 1) self.qtgui_const_sink_x_0.set_x_axis(-1, 1) self.qtgui_const_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "") self.qtgui_const_sink_x_0.enable_autoscale(False) self.qtgui_const_sink_x_0.enable_grid(False) if not True: self.qtgui_const_sink_x_0.disable_legend() labels = ["", "", "", "", "", "", "", "", "", ""] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "red", "red", "red", "red", "red", "red", "red", "red" ] styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] markers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_const_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_const_sink_x_0.set_line_label(i, labels[i]) self.qtgui_const_sink_x_0.set_line_width(i, widths[i]) self.qtgui_const_sink_x_0.set_line_color(i, colors[i]) self.qtgui_const_sink_x_0.set_line_style(i, styles[i]) self.qtgui_const_sink_x_0.set_line_marker(i, markers[i]) self.qtgui_const_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_const_sink_x_0_win = sip.wrapinstance( self.qtgui_const_sink_x_0.pyqwidget(), Qt.QWidget) self.tab_layout_2.addWidget(self._qtgui_const_sink_x_0_win) self.lora_message_print = lora_message() self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, frequency, ([frequency]), spreading_factor, 1000000, 0.001) self.config_lopy = blk(msg=tx_message, tx_power=tx_power, sf=spreading_factor) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc( (10**(-signal_power / 20), )) self.blocks_add_xx_0 = blocks.add_vcc(1) self.analog_noise_source_x_0 = analog.noise_source_c( analog.GR_GAUSSIAN, 0.0001 * 10**(noise_power / 20), 0) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_print, 'in')) self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_const_sink_x_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.qtgui_waterfall_sink_x_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.uhd_usrp_source_0, 0), (self.blocks_multiply_const_vxx_0, 0))
def __init__(self, spreadingFactor = 7, codingRate = "4/5", gains = [10, 20, 20]): ################################################## # Variables # ################################################## self.target_freq = 868.1e6 self.sf = spreadingFactor # 7 8 9 10 11 12 self.samp_rate = 1e6 self.capture_freq = 868.0e6 self.bw = 125e3 #self.symbols_per_sec = self.bw / (2**self.sf) self.offset = -(self.capture_freq - self.target_freq) #self.bitrate = self.sf * (1 / (2**self.sf / self.bw )) self.crc = True self.pwr = 1 self.codingRate = codingRate # 4/5 4/6 4/7 4/8 self.pre_delay = 0.150 self.post_delay = 0.350 self.trans_delay = 0.250 self.testResults = None # Socket connection for sink self.host = "127.0.0.1" self.port = 40868 self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server.bind((self.host, self.port)) self.server.setblocking(0) ################################################## # LoRa transmitter # ################################################## try: self.lc = RN2483Controller("/dev/lora") self.lc.set_cr ( self.codingRate) self.lc.set_bw ( self.bw / 1e3) self.lc.set_sf ( self.sf ) self.lc.set_crc( "on" if self.crc else "off") self.lc.set_pwr( self.pwr ) except: raise Exception("Error initialising LoRa transmitter: RN2483Controller") ################################################## # Blocks # ################################################## self.tb = gr.top_block () self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' ) self.osmosdr_source_0.set_sample_rate(self.samp_rate) self.osmosdr_source_0.set_center_freq(self.capture_freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_dc_offset_mode(0, 0) self.osmosdr_source_0.set_iq_balance_mode(0, 0) self.osmosdr_source_0.set_gain_mode(False, 0) self.osmosdr_source_0.set_gain(gains[0], 0) self.osmosdr_source_0.set_if_gain(gains[1], 0) self.osmosdr_source_0.set_bb_gain(gains[2], 0) self.osmosdr_source_0.set_antenna('', 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.lora_lora_receiver_0 = lora.lora_receiver(self.samp_rate, self.capture_freq, self.offset, self.sf, self.samp_rate, 0.01) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, self.samp_rate, True) self.blocks_message_socket_sink_0 = lora.message_socket_sink() self.tb.connect( (self.osmosdr_source_0, 0), (self.blocks_throttle_0, 0)) self.tb.connect( (self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.tb.msg_connect( (self.lora_lora_receiver_0, 'frames'), (self.blocks_message_socket_sink_0, 'in'))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive File") ################################################## # Variables ################################################## self.target_freq = target_freq = 868.1e6 self.sf = sf = 12 self.samp_rate = samp_rate = 10e6 self.capture_freq = capture_freq = 866.0e6 self.bw = bw = 125e3 self.symbols_per_sec = symbols_per_sec = bw / (2**sf) self.offset = offset = -(capture_freq - target_freq) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.finetune = finetune = -95 self.bitrate = bitrate = sf * (1 / (2**sf / bw)) ################################################## # Blocks ################################################## _finetune_sizer = wx.BoxSizer(wx.VERTICAL) self._finetune_text_box = forms.text_box( parent=self.GetWin(), sizer=_finetune_sizer, value=self.finetune, callback=self.set_finetune, label='finetune', converter=forms.int_converter(), proportion=0, ) self._finetune_slider = forms.slider( parent=self.GetWin(), sizer=_finetune_sizer, value=self.finetune, callback=self.set_finetune, minimum=-150, maximum=150, num_steps=300, style=wx.SL_HORIZONTAL, cast=int, proportion=1, ) self.Add(_finetune_sizer) self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, offset, finetune, False) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_file_source_0 = blocks.file_source( gr.sizeof_gr_complex * 1, "counting_cr4_sf7.cfile", True) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.wxgui_fftsink2_1, 0))
def run(self, suites_to_run, pause=False, write_output=True): for test_suite in self.test_suites: # Skip test suites that we don't want to run if suites_to_run != [] and (not test_suite in suites_to_run): continue print("[+] Testing suite: '%s'" % test_suite) summary = TestSummary(suite=test_suite, pause=pause) # Get all metadata files associated with the suite get_mtime = lambda f: os.stat( os.path.join(self.test_suites_directory, test_suite, f) ).st_mtime metadata_files = [ os.path.join(self.test_suites_directory, test_suite, x) for x in sorted(os.listdir( os.path.join(self.test_suites_directory, test_suite)), key=get_mtime) if x.endswith('.sigmf-meta') ] # Parse metadata files for metadata_file in metadata_files: print("[+] %s" % metadata_file) data_file = os.path.splitext(metadata_file)[0] + '.sigmf-data' # Load sigmf data TODO abstract f = open(metadata_file, 'r') sigmf = SigMFFile(metadata=f.read()) if not sigmf.validate(): raise Exception("Invalid SigMF format") global_meta = sigmf.get_global_info() capture_meta = sigmf.get_capture_info(0) f.close() # Initialize test parameters sample_rate = global_meta["core:sample_rate"] # Get LoRa configuration capture_freq = capture_meta["core:frequency"] if "lora:frequency_offset" in capture_meta: frequency_offset = capture_meta["lora:frequency_offset"] else: frequency_offset = 0 transmit_freq = capture_meta["lora:frequency"] sf = capture_meta["lora:sf"] cr = capture_meta["lora:cr"] bw = int(capture_meta["lora:bw"]) prlen = capture_meta["lora:prlen"] crc = capture_meta["lora:crc"] implicit = capture_meta["lora:implicit"] lora_config = LoRaConfig(transmit_freq, sf, cr, bw, prlen, crc, implicit) # Get test case configuration payload = capture_meta["test:expected"] times = capture_meta["test:times"] test = Test(payload, times) # Build flowgraph tb = gr.top_block() file_source = blocks.file_source(gr.sizeof_gr_complex, data_file, False) lora_receiver = lora.lora_receiver(sample_rate, capture_freq, [868100000], bw, sf, False, 4, True, reduced_rate=False, decimation=1) throttle = blocks.throttle(gr.sizeof_gr_complex, sample_rate, True) message_socket_sink = lora.message_socket_sink( "127.0.0.1", 40868, 2) freq_xlating_fir_filter = filter.freq_xlating_fir_filter_ccc( 1, (firdes.low_pass(1, sample_rate, 200000, 100000, firdes.WIN_HAMMING, 6.67)), frequency_offset, sample_rate) # Make connections tb.connect((file_source, 0), (throttle, 0)) tb.connect((throttle, 0), (freq_xlating_fir_filter, 0)) tb.connect((freq_xlating_fir_filter, 0), (lora_receiver, 0)) tb.msg_connect((lora_receiver, 'frames'), (message_socket_sink, 'in')) tb.start() tb.wait() decoded_data = self.server.get_payloads( times) # Output from the flowgraph summary.add(TestResult(decoded_data=decoded_data, lora_config=lora_config, test=test), print_intermediate=True) # Finally, export the result for the suite summary.export_summary(path=self.reports_directory, write_output=write_output)
def test_000(self): prevData = "" prevTimes = 0 for test in self.xmlTests: # print (("Test {0: 3d}\n" # + " File: {1:s}\n" # + " SF: {2: 2d}\n" # + " All data: {3:s}\n" # + " HDR: {4:s}\n" # + " DATA: {5:s}\n" # + " times: {6: 2d}") # .format(int(test['@id']), test['file'], int(test['spreading-factor']), # test['expected-data-all'], test['expected-hdr'], # test['expected-data-only'], int(test['expected-times'])) # ) self.sf = int(test['spreading-factor']) self.inputFile = str(test['file']) self.hasHDR = True data = test['expected-data-all'] times = int(test['expected-times']) if not data: data = test['expected-hdr'] if not data: self.hasHDR = False data = test['expected-data-only'] else: data = data + " " + test['expected-data-only'] if data and os.path.isfile(self.inputFile): if (data != prevData) or (times != prevTimes): testResults.append([]) test_series.append(TestSerieSettings([data], times)) prevData = data prevTimes = times print "++++++++++ Starting test {0: 3d} from data in: \n {1:s}\n".format( int(test['@id']), self.inputFile) ################################################## # Blocks # ################################################## self.tb = gr.top_block() self.file_source = blocks.file_source( gr.sizeof_gr_complex * 1, self.inputFile, False) # Repeat input: True/False self.lora_lora_receiver_0 = lora.lora_receiver( self.samp_rate, self.capture_freq, [868100000], self.sf, self.samp_rate, self.threshold) self.blocks_throttle_0 = blocks.throttle( gr.sizeof_gr_complex * 1, self.samp_rate, True) self.blocks_message_socket_sink_0 = lora.message_socket_sink() self.freq_xlating_fir_filter_0 = filter.freq_xlating_fir_filter_ccc( 1, (firdes.low_pass(1, self.samp_rate, 500000, 100000, firdes.WIN_HAMMING, 6.67)), self.center_offset, self.samp_rate) self.tb.connect((self.file_source, 0), (self.blocks_throttle_0, 0)) self.tb.connect((self.blocks_throttle_0, 0), (self.freq_xlating_fir_filter_0, 0)) self.tb.connect((self.freq_xlating_fir_filter_0, 0), (self.lora_lora_receiver_0, 0)) self.tb.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.blocks_message_socket_sink_0, 'in')) self.tb.run() total_data = self.gatherFromSocket( test_series[len(test_series) - 1].times) self.compareDataSets( total_data, test_series[len(test_series) - 1].data * test_series[len(test_series) - 1].times, os.path.splitext(os.path.basename(self.inputFile))[0], int(test['@id'])) self.tb = None else: print( "No test data or file does not exist, skipping test {0: 3d}..." .format(int(test['@id'])))
def __init__(self): gr.top_block.__init__(self, "Lora Receive File") Qt.QWidget.__init__(self) self.setWindowTitle("Lora Receive File") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "lora_receive_file") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.sf = sf = 7 self.bw = bw = 125000 self.target_freq = target_freq = 868.1e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.samp_rate = samp_rate = 10e6 self.capture_freq = capture_freq = 866.0e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype capture_freq, #fc samp_rate, #bw "", #name 1) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0.enable_control_panel(False) labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in range(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, [target_freq], bw, sf, False, 4, True, False, False, 10, False, False) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True) self.blocks_file_source_0 = blocks.file_source( gr.sizeof_gr_complex * 1, 'counting_cr4_sf7.cfile', True, 0, 0) self.blocks_file_source_0.set_begin_tag(pmt.PMT_NIL) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.qtgui_freq_sink_x_0, 0))
def __init__(self): gr.top_block.__init__(self, "Lora Receive Realtime") Qt.QWidget.__init__(self) self.setWindowTitle("Lora Receive Realtime") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "lora_receive_realtime") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.sf = sf = 11 self.bw = bw = 125000 self.target_freq = target_freq = 868.1e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.samp_rate = samp_rate = 1e6 self.decimation = decimation = 1 self.capture_freq = capture_freq = 868e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype capture_freq, #fc samp_rate, #bw "", #name 1) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0.enable_control_panel(False) labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in range(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.osmosdr_source_0 = osmosdr.source(args="numchan=" + str(1) + " " + '') self.osmosdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t()) self.osmosdr_source_0.set_sample_rate(samp_rate) self.osmosdr_source_0.set_center_freq(capture_freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_gain(10, 0) self.osmosdr_source_0.set_if_gain(20, 0) self.osmosdr_source_0.set_bb_gain(20, 0) self.osmosdr_source_0.set_antenna('', 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.lora_message_socket_sink_0 = lora.message_socket_sink( '127.0.0.1', 40868, 0) self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, [target_freq], bw, sf, False, 4, True, False, False, decimation, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.osmosdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.qtgui_freq_sink_x_0, 0))
def __init__(self): gr.top_block.__init__(self, "Porglet Lora script") Qt.QWidget.__init__(self) self.setWindowTitle("Porglet Lora script") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "loraRec") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1e6 self.offset = offset = -26e3 self.cf = cf = 868e6 ################################################## # Blocks ################################################## self.rtlsdr_source_0 = osmosdr.source(args="numchan=" + str(1) + " " + "") self.rtlsdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t()) self.rtlsdr_source_0.set_sample_rate(samp_rate) self.rtlsdr_source_0.set_center_freq(cf, 0) self.rtlsdr_source_0.set_freq_corr(0, 0) self.rtlsdr_source_0.set_gain(10, 0) self.rtlsdr_source_0.set_if_gain(20, 0) self.rtlsdr_source_0.set_bb_gain(20, 0) self.rtlsdr_source_0.set_antenna('', 0) self.rtlsdr_source_0.set_bandwidth(0, 0) self.qtgui_sink_x_0 = qtgui.sink_c( 1024, #fftsize firdes.WIN_BLACKMAN_hARRIS, #wintype cf, #fc samp_rate, #bw "", #name True, #plotfreq True, #plotwaterfall True, #plottime True #plotconst ) self.qtgui_sink_x_0.set_update_time(1.0 / 10) self._qtgui_sink_x_0_win = sip.wrapinstance( self.qtgui_sink_x_0.pyqwidget(), Qt.QWidget) self.qtgui_sink_x_0.enable_rf_freq(True) self.top_grid_layout.addWidget(self._qtgui_sink_x_0_win) self.lora_lora_receiver_0 = lora.lora_receiver(1e6, cf, [868.1e6 + offset], 125000, 7, False, 4, True, False, False, 1, False, False) ################################################## # Connections ################################################## self.connect((self.rtlsdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.rtlsdr_source_0, 0), (self.qtgui_sink_x_0, 0))
def __init__(self): gr.top_block.__init__(self, "LoRa Receiver to UDP socket with USRP") Qt.QWidget.__init__(self) self.setWindowTitle("LoRa Receiver to UDP socket with USRP") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "LoRa_usrp_receive_to_UDP") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1e6 self.freq_slider = freq_slider = 868e6 self.channel_freq = channel_freq = 868.2e6 ################################################## # Blocks ################################################## self._freq_slider_range = Range(867e6, 869e6, 1, 868e6, 200) self._freq_slider_win = RangeWidget(self._freq_slider_range, self.set_freq_slider, 'Frequency', "counter_slider", float) self.top_grid_layout.addWidget(self._freq_slider_win) self._channel_freq_tool_bar = Qt.QToolBar(self) self._channel_freq_tool_bar.addWidget( Qt.QLabel('Channel frequency' + ": ")) self._channel_freq_line_edit = Qt.QLineEdit(str(self.channel_freq)) self._channel_freq_tool_bar.addWidget(self._channel_freq_line_edit) self._channel_freq_line_edit.returnPressed.connect( lambda: self.set_channel_freq( eng_notation.str_to_num( str(self._channel_freq_line_edit.text())))) self.top_grid_layout.addWidget(self._channel_freq_tool_bar) self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", args='', channels=[], ), ) self.uhd_usrp_source_0.set_center_freq(freq_slider, 0) self.uhd_usrp_source_0.set_gain(0, 0) self.uhd_usrp_source_0.set_antenna('RX2', 0) self.uhd_usrp_source_0.set_bandwidth(samp_rate, 0) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_time_unknown_pps(uhd.time_spec()) self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_HAMMING, #wintype channel_freq, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.10) self.qtgui_waterfall_sink_x_0.enable_grid(True) self.qtgui_waterfall_sink_x_0.enable_axis_labels(True) labels = ['', '', '', '', '', '', '', '', '', ''] colors = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in range(1): if len(labels[i]) == 0: self.qtgui_waterfall_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance( self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_0_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype freq_slider, #fc samp_rate, #bw "", #name 1) self.qtgui_freq_sink_x_0.set_update_time(0.10) self.qtgui_freq_sink_x_0.set_y_axis(-140, 10) self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB') self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0, "") self.qtgui_freq_sink_x_0.enable_autoscale(False) self.qtgui_freq_sink_x_0.enable_grid(False) self.qtgui_freq_sink_x_0.set_fft_average(1.0) self.qtgui_freq_sink_x_0.enable_axis_labels(True) self.qtgui_freq_sink_x_0.enable_control_panel(True) labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "dark blue" ] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in range(1): if len(labels[i]) == 0: self.qtgui_freq_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_freq_sink_x_0.set_line_label(i, labels[i]) self.qtgui_freq_sink_x_0.set_line_width(i, widths[i]) self.qtgui_freq_sink_x_0.set_line_color(i, colors[i]) self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i]) self._qtgui_freq_sink_x_0_win = sip.wrapinstance( self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.lora_message_socket_sink_0 = lora.message_socket_sink( '127.0.0.1', 40868, 0) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, 868e6, [channel_freq], 125000, 7, False, 4, True, False, False, 1, False, False) ################################################## # Connections ################################################## self.msg_connect((self.lora_lora_receiver_0, 'frames'), (self.lora_message_socket_sink_0, 'in')) self.connect((self.uhd_usrp_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.qtgui_waterfall_sink_x_0, 0))
def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Lora Receive Realtime") ################################################## # Variables ################################################## self.target_freq = target_freq = 868.1e6 self.sf = sf = 12 self.samp_rate = samp_rate = 2e6 self.capture_freq = capture_freq = 867.8e6 self.bw = bw = 125e3 self.symbols_per_sec = symbols_per_sec = bw / (2**sf) self.offset = offset = -(capture_freq - target_freq) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.finetune = finetune = -95 self.bitrate = bitrate = sf * (1 / (2**sf / bw)) ################################################## # Blocks ################################################## _finetune_sizer = wx.BoxSizer(wx.VERTICAL) self._finetune_text_box = forms.text_box( parent=self.GetWin(), sizer=_finetune_sizer, value=self.finetune, callback=self.set_finetune, label='finetune', converter=forms.int_converter(), proportion=0, ) self._finetune_slider = forms.slider( parent=self.GetWin(), sizer=_finetune_sizer, value=self.finetune, callback=self.set_finetune, minimum=-150, maximum=150, num_steps=300, style=wx.SL_HORIZONTAL, cast=int, proportion=1, ) self.Add(_finetune_sizer) self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=capture_freq, y_per_div=10, y_divs=10, ref_level=0, ref_scale=2.0, sample_rate=samp_rate, fft_size=1024, fft_rate=15, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, ) self.Add(self.wxgui_fftsink2_1.win) self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_center_freq(capture_freq, 0) self.uhd_usrp_source_0.set_gain(15, 0) self.uhd_usrp_source_0.set_antenna("RX2", 0) self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq, offset, finetune, True) ################################################## # Connections ################################################## self.connect((self.uhd_usrp_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.wxgui_fftsink2_1, 0))
def __init__(self): gr.top_block.__init__(self, "Dep Lora Receive Realtime") Qt.QWidget.__init__(self) self.setWindowTitle("Dep Lora Receive Realtime") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "dep_lora_receive_realtime") try: if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"): self.restoreGeometry( self.settings.value("geometry").toByteArray()) else: self.restoreGeometry(self.settings.value("geometry")) except: pass ################################################## # Variables ################################################## self.sf = sf = 10 self.samp_rate = samp_rate = 1e6 self.bw = bw = 250000 self.target_freq = target_freq = 868.1e6 self.symbols_per_sec = symbols_per_sec = float(bw) / (2**sf) self.firdes_tap = firdes_tap = firdes.low_pass(1, samp_rate, bw, 10000, firdes.WIN_HAMMING, 6.67) self.downlink = downlink = False self.decimation = decimation = 1 self.capture_freq = capture_freq = 915e6 self.bitrate = bitrate = sf * (1 / (2**sf / float(bw))) ################################################## # Blocks ################################################## self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c( 2048, #size firdes.WIN_BLACKMAN_hARRIS, #wintype capture_freq, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_0.set_update_time(0.0040) self.qtgui_waterfall_sink_x_0.enable_grid(False) self.qtgui_waterfall_sink_x_0.enable_axis_labels(True) labels = ['', '', '', '', '', '', '', '', '', ''] colors = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in range(1): if len(labels[i]) == 0: self.qtgui_waterfall_sink_x_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_0.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_0.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_0.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance( self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget) self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_0_win) self.qtgui_waterfall_sink_x_0.set_max_output_buffer(250000) self.osmosdr_source_0 = osmosdr.source(args="numchan=" + str(1) + " " + "") self.osmosdr_source_0.set_sample_rate(samp_rate) self.osmosdr_source_0.set_center_freq(capture_freq, 0) self.osmosdr_source_0.set_freq_corr(0, 0) self.osmosdr_source_0.set_gain(20, 0) self.osmosdr_source_0.set_if_gain(20, 0) self.osmosdr_source_0.set_bb_gain(20, 0) self.osmosdr_source_0.set_antenna('TX/RX', 0) self.osmosdr_source_0.set_bandwidth(0, 0) self.lora_lora_receiver_0 = lora.lora_receiver(1e6, capture_freq, [target_freq], bw, sf, True, 4, False, False, False, 1, False, False) ################################################## # Connections ################################################## self.connect((self.osmosdr_source_0, 0), (self.lora_lora_receiver_0, 0)) self.connect((self.osmosdr_source_0, 0), (self.qtgui_waterfall_sink_x_0, 0))
def run(self, suites_to_run, pause=False, write_output=True): for test_suite in self.test_suites: # Skip test suites that we don't want to run if suites_to_run != [] and (not test_suite in suites_to_run): continue print("[+] Testing suite: '%s'" % test_suite) summary = TestSummary(suite=test_suite, pause=pause) # Get all metadata files associated with the suite get_mtime = lambda f: os.stat(os.path.join(self.test_suites_directory, test_suite, f)).st_mtime metadata_files = [os.path.join(self.test_suites_directory, test_suite, x) for x in sorted(os.listdir(os.path.join(self.test_suites_directory, test_suite)), key=get_mtime) if x.endswith('.sigmf-meta')] # Parse metadata files for metadata_file in metadata_files: print("[+] %s" % metadata_file) data_file = os.path.splitext(metadata_file)[0] + '.sigmf-data' # Load sigmf data TODO abstract f = open(metadata_file, 'r') sigmf = SigMFFile(metadata=f.read()) if not sigmf.validate(): raise Exception("Invalid SigMF format") global_meta = sigmf.get_global_info() capture_meta = sigmf.get_capture_info(0) f.close() # Initialize test parameters sample_rate = global_meta["core:sample_rate"] # Get LoRa configuration capture_freq = capture_meta["core:frequency"] if "lora:frequency_offset" in capture_meta: frequency_offset = capture_meta["lora:frequency_offset"] else: frequency_offset = 0 transmit_freq = capture_meta["lora:frequency"] sf = capture_meta["lora:sf"] cr = capture_meta["lora:cr"] bw = int(capture_meta["lora:bw"]) prlen = capture_meta["lora:prlen"] crc = capture_meta["lora:crc"] implicit = capture_meta["lora:implicit"] lora_config = LoRaConfig(transmit_freq, sf, cr, bw, prlen, crc, implicit) # Get test case configuration payload = capture_meta["test:expected"] times = capture_meta["test:times"] test = Test(payload, times) # Build flowgraph tb = gr.top_block() file_source = blocks.file_source(gr.sizeof_gr_complex, data_file, False) lora_receiver = lora.lora_receiver(sample_rate, capture_freq, [868100000], bw, sf, False, 4, True, reduced_rate=False, decimation=1) throttle = blocks.throttle(gr.sizeof_gr_complex, sample_rate, True) message_socket_sink = lora.message_socket_sink("127.0.0.1", 40868, 2) freq_xlating_fir_filter = filter.freq_xlating_fir_filter_ccc(1, (firdes.low_pass(1, sample_rate, 200000, 100000, firdes.WIN_HAMMING, 6.67)), frequency_offset, sample_rate) # Make connections tb.connect((file_source, 0), (throttle, 0)) tb.connect((throttle, 0), (freq_xlating_fir_filter, 0)) tb.connect((freq_xlating_fir_filter, 0), (lora_receiver, 0)) tb.msg_connect((lora_receiver, 'frames'), (message_socket_sink, 'in')) tb.start() tb.wait() decoded_data = self.server.get_payloads(times) # Output from the flowgraph summary.add(TestResult(decoded_data=decoded_data, lora_config=lora_config, test=test), print_intermediate=True) # Finally, export the result for the suite summary.export_summary(path=self.reports_directory, write_output=write_output)