From 2c7b588f4af2b0eb41641790cfb6b19eeb28a317 Mon Sep 17 00:00:00 2001 From: Md Tanvirul Islam Date: Thu, 31 May 2018 10:32:26 -0400 Subject: [PATCH] added test project for extracting required graphs --- Architecture.png | Bin 0 -> 74687 bytes Physical-Layer-GNURadio/twoways_listener.grc | 34 +- Physical-Layer-GNURadio/twoways_sender.grc | 34 +- TestGraph/ContinuousSender.py | 25 + TestGraph/Socket-TestDifferentParameters.grc | 4069 ++++++++++++++++++ TestGraph/preamble.txt | 1 + TestGraph/top_block.py | 297 ++ 7 files changed, 4426 insertions(+), 34 deletions(-) create mode 100644 Architecture.png create mode 100644 TestGraph/ContinuousSender.py create mode 100644 TestGraph/Socket-TestDifferentParameters.grc create mode 100644 TestGraph/preamble.txt create mode 100644 TestGraph/top_block.py diff --git a/Architecture.png b/Architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..473a6e9e88afefe3bc565ade2de44d78c38d54c6 GIT binary patch literal 74687 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 =2RqPA6q__lB^d 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 G@Bag}{Uu!h literal 0 HcmV?d00001 diff --git a/Physical-Layer-GNURadio/twoways_listener.grc b/Physical-Layer-GNURadio/twoways_listener.grc index 7b1cd4f..034da63 100644 --- a/Physical-Layer-GNURadio/twoways_listener.grc +++ b/Physical-Layer-GNURadio/twoways_listener.grc @@ -159,7 +159,7 @@ _coordinate - (632, 608) + (616, 428) _rotation @@ -214,7 +214,7 @@ _coordinate - (344, 352) + (336, 124) _rotation @@ -277,7 +277,7 @@ _coordinate - (776, 392) + (784, 164) _rotation @@ -328,7 +328,7 @@ _coordinate - (240, 848) + (168, 644) _rotation @@ -375,7 +375,7 @@ _coordinate - (80, 280) + (72, 244) _rotation @@ -422,7 +422,7 @@ _coordinate - (112, 144) + (96, 108) _rotation @@ -481,7 +481,7 @@ _coordinate - (928, 792) + (936, 628) _rotation @@ -540,7 +540,7 @@ _coordinate - (888, 608) + (904, 428) _rotation @@ -595,7 +595,7 @@ _coordinate - (112, 392) + (96, 332) _rotation @@ -646,7 +646,7 @@ _coordinate - (912, 712) + (904, 532) _rotation @@ -697,7 +697,7 @@ _coordinate - (400, 584) + (384, 404) _rotation @@ -764,7 +764,7 @@ _coordinate - (584, 384) + (576, 156) _rotation @@ -831,7 +831,7 @@ _coordinate - (384, 800) + (328, 596) _rotation @@ -1542,7 +1542,7 @@ _coordinate - (952, 336) + (1024, 60) _rotation @@ -2877,7 +2877,7 @@ _coordinate - (16, 624) + (104, 404) _rotation @@ -3072,7 +3072,7 @@ _coordinate - (952, 112) + (1016, 208) _rotation @@ -3175,7 +3175,7 @@ _coordinate - (640, 784) + (544, 576) _rotation diff --git a/Physical-Layer-GNURadio/twoways_sender.grc b/Physical-Layer-GNURadio/twoways_sender.grc index bd1b7a8..aa372af 100644 --- a/Physical-Layer-GNURadio/twoways_sender.grc +++ b/Physical-Layer-GNURadio/twoways_sender.grc @@ -159,7 +159,7 @@ _coordinate - (632, 604) + (792, 452) _rotation @@ -214,7 +214,7 @@ _coordinate - (344, 348) + (336, 92) _rotation @@ -277,7 +277,7 @@ _coordinate - (776, 388) + (776, 132) _rotation @@ -328,7 +328,7 @@ _coordinate - (240, 844) + (128, 644) _rotation @@ -375,7 +375,7 @@ _coordinate - (80, 276) + (80, 236) _rotation @@ -422,7 +422,7 @@ _coordinate - (112, 140) + (112, 100) _rotation @@ -481,7 +481,7 @@ _coordinate - (928, 788) + (1056, 644) _rotation @@ -540,7 +540,7 @@ _coordinate - (888, 604) + (1008, 452) _rotation @@ -595,7 +595,7 @@ _coordinate - (112, 388) + (112, 348) _rotation @@ -646,7 +646,7 @@ _coordinate - (912, 708) + (1032, 556) _rotation @@ -697,7 +697,7 @@ _coordinate - (400, 580) + (576, 428) _rotation @@ -764,7 +764,7 @@ _coordinate - (584, 380) + (568, 124) _rotation @@ -831,7 +831,7 @@ _coordinate - (384, 796) + (344, 596) _rotation @@ -1542,7 +1542,7 @@ _coordinate - (952, 332) + (1016, 76) _rotation @@ -2877,7 +2877,7 @@ _coordinate - (16, 620) + (80, 444) _rotation @@ -3072,7 +3072,7 @@ _coordinate - (952, 112) + (1024, 224) _rotation @@ -3175,7 +3175,7 @@ _coordinate - (632, 776) + (576, 576) _rotation diff --git a/TestGraph/ContinuousSender.py b/TestGraph/ContinuousSender.py new file mode 100644 index 0000000..1087698 --- /dev/null +++ b/TestGraph/ContinuousSender.py @@ -0,0 +1,25 @@ +import time +import sys +from socket import * + +writeHostname = 'localhost' +writePortNo = 52002 + +writeSockObj = socket(AF_INET, SOCK_STREAM) +writeSockObj.connect((writeHostname, writePortNo)) + +print('Enter Message: ') +msg = input() + +print('Enter interval time (seconds)') +timeInterval = input() +timeInterval = float(timeInterval) + +counter = 1; + +while True: + print('\nSending message #' + str(counter) + " ...") + writeSockObj.sendall(msg.encode()) + print('Message sent.') + time.sleep(timeInterval) + counter += 1; diff --git a/TestGraph/Socket-TestDifferentParameters.grc b/TestGraph/Socket-TestDifferentParameters.grc new file mode 100644 index 0000000..f2176e7 --- /dev/null +++ b/TestGraph/Socket-TestDifferentParameters.grc @@ -0,0 +1,4069 @@ + + + + Wed May 30 16:19:07 2018 + + options + + author + + + + window_size + + + + category + [GRC Hier Blocks] + + + comment + + + + description + + + + _enabled + True + + + _coordinate + (8, 8) + + + _rotation + 0 + + + generate_options + qt_gui + + + hier_block_src_path + .: + + + id + top_block + + + max_nouts + 0 + + + qt_qss_theme + + + + realtime_scheduling + + + + run_command + {python} -u {filename} + + + run_options + prompt + + + run + True + + + thread_safe_setters + + + + title + + + + + variable + + comment + + + + _enabled + True + + + _coordinate + (288, 16) + + + _rotation + 0 + + + id + samp_per_symb + + + value + 10 + + + + variable + + comment + + + + _enabled + True + + + _coordinate + (192, 16) + + + _rotation + 0 + + + id + samp_rate + + + value + 1000000 + + + + blks2_packet_decoder + + access_code + + + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (696, 584) + + + _rotation + 0 + + + id + blks2_packet_decoder_0 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + type + byte + + + threshold + -1 + + + + blks2_packet_encoder + + access_code + + + + bits_per_symbol + 1 + + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (344, 352) + + + _rotation + 0 + + + id + blks2_packet_encoder_0 + + + type + byte + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + pad_for_usrp + True + + + payload_length + 1 + + + preamble + + + + samples_per_symbol + samp_per_symb + + + + blocks_multiply_const_vxx + + alias + + + + comment + + + + const + 1 + + + affinity + + + + _enabled + 1 + + + _coordinate + (776, 392) + + + _rotation + 0 + + + id + blocks_multiply_const_vxx_0 + + + type + complex + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + vlen + 1 + + + + blocks_multiply_const_vxx + + alias + + + + comment + + + + const + 1 + + + affinity + + + + _enabled + 1 + + + _coordinate + (304, 824) + + + _rotation + 0 + + + id + blocks_multiply_const_vxx_0_0 + + + type + complex + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + vlen + 1 + + + + blocks_pdu_to_tagged_stream + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (80, 280) + + + _rotation + 0 + + + id + blocks_pdu_to_tagged_stream_0 + + + type + byte + + + tag + packet_len + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + + blocks_socket_pdu + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (112, 144) + + + _rotation + 0 + + + host + + + + id + blocks_socket_pdu_0 + + + mtu + 15000 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + port + 52002 + + + tcp_no_delay + False + + + type + "TCP_SERVER" + + + + blocks_socket_pdu + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (960, 768) + + + _rotation + 0 + + + host + localhost + + + id + blocks_socket_pdu_1 + + + mtu + 15000 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + port + 52003 + + + tcp_no_delay + False + + + type + "UDP_CLIENT" + + + + blocks_stream_to_tagged_stream + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (952, 584) + + + _rotation + 0 + + + id + blocks_stream_to_tagged_stream_0 + + + len_tag_key + packet_len + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + packet_len + 1 + + + type + byte + + + vlen + 1 + + + + blocks_tag_gate + + alias + + + + comment + + + + affinity + + + + _enabled + True + + + _coordinate + (112, 392) + + + _rotation + 0 + + + id + blocks_tag_gate_0 + + + type + byte + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + propagate_tags + False + + + vlen + 1 + + + + blocks_tagged_stream_to_pdu + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (960, 688) + + + _rotation + 0 + + + id + blocks_tagged_stream_to_pdu_0 + + + type + byte + + + tag + packet_len + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + + digital_gmsk_demod + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + freq_error + 0.0 + + + _coordinate + (464, 560) + + + _rotation + 0 + + + gain_mu + 0.175 + + + id + digital_gmsk_demod_0 + + + log + False + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + mu + 0.5 + + + omega_relative_limit + 0.005 + + + samples_per_symbol + samp_per_symb + + + verbose + False + + + + digital_gmsk_mod + + bt + 0.35 + + + alias + + + + comment + + + + affinity + + + + _enabled + 1 + + + _coordinate + (584, 384) + + + _rotation + 0 + + + id + digital_gmsk_mod_0 + + + log + False + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + samples_per_symbol + samp_per_symb + + + verbose + False + + + + low_pass_filter + + beta + 6.76 + + + alias + + + + comment + + + + affinity + + + + cutoff_freq + 200000 + + + decim + 1 + + + _enabled + 1 + + + type + fir_filter_ccf + + + _coordinate + (448, 776) + + + _rotation + 0 + + + gain + 1 + + + id + low_pass_filter_0 + + + interp + 1 + + + maxoutbuf + 0 + + + minoutbuf + 0 + + + samp_rate + samp_rate + + + width + 50000 + + + win + firdes.WIN_HAMMING + + + + qtgui_time_sink_x + + autoscale + False + + + axislabels + True + + + alias + + + + comment + + + + ctrlpanel + False + + + affinity + + + + entags + True + + + _enabled + True + + + _coordinate + (960, 264) + + + gui_hint + + + + _rotation + 0 + + + grid + False + + + id + qtgui_time_sink_x_0 + + + legend + True + + + alpha1 + 1.0 + + + color1 + "blue" + + + label1 + + + + marker1 + -1 + + + style1 + 1 + + + width1 + 1 + + + alpha10 + 1.0 + + + color10 + "blue" + + + label10 + + + + marker10 + -1 + + + style10 + 1 + + + width10 + 1 + + + alpha2 + 1.0 + + + color2 + "red" + + + label2 + + + + marker2 + -1 + + + style2 + 1 + + + width2 + 1 + + + alpha3 + 1.0 + + + color3 + "green" + + + label3 + + + + marker3 + -1 + + + style3 + 1 + + + width3 + 1 + + + alpha4 + 1.0 + + + color4 + "black" + + + label4 + + + + marker4 + -1 + + + style4 + 1 + + + width4 + 1 + + + alpha5 + 1.0 + + + color5 + "cyan" + + + label5 + + + + marker5 + -1 + + + style5 + 1 + + + width5 + 1 + + + alpha6 + 1.0 + + + color6 + "magenta" + + + label6 + + + + marker6 + -1 + + + style6 + 1 + + + width6 + 1 + + + alpha7 + 1.0 + + + color7 + "yellow" + + + label7 + + + + marker7 + -1 + + + style7 + 1 + + + width7 + 1 + + + alpha8 + 1.0 + + + color8 + "dark red" + + + label8 + + + + marker8 + -1 + + + style8 + 1 + + + width8 + 1 + + + alpha9 + 1.0 + + + color9 + "dark green" + + + label9 + + + + marker9 + -1 + + + style9 + 1 + + + width9 + 1 + + + name + "" + + + nconnections + 1 + + + size + 1024 + + + srate + samp_rate + + + tr_chan + 0 + + + tr_delay + 0 + + + tr_level + 0.0 + + + tr_mode + qtgui.TRIG_MODE_FREE + + + tr_slope + qtgui.TRIG_SLOPE_POS + + + tr_tag + "" + + + type + complex + + + update_time + 0.10 + + + ylabel + Amplitude + + + yunit + "" + + + ymax + 1 + + + ymin + -1 + + + + qtgui_time_sink_x + + autoscale + False + + + axislabels + True + + + alias + + + + comment + + + + ctrlpanel + False + + + affinity + + + + entags + True + + + _enabled + True + + + _coordinate + (704, 944) + + + gui_hint + + + + _rotation + 0 + + + grid + False + + + id + qtgui_time_sink_x_1 + + + legend + True + + + alpha1 + 1.0 + + + color1 + "blue" + + + label1 + + + + marker1 + -1 + + + style1 + 1 + + + width1 + 1 + + + alpha10 + 1.0 + + + color10 + "blue" + + + label10 + + + + marker10 + -1 + + + style10 + 1 + + + width10 + 1 + + + alpha2 + 1.0 + + + color2 + "red" + + + label2 + + + + marker2 + -1 + + + style2 + 1 + + + width2 + 1 + + + alpha3 + 1.0 + + + color3 + "green" + + + label3 + + + + marker3 + -1 + + + style3 + 1 + + + width3 + 1 + + + alpha4 + 1.0 + + + color4 + "black" + + + label4 + + + + marker4 + -1 + + + style4 + 1 + + + width4 + 1 + + + alpha5 + 1.0 + + + color5 + "cyan" + + + label5 + + + + marker5 + -1 + + + style5 + 1 + + + width5 + 1 + + + alpha6 + 1.0 + + + color6 + "magenta" + + + label6 + + + + marker6 + -1 + + + style6 + 1 + + + width6 + 1 + + + alpha7 + 1.0 + + + color7 + "yellow" + + + label7 + + + + marker7 + -1 + + + style7 + 1 + + + width7 + 1 + + + alpha8 + 1.0 + + + color8 + "dark red" + + + label8 + + + + marker8 + -1 + + + style8 + 1 + + + width8 + 1 + + + alpha9 + 1.0 + + + color9 + "dark green" + + + label9 + + + + marker9 + -1 + + + style9 + 1 + + + width9 + 1 + + + name + "" + + + nconnections + 1 + + + size + 1024 + + + srate + samp_rate + + + tr_chan + 0 + + + tr_delay + 0 + + + tr_level + 0.0 + + + tr_mode + qtgui.TRIG_MODE_FREE + + + tr_slope + qtgui.TRIG_SLOPE_POS + + + tr_tag + "" + + + type + complex + + + update_time + 0.10 + + + ylabel + Amplitude + + + yunit + "" + + + ymax + 1 + + + ymin + -1 + + + + uhd_usrp_sink + + alias + + + + ant0 + TX/RX + + + bw0 + 0 + + + center_freq0 + 2460000000 + + + norm_gain0 + True + + + gain0 + 0.9 + + + ant10 + + + + bw10 + 0 + + + center_freq10 + 0 + + + norm_gain10 + False + + + gain10 + 0 + + + ant11 + + + + bw11 + 0 + + + center_freq11 + 0 + + + norm_gain11 + False + + + gain11 + 0 + + + ant12 + + + + bw12 + 0 + + + center_freq12 + 0 + + + norm_gain12 + False + + + gain12 + 0 + + + ant13 + + + + bw13 + 0 + + + center_freq13 + 0 + + + norm_gain13 + False + + + gain13 + 0 + + + ant14 + + + + bw14 + 0 + + + center_freq14 + 0 + + + norm_gain14 + False + + + gain14 + 0 + + + ant15 + + + + bw15 + 0 + + + center_freq15 + 0 + + + norm_gain15 + False + + + gain15 + 0 + + + ant16 + + + + bw16 + 0 + + + center_freq16 + 0 + + + norm_gain16 + False + + + gain16 + 0 + + + ant17 + + + + bw17 + 0 + + + center_freq17 + 0 + + + norm_gain17 + False + + + gain17 + 0 + + + ant18 + + + + bw18 + 0 + + + center_freq18 + 0 + + + norm_gain18 + False + + + gain18 + 0 + + + ant19 + + + + bw19 + 0 + + + center_freq19 + 0 + + + norm_gain19 + False + + + gain19 + 0 + + + ant1 + + + + bw1 + 0 + + + center_freq1 + 0 + + + norm_gain1 + False + + + gain1 + 0 + + + ant20 + + + + bw20 + 0 + + + center_freq20 + 0 + + + norm_gain20 + False + + + gain20 + 0 + + + ant21 + + + + bw21 + 0 + + + center_freq21 + 0 + + + norm_gain21 + False + + + gain21 + 0 + + + ant22 + + + + bw22 + 0 + + + center_freq22 + 0 + + + norm_gain22 + False + + + gain22 + 0 + + + ant23 + + + + bw23 + 0 + + + center_freq23 + 0 + + + norm_gain23 + False + + + gain23 + 0 + + + ant24 + + + + bw24 + 0 + + + center_freq24 + 0 + + + norm_gain24 + False + + + gain24 + 0 + + + ant25 + + + + bw25 + 0 + + + center_freq25 + 0 + + + norm_gain25 + False + + + gain25 + 0 + + + ant26 + + + + bw26 + 0 + + + center_freq26 + 0 + + + norm_gain26 + False + + + gain26 + 0 + + + ant27 + + + + bw27 + 0 + + + center_freq27 + 0 + + + norm_gain27 + False + + + gain27 + 0 + + + ant28 + + + + bw28 + 0 + + + center_freq28 + 0 + + + norm_gain28 + False + + + gain28 + 0 + + + ant29 + + + + bw29 + 0 + + + center_freq29 + 0 + + + norm_gain29 + False + + + gain29 + 0 + + + ant2 + + + + bw2 + 0 + + + center_freq2 + 0 + + + norm_gain2 + False + + + gain2 + 0 + + + ant30 + + + + bw30 + 0 + + + center_freq30 + 0 + + + norm_gain30 + False + + + gain30 + 0 + + + ant31 + + + + bw31 + 0 + + + center_freq31 + 0 + + + norm_gain31 + False + + + gain31 + 0 + + + ant3 + + + + bw3 + 0 + + + center_freq3 + 0 + + + norm_gain3 + False + + + gain3 + 0 + + + ant4 + + + + bw4 + 0 + + + center_freq4 + 0 + + + norm_gain4 + False + + + gain4 + 0 + + + ant5 + + + + bw5 + 0 + + + center_freq5 + 0 + + + norm_gain5 + False + + + gain5 + 0 + + + ant6 + + + + bw6 + 0 + + + center_freq6 + 0 + + + norm_gain6 + False + + + gain6 + 0 + + + ant7 + + + + bw7 + 0 + + + center_freq7 + 0 + + + norm_gain7 + False + + + gain7 + 0 + + + ant8 + + + + bw8 + 0 + + + center_freq8 + 0 + + + norm_gain8 + False + + + gain8 + 0 + + + ant9 + + + + bw9 + 0 + + + center_freq9 + 0 + + + norm_gain9 + False + + + gain9 + 0 + + + clock_rate + 0.0 + + + comment + + + + affinity + + + + dev_addr + "" + + + dev_args + "" + + + _enabled + 1 + + + _coordinate + (1072, 376) + + + _rotation + 0 + + + id + uhd_usrp_sink_0 + + + type + fc32 + + + clock_source0 + + + + sd_spec0 + + + + time_source0 + + + + clock_source1 + + + + sd_spec1 + + + + time_source1 + + + + clock_source2 + + + + sd_spec2 + + + + time_source2 + + + + clock_source3 + + + + sd_spec3 + + + + time_source3 + + + + clock_source4 + + + + sd_spec4 + + + + time_source4 + + + + clock_source5 + + + + sd_spec5 + + + + time_source5 + + + + clock_source6 + + + + sd_spec6 + + + + time_source6 + + + + clock_source7 + + + + sd_spec7 + + + + time_source7 + + + + nchan + 1 + + + num_mboards + 1 + + + samp_rate + samp_rate + + + hide_cmd_port + False + + + hide_lo_controls + True + + + stream_args + + + + stream_chans + [] + + + sync + + + + len_tag_name + + + + otw + + + + + uhd_usrp_source + + alias + + + + ant0 + RX2 + + + bw0 + 0 + + + center_freq0 + 2460000000 + + + dc_offs_enb0 + "" + + + iq_imbal_enb0 + "" + + + norm_gain0 + True + + + gain0 + 0 + + + lo_export0 + False + + + lo_source0 + internal + + + ant10 + + + + bw10 + 0 + + + center_freq10 + 0 + + + dc_offs_enb10 + "" + + + iq_imbal_enb10 + "" + + + norm_gain10 + False + + + gain10 + 0 + + + lo_export10 + False + + + lo_source10 + internal + + + ant11 + + + + bw11 + 0 + + + center_freq11 + 0 + + + dc_offs_enb11 + "" + + + iq_imbal_enb11 + "" + + + norm_gain11 + False + + + gain11 + 0 + + + lo_export11 + False + + + lo_source11 + internal + + + ant12 + + + + bw12 + 0 + + + center_freq12 + 0 + + + dc_offs_enb12 + "" + + + iq_imbal_enb12 + "" + + + norm_gain12 + False + + + gain12 + 0 + + + lo_export12 + False + + + lo_source12 + internal + + + ant13 + + + + bw13 + 0 + + + center_freq13 + 0 + + + dc_offs_enb13 + "" + + + iq_imbal_enb13 + "" + + + norm_gain13 + False + + + gain13 + 0 + + + lo_export13 + False + + + lo_source13 + internal + + + ant14 + + + + bw14 + 0 + + + center_freq14 + 0 + + + dc_offs_enb14 + "" + + + iq_imbal_enb14 + "" + + + norm_gain14 + False + + + gain14 + 0 + + + lo_export14 + False + + + lo_source14 + internal + + + ant15 + + + + bw15 + 0 + + + center_freq15 + 0 + + + dc_offs_enb15 + "" + + + iq_imbal_enb15 + "" + + + norm_gain15 + False + + + gain15 + 0 + + + lo_export15 + False + + + lo_source15 + internal + + + ant16 + + + + bw16 + 0 + + + center_freq16 + 0 + + + dc_offs_enb16 + "" + + + iq_imbal_enb16 + "" + + + norm_gain16 + False + + + gain16 + 0 + + + lo_export16 + False + + + lo_source16 + internal + + + ant17 + + + + bw17 + 0 + + + center_freq17 + 0 + + + dc_offs_enb17 + "" + + + iq_imbal_enb17 + "" + + + norm_gain17 + False + + + gain17 + 0 + + + lo_export17 + False + + + lo_source17 + internal + + + ant18 + + + + bw18 + 0 + + + center_freq18 + 0 + + + dc_offs_enb18 + "" + + + iq_imbal_enb18 + "" + + + norm_gain18 + False + + + gain18 + 0 + + + lo_export18 + False + + + lo_source18 + internal + + + ant19 + + + + bw19 + 0 + + + center_freq19 + 0 + + + dc_offs_enb19 + "" + + + iq_imbal_enb19 + "" + + + norm_gain19 + False + + + gain19 + 0 + + + lo_export19 + False + + + lo_source19 + internal + + + ant1 + + + + bw1 + 0 + + + center_freq1 + 0 + + + dc_offs_enb1 + "" + + + iq_imbal_enb1 + "" + + + norm_gain1 + False + + + gain1 + 0 + + + lo_export1 + False + + + lo_source1 + internal + + + ant20 + + + + bw20 + 0 + + + center_freq20 + 0 + + + dc_offs_enb20 + "" + + + iq_imbal_enb20 + "" + + + norm_gain20 + False + + + gain20 + 0 + + + lo_export20 + False + + + lo_source20 + internal + + + ant21 + + + + bw21 + 0 + + + center_freq21 + 0 + + + dc_offs_enb21 + "" + + + iq_imbal_enb21 + "" + + + norm_gain21 + False + + + gain21 + 0 + + + lo_export21 + False + + + lo_source21 + internal + + + ant22 + + + + bw22 + 0 + + + center_freq22 + 0 + + + dc_offs_enb22 + "" + + + iq_imbal_enb22 + "" + + + norm_gain22 + False + + + gain22 + 0 + + + lo_export22 + False + + + lo_source22 + internal + + + ant23 + + + + bw23 + 0 + + + center_freq23 + 0 + + + dc_offs_enb23 + "" + + + iq_imbal_enb23 + "" + + + norm_gain23 + False + + + gain23 + 0 + + + lo_export23 + False + + + lo_source23 + internal + + + ant24 + + + + bw24 + 0 + + + center_freq24 + 0 + + + dc_offs_enb24 + "" + + + iq_imbal_enb24 + "" + + + norm_gain24 + False + + + gain24 + 0 + + + lo_export24 + False + + + lo_source24 + internal + + + ant25 + + + + bw25 + 0 + + + center_freq25 + 0 + + + dc_offs_enb25 + "" + + + iq_imbal_enb25 + "" + + + norm_gain25 + False + + + gain25 + 0 + + + lo_export25 + False + + + lo_source25 + internal + + + ant26 + + + + bw26 + 0 + + + center_freq26 + 0 + + + dc_offs_enb26 + "" + + + iq_imbal_enb26 + "" + + + norm_gain26 + False + + + gain26 + 0 + + + lo_export26 + False + + + lo_source26 + internal + + + ant27 + + + + bw27 + 0 + + + center_freq27 + 0 + + + dc_offs_enb27 + "" + + + iq_imbal_enb27 + "" + + + norm_gain27 + False + + + gain27 + 0 + + + lo_export27 + False + + + lo_source27 + internal + + + ant28 + + + + bw28 + 0 + + + center_freq28 + 0 + + + dc_offs_enb28 + "" + + + iq_imbal_enb28 + "" + + + norm_gain28 + False + + + gain28 + 0 + + + lo_export28 + False + + + lo_source28 + internal + + + ant29 + + + + bw29 + 0 + + + center_freq29 + 0 + + + dc_offs_enb29 + "" + + + iq_imbal_enb29 + "" + + + norm_gain29 + False + + + gain29 + 0 + + + lo_export29 + False + + + lo_source29 + internal + + + ant2 + + + + bw2 + 0 + + + center_freq2 + 0 + + + dc_offs_enb2 + "" + + + iq_imbal_enb2 + "" + + + norm_gain2 + False + + + gain2 + 0 + + + lo_export2 + False + + + lo_source2 + internal + + + ant30 + + + + bw30 + 0 + + + center_freq30 + 0 + + + dc_offs_enb30 + "" + + + iq_imbal_enb30 + "" + + + norm_gain30 + False + + + gain30 + 0 + + + lo_export30 + False + + + lo_source30 + internal + + + ant31 + + + + bw31 + 0 + + + center_freq31 + 0 + + + dc_offs_enb31 + "" + + + iq_imbal_enb31 + "" + + + norm_gain31 + False + + + gain31 + 0 + + + lo_export31 + False + + + lo_source31 + internal + + + ant3 + + + + bw3 + 0 + + + center_freq3 + 0 + + + dc_offs_enb3 + "" + + + iq_imbal_enb3 + "" + + + norm_gain3 + False + + + gain3 + 0 + + + lo_export3 + False + + + lo_source3 + internal + + + ant4 + + + + bw4 + 0 + + + center_freq4 + 0 + + + dc_offs_enb4 + "" + + + iq_imbal_enb4 + "" + + + norm_gain4 + False + + + gain4 + 0 + + + lo_export4 + False + + + lo_source4 + internal + + + ant5 + + + + bw5 + 0 + + + center_freq5 + 0 + + + dc_offs_enb5 + "" + + + iq_imbal_enb5 + "" + + + norm_gain5 + False + + + gain5 + 0 + + + lo_export5 + False + + + lo_source5 + internal + + + ant6 + + + + bw6 + 0 + + + center_freq6 + 0 + + + dc_offs_enb6 + "" + + + iq_imbal_enb6 + "" + + + norm_gain6 + False + + + gain6 + 0 + + + lo_export6 + False + + + lo_source6 + internal + + + ant7 + + + + bw7 + 0 + + + center_freq7 + 0 + + + dc_offs_enb7 + "" + + + iq_imbal_enb7 + "" + + + norm_gain7 + False + + + gain7 + 0 + + + lo_export7 + False + + + lo_source7 + internal + + + ant8 + + + + bw8 + 0 + + + center_freq8 + 0 + + + dc_offs_enb8 + "" + + + iq_imbal_enb8 + "" + + + norm_gain8 + False + + + gain8 + 0 + + + lo_export8 + False + + + lo_source8 + internal + + + ant9 + + + + bw9 + 0 + + + center_freq9 + 0 + + + dc_offs_enb9 + "" + + + iq_imbal_enb9 + "" + + + norm_gain9 + False + + + gain9 + 0 + + + lo_export9 + False + + + lo_source9 + internal + + + clock_rate + 0.0 + + + comment + + + + affinity + + + + dev_addr + "" + + + dev_args + "" + + + _enabled + 1 + + + _coordinate + (80, 560) + + + _rotation + 0 + + + id + uhd_usrp_source_0 + + + maxoutbuf + 0 + + + clock_source0 + + + + sd_spec0 + + + + time_source0 + + + + clock_source1 + + + + sd_spec1 + + + + time_source1 + + + + clock_source2 + + + + sd_spec2 + + + + time_source2 + + + + clock_source3 + + + + sd_spec3 + + + + time_source3 + + + + clock_source4 + + + + sd_spec4 + + + + time_source4 + + + + clock_source5 + + + + sd_spec5 + + + + time_source5 + + + + clock_source6 + + + + sd_spec6 + + + + time_source6 + + + + clock_source7 + + + + sd_spec7 + + + + time_source7 + + + + minoutbuf + 0 + + + nchan + 1 + + + num_mboards + 1 + + + type + fc32 + + + samp_rate + samp_rate + + + hide_cmd_port + False + + + hide_lo_controls + True + + + stream_args + + + + stream_chans + [] + + + sync + + + + otw + + + + + wxgui_fftsink2 + + avg_alpha + 0 + + + average + False + + + baseband_freq + 0 + + + alias + + + + comment + + + + affinity + + + + _enabled + 0 + + + fft_size + 1024 + + + freqvar + None + + + _coordinate + (960, 56) + + + _rotation + 0 + + + grid_pos + + + + id + wxgui_fftsink2_0 + + + notebook + + + + peak_hold + False + + + ref_level + 0 + + + ref_scale + 2.0 + + + fft_rate + 15 + + + samp_rate + samp_rate + + + title + FFT Plot + + + type + complex + + + win_size + + + + win + None + + + y_divs + 10 + + + y_per_div + 10 + + + + wxgui_fftsink2 + + avg_alpha + 0 + + + average + False + + + baseband_freq + 0 + + + alias + + + + comment + + + + affinity + + + + _enabled + 0 + + + fft_size + 1024 + + + freqvar + None + + + _coordinate + (712, 720) + + + _rotation + 0 + + + grid_pos + + + + id + wxgui_fftsink2_1 + + + notebook + + + + peak_hold + False + + + ref_level + 0 + + + ref_scale + 2.0 + + + fft_rate + 15 + + + samp_rate + samp_rate + + + title + FFT Plot + + + type + complex + + + win_size + + + + win + None + + + y_divs + 10 + + + y_per_div + 10 + + + + blks2_packet_decoder_0 + blocks_stream_to_tagged_stream_0 + 0 + 0 + + + blks2_packet_encoder_0 + digital_gmsk_mod_0 + 0 + 0 + + + blocks_multiply_const_vxx_0 + qtgui_time_sink_x_0 + 0 + 0 + + + blocks_multiply_const_vxx_0 + uhd_usrp_sink_0 + 0 + 0 + + + blocks_multiply_const_vxx_0 + wxgui_fftsink2_0 + 0 + 0 + + + blocks_multiply_const_vxx_0_0 + low_pass_filter_0 + 0 + 0 + + + blocks_pdu_to_tagged_stream_0 + blocks_tag_gate_0 + 0 + 0 + + + blocks_socket_pdu_0 + blocks_pdu_to_tagged_stream_0 + pdus + pdus + + + blocks_stream_to_tagged_stream_0 + blocks_tagged_stream_to_pdu_0 + 0 + 0 + + + blocks_tag_gate_0 + blks2_packet_encoder_0 + 0 + 0 + + + blocks_tagged_stream_to_pdu_0 + blocks_socket_pdu_1 + pdus + pdus + + + digital_gmsk_demod_0 + blks2_packet_decoder_0 + 0 + 0 + + + digital_gmsk_mod_0 + blocks_multiply_const_vxx_0 + 0 + 0 + + + low_pass_filter_0 + digital_gmsk_demod_0 + 0 + 0 + + + low_pass_filter_0 + qtgui_time_sink_x_1 + 0 + 0 + + + low_pass_filter_0 + wxgui_fftsink2_1 + 0 + 0 + + + uhd_usrp_source_0 + blocks_multiply_const_vxx_0_0 + 0 + 0 + + diff --git a/TestGraph/preamble.txt b/TestGraph/preamble.txt new file mode 100644 index 0000000..8be5b81 --- /dev/null +++ b/TestGraph/preamble.txt @@ -0,0 +1 @@ +1010101110101100000111010101011010010000100101010111010110000011101010101101001000010010101011101011000001110101010110100100001001010101110101100000111010101011010010000100101010111010110000011101010101101001000010010101011101011000001110101010110100100001001010101110101100000111010101011010010000100101010111010110000011101010101101001000010010101011101011000001110101010110100100001001010101110101100000111010101011010010000100101010111010110000011101010101101001000010010101011101011000001110101010110100100001001010101110101100000111010101011010010000100101010111010110000011101010101101001000010010101011101011000001110101010110100100001001010101110101100000111010101011010010000100 \ No newline at end of file diff --git a/TestGraph/top_block.py b/TestGraph/top_block.py new file mode 100644 index 0000000..a274dd8 --- /dev/null +++ b/TestGraph/top_block.py @@ -0,0 +1,297 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +################################################## +# GNU Radio Python Flow Graph +# Title: Top Block +# Generated: Thu May 31 10:12:56 2018 +################################################## + +if __name__ == '__main__': + import ctypes + import sys + if sys.platform.startswith('linux'): + try: + x11 = ctypes.cdll.LoadLibrary('libX11.so') + x11.XInitThreads() + except: + print "Warning: failed to XInitThreads()" + +from PyQt4 import Qt +from gnuradio import blocks +from gnuradio import digital +from gnuradio import eng_notation +from gnuradio import filter +from gnuradio import gr +from gnuradio import qtgui +from gnuradio import uhd +from gnuradio.eng_option import eng_option +from gnuradio.filter import firdes +from grc_gnuradio import blks2 as grc_blks2 +from optparse import OptionParser +import sip +import sys +import time +from gnuradio import qtgui + + +class top_block(gr.top_block, Qt.QWidget): + + def __init__(self): + gr.top_block.__init__(self, "Top Block") + Qt.QWidget.__init__(self) + self.setWindowTitle("Top Block") + 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", "top_block") + self.restoreGeometry(self.settings.value("geometry").toByteArray()) + + ################################################## + # Variables + ################################################## + self.samp_rate = samp_rate = 1000000 + self.samp_per_symb = samp_per_symb = 10 + + ################################################## + # Blocks + ################################################## + 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(2460000000, 0) + self.uhd_usrp_source_0.set_normalized_gain(0, 0) + self.uhd_usrp_source_0.set_antenna('RX2', 0) + self.uhd_usrp_sink_0 = uhd.usrp_sink( + ",".join(("", "")), + uhd.stream_args( + cpu_format="fc32", + channels=range(1), + ), + ) + self.uhd_usrp_sink_0.set_samp_rate(samp_rate) + self.uhd_usrp_sink_0.set_center_freq(2460000000, 0) + self.uhd_usrp_sink_0.set_normalized_gain(0.9, 0) + self.uhd_usrp_sink_0.set_antenna('TX/RX', 0) + self.qtgui_time_sink_x_1 = qtgui.time_sink_c( + 1024, #size + samp_rate, #samp_rate + "", #name + 1 #number of inputs + ) + self.qtgui_time_sink_x_1.set_update_time(0.10) + self.qtgui_time_sink_x_1.set_y_axis(-1, 1) + + self.qtgui_time_sink_x_1.set_y_label('Amplitude', "") + + self.qtgui_time_sink_x_1.enable_tags(-1, True) + self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") + self.qtgui_time_sink_x_1.enable_autoscale(False) + self.qtgui_time_sink_x_1.enable_grid(False) + self.qtgui_time_sink_x_1.enable_axis_labels(True) + self.qtgui_time_sink_x_1.enable_control_panel(False) + + if not True: + self.qtgui_time_sink_x_1.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): + if len(labels[i]) == 0: + if(i % 2 == 0): + self.qtgui_time_sink_x_1.set_line_label(i, "Re{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_1.set_line_label(i, "Im{{Data {0}}}".format(i/2)) + else: + self.qtgui_time_sink_x_1.set_line_label(i, labels[i]) + self.qtgui_time_sink_x_1.set_line_width(i, widths[i]) + self.qtgui_time_sink_x_1.set_line_color(i, colors[i]) + self.qtgui_time_sink_x_1.set_line_style(i, styles[i]) + self.qtgui_time_sink_x_1.set_line_marker(i, markers[i]) + self.qtgui_time_sink_x_1.set_line_alpha(i, alphas[i]) + + self._qtgui_time_sink_x_1_win = sip.wrapinstance(self.qtgui_time_sink_x_1.pyqwidget(), Qt.QWidget) + self.top_layout.addWidget(self._qtgui_time_sink_x_1_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(-1, 1) + + 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_axis_labels(True) + self.qtgui_time_sink_x_0.enable_control_panel(False) + + 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): + 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.top_layout.addWidget(self._qtgui_time_sink_x_0_win) + self.low_pass_filter_0 = filter.fir_filter_ccf(1, firdes.low_pass( + 1, samp_rate, 200000, 50000, firdes.WIN_HAMMING, 6.76)) + self.digital_gmsk_mod_0 = digital.gmsk_mod( + samples_per_symbol=samp_per_symb, + bt=0.35, + verbose=False, + log=False, + ) + self.digital_gmsk_demod_0 = digital.gmsk_demod( + samples_per_symbol=samp_per_symb, + gain_mu=0.175, + mu=0.5, + omega_relative_limit=0.005, + freq_error=0.0, + verbose=False, + log=False, + ) + self.blocks_tagged_stream_to_pdu_0 = blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len') + self.blocks_tag_gate_0 = blocks.tag_gate(gr.sizeof_char * 1, False) + self.blocks_stream_to_tagged_stream_0 = blocks.stream_to_tagged_stream(gr.sizeof_char, 1, 1, 'packet_len') + self.blocks_socket_pdu_1 = blocks.socket_pdu("UDP_CLIENT", 'localhost', '52003', 15000, False) + self.blocks_socket_pdu_0 = blocks.socket_pdu("TCP_SERVER", '', '52002', 15000, False) + self.blocks_pdu_to_tagged_stream_0 = blocks.pdu_to_tagged_stream(blocks.byte_t, 'packet_len') + self.blocks_multiply_const_vxx_0_0 = blocks.multiply_const_vcc((1, )) + self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((1, )) + self.blks2_packet_encoder_0 = grc_blks2.packet_mod_b(grc_blks2.packet_encoder( + samples_per_symbol=samp_per_symb, + bits_per_symbol=1, + preamble='', + access_code='', + pad_for_usrp=True, + ), + payload_length=1, + ) + self.blks2_packet_decoder_0 = grc_blks2.packet_demod_b(grc_blks2.packet_decoder( + access_code='', + threshold=-1, + callback=lambda ok, payload: self.blks2_packet_decoder_0.recv_pkt(ok, payload), + ), + ) + + ################################################## + # Connections + ################################################## + self.msg_connect((self.blocks_socket_pdu_0, 'pdus'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) + self.msg_connect((self.blocks_tagged_stream_to_pdu_0, 'pdus'), (self.blocks_socket_pdu_1, 'pdus')) + self.connect((self.blks2_packet_decoder_0, 0), (self.blocks_stream_to_tagged_stream_0, 0)) + self.connect((self.blks2_packet_encoder_0, 0), (self.digital_gmsk_mod_0, 0)) + self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_time_sink_x_0, 0)) + self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 0)) + self.connect((self.blocks_multiply_const_vxx_0_0, 0), (self.low_pass_filter_0, 0)) + self.connect((self.blocks_pdu_to_tagged_stream_0, 0), (self.blocks_tag_gate_0, 0)) + self.connect((self.blocks_stream_to_tagged_stream_0, 0), (self.blocks_tagged_stream_to_pdu_0, 0)) + self.connect((self.blocks_tag_gate_0, 0), (self.blks2_packet_encoder_0, 0)) + self.connect((self.digital_gmsk_demod_0, 0), (self.blks2_packet_decoder_0, 0)) + self.connect((self.digital_gmsk_mod_0, 0), (self.blocks_multiply_const_vxx_0, 0)) + self.connect((self.low_pass_filter_0, 0), (self.digital_gmsk_demod_0, 0)) + self.connect((self.low_pass_filter_0, 0), (self.qtgui_time_sink_x_1, 0)) + self.connect((self.uhd_usrp_source_0, 0), (self.blocks_multiply_const_vxx_0_0, 0)) + + def closeEvent(self, event): + self.settings = Qt.QSettings("GNU Radio", "top_block") + self.settings.setValue("geometry", self.saveGeometry()) + event.accept() + + def get_samp_rate(self): + return self.samp_rate + + def set_samp_rate(self, samp_rate): + self.samp_rate = samp_rate + self.uhd_usrp_source_0.set_samp_rate(self.samp_rate) + self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate) + self.qtgui_time_sink_x_1.set_samp_rate(self.samp_rate) + self.qtgui_time_sink_x_0.set_samp_rate(self.samp_rate) + self.low_pass_filter_0.set_taps(firdes.low_pass(1, self.samp_rate, 200000, 50000, firdes.WIN_HAMMING, 6.76)) + + def get_samp_per_symb(self): + return self.samp_per_symb + + def set_samp_per_symb(self, samp_per_symb): + self.samp_per_symb = samp_per_symb + + +def main(top_block_cls=top_block, options=None): + + from distutils.version import StrictVersion + if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): + style = gr.prefs().get_string('qtgui', 'style', 'raster') + Qt.QApplication.setGraphicsSystem(style) + qapp = Qt.QApplication(sys.argv) + + tb = top_block_cls() + tb.start() + tb.show() + + def quitting(): + tb.stop() + tb.wait() + qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) + qapp.exec_() + + +if __name__ == '__main__': + main()