def __init__(self): gr.top_block.__init__(self, "Dvbt Tx") ################################################## # Variables ################################################## self._bandwidth_config = ConfigParser.ConfigParser() self._bandwidth_config.read('./dvbt.conf') try: bandwidth = self._bandwidth_config.getint('dvbt', 'bandwidth') except: bandwidth = 8000000 self.bandwidth = bandwidth self.samp_rate = samp_rate = (bandwidth / 7) * 8 self._rf_gain_config = ConfigParser.ConfigParser() self._rf_gain_config.read('./dvbt.conf') try: rf_gain = self._rf_gain_config.getint('hackrf', 'rf_gain') except: rf_gain = 0 self.rf_gain = rf_gain self._mode_config = ConfigParser.ConfigParser() self._mode_config.read('./dvbt.conf') try: mode = self._mode_config.get('dvbt', 'mode') except: mode = 0 self.mode = mode self._if_gain_config = ConfigParser.ConfigParser() self._if_gain_config.read('./dvbt.conf') try: if_gain = self._if_gain_config.getint('hackrf', 'if_gain') except: if_gain = 0 self.if_gain = if_gain self._guard_interval_config = ConfigParser.ConfigParser() self._guard_interval_config.read('./dvbt.conf') try: guard_interval = self._guard_interval_config.get( 'dvbt', 'guard_interval') except: guard_interval = 0 self.guard_interval = guard_interval self._frequency_config = ConfigParser.ConfigParser() self._frequency_config.read('./dvbt.conf') try: frequency = self._frequency_config.getint('hackrf', 'frequency') except: frequency = 858000000 self.frequency = frequency self._constellation_config = ConfigParser.ConfigParser() self._constellation_config.read('./dvbt.conf') try: constellation = self._constellation_config.get( 'dvbt', 'constellation') except: constellation = 0 self.constellation = constellation self._coderate_config = ConfigParser.ConfigParser() self._coderate_config.read('./dvbt.conf') try: coderate = self._coderate_config.get('dvbt', 'coderate') except: coderate = 0 self.coderate = coderate infile = str(sys.argv[1]) #Constellation QPSK 16QAM 64QAM if constellation == "QPSK": const = dtv.MOD_QPSK elif constellation == "16QAM": const = dtv.MOD_16QAM elif constellation == "64QAM": const = dtv.MOD_64QAM else: sys.stderr.write( "CONSTELLATION IN CONFIG WRONG! Values: QPSK, 16QAM or 64QAM \n" ) sys.exit(1) # Coderate 1/2 2/3 3/4 5/6 7/8 if coderate == "1/2": codr = dtv.C1_2 elif coderate == "2/3": codr = dtv.C2_3 elif coderate == "3/4": codr = dtv.C3_4 elif coderate == "5/6": codr = dtv.C5_6 elif coderate == "7/8": codr = dtv.C7_8 else: sys.stderr.write( "CODERATE IN CONFIG WRONG! Values: 1/2, 2/3, 3/4, 5/6 or 7/8 \n" ) sys.exit(1) if mode == "2k": factor = 1 carriers = 2048 modus = dtv.T2k elif mode == "8k": factor = 4 carriers = 8192 modus = dtv.T8k else: sys.stderr.write("MODE IN CONFIG WRONG! Values: 2k or 8k \n") sys.exit(1) #guard_interval dtv.GI_1_32 1/4 1/8 1/16 1/32 if guard_interval == "1/4": guardi = dtv.GI_1_4 gi = carriers / 4 elif guard_interval == "1/8": guardi = dtv.GI_1_8 gi = carriers / 8 elif guard_interval == "1/16": guardi = dtv.GI_1_16 gi = carriers / 16 elif guard_interval == "1/32": guardi = dtv.GI_1_32 gi = carriers / 32 else: sys.stderr.write( "GUARD_INTERVAL IN CONFIG WRONG! Values: 1/4, 1/8, 1/16 or 1/32 \n" ) sys.exit(1) ################################################## # Blocks ################################################## self.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " + '') self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(frequency, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(rf_gain, 0) self.osmosdr_sink_0.set_if_gain(if_gain, 0) self.osmosdr_sink_0.set_bb_gain(0, 0) self.osmosdr_sink_0.set_antenna('', 0) self.osmosdr_sink_0.set_bandwidth(0, 0) self.fft_vxx_0 = fft.fft_vcc(carriers, False, (window.rectangular(carriers)), True, 1) self.dtv_dvbt_symbol_inner_interleaver_0 = dtv.dvbt_symbol_inner_interleaver( (1512 * factor), modus, 1) self.dtv_dvbt_reference_signals_0 = dtv.dvbt_reference_signals( gr.sizeof_gr_complex, (1512 * factor), carriers, const, dtv.NH, codr, codr, guardi, modus, 1, 0) self.dtv_dvbt_reed_solomon_enc_0 = dtv.dvbt_reed_solomon_enc( 2, 8, 0x11d, 255, 239, 8, 51, (8 * factor)) self.dtv_dvbt_map_0 = dtv.dvbt_map((1512 * factor), const, dtv.NH, modus, 1) self.dtv_dvbt_inner_coder_0 = dtv.dvbt_inner_coder( 1, (1512 * factor), const, dtv.NH, codr) self.dtv_dvbt_energy_dispersal_0 = dtv.dvbt_energy_dispersal(1 * factor) self.dtv_dvbt_convolutional_interleaver_0 = dtv.dvbt_convolutional_interleaver( (136 * factor), 12, 17) self.dtv_dvbt_bit_inner_interleaver_0 = dtv.dvbt_bit_inner_interleaver( (1512 * factor), const, dtv.NH, modus) self.digital_ofdm_cyclic_prefixer_0 = digital.ofdm_cyclic_prefixer( carriers, carriers + (gi), 0, '') self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc( (0.0022097087, )) if infile == "-": self.blocks_file_descriptor_source_0 = blocks.file_descriptor_source( gr.sizeof_char * 1, 0, True) else: self.blocks_file_source_0 = blocks.file_source( gr.sizeof_char * 1, infile, True) ################################################## # Connections ################################################## if infile == "-": self.connect((self.blocks_file_descriptor_source_0, 0), (self.dtv_dvbt_energy_dispersal_0, 0)) else: self.connect((self.blocks_file_source_0, 0), (self.dtv_dvbt_energy_dispersal_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.osmosdr_sink_0, 0)) self.connect((self.digital_ofdm_cyclic_prefixer_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.dtv_dvbt_bit_inner_interleaver_0, 0), (self.dtv_dvbt_symbol_inner_interleaver_0, 0)) self.connect((self.dtv_dvbt_convolutional_interleaver_0, 0), (self.dtv_dvbt_inner_coder_0, 0)) self.connect((self.dtv_dvbt_energy_dispersal_0, 0), (self.dtv_dvbt_reed_solomon_enc_0, 0)) self.connect((self.dtv_dvbt_inner_coder_0, 0), (self.dtv_dvbt_bit_inner_interleaver_0, 0)) self.connect((self.dtv_dvbt_map_0, 0), (self.dtv_dvbt_reference_signals_0, 0)) self.connect((self.dtv_dvbt_reed_solomon_enc_0, 0), (self.dtv_dvbt_convolutional_interleaver_0, 0)) self.connect((self.dtv_dvbt_reference_signals_0, 0), (self.fft_vxx_0, 0)) self.connect((self.dtv_dvbt_symbol_inner_interleaver_0, 0), (self.dtv_dvbt_map_0, 0)) self.connect((self.fft_vxx_0, 0), (self.digital_ofdm_cyclic_prefixer_0, 0))
def main(args): nargs = len(args) if nargs == 1: port = int(args[0]) outfile = None elif nargs == 2: port = int(args[0]) outfile = args[1] else: sys.stderr.write("Usage: dvbt-hackrf.py port [output_file]\n"); sys.exit(1) channel_mhz = 6 mode = dtv.T2k code_rate = dtv.C1_2 constellation = dtv.MOD_QPSK guard_interval = dtv.GI_1_32 symbol_rate = channel_mhz * 8000000.0 / 7 center_freq = 441000000 rf_gain = 14 if_gain = 40 if mode == dtv.T2k: factor = 1 carriers = 2048 elif mode == dtv.T8k: factor = 4 carriers = 8192 if guard_interval == dtv.GI_1_32: gi = carriers / 32 elif guard_interval == dtv.GI_1_16: gi = carriers / 16 elif guard_interval == dtv.GI_1_8: gi = carriers / 8 elif guard_interval == dtv.GI_1_4: gi = carriers / 4 if channel_mhz == 8: bandwidth = 8750000 elif channel_mhz == 7: bandwidth = 7000000 elif channel_mhz == 6: bandwidth = 6000000 elif channel_mhz == 5: bandwidth = 5000000 else: bandwidth = 8750000 tb = gr.top_block() src = grc_blks2.tcp_source(gr.sizeof_char*1, "127.0.0.1", port, True) dvbt_energy_dispersal = dtv.dvbt_energy_dispersal(1 * factor) dvbt_reed_solomon_enc = dtv.dvbt_reed_solomon_enc(2, 8, 0x11d, 255, 239, 8, 51, (8 * factor)) dvbt_convolutional_interleaver = dtv.dvbt_convolutional_interleaver((136 * factor), 12, 17) dvbt_inner_coder = dtv.dvbt_inner_coder(1, (1512 * factor), constellation, dtv.NH, code_rate) dvbt_bit_inner_interleaver = dtv.dvbt_bit_inner_interleaver((1512 * factor), constellation, dtv.NH, mode) dvbt_symbol_inner_interleaver = dtv.dvbt_symbol_inner_interleaver((1512 * factor), mode, 1) dvbt_map = dtv.dvbt_map((1512 * factor), constellation, dtv.NH, mode, 1) dvbt_reference_signals = dtv.dvbt_reference_signals(gr.sizeof_gr_complex, (1512 * factor), carriers, constellation, dtv.NH, code_rate, code_rate, dtv.GI_1_32, mode, 0, 0) fft_vxx = fft.fft_vcc(carriers, False, (window.rectangular(carriers)), True, 10) digital_ofdm_cyclic_prefixer = digital.ofdm_cyclic_prefixer(carriers, carriers+(gi), 0, "") blocks_multiply_const_vxx = blocks.multiply_const_vcc((0.0022097087 * 2.5, )) out = osmosdr.sink() out.set_sample_rate(symbol_rate) out.set_center_freq(center_freq, 0) out.set_freq_corr(0, 0) out.set_gain(rf_gain, 0) out.set_if_gain(if_gain, 0) out.set_bandwidth(bandwidth, 0) tb.connect(src, dvbt_energy_dispersal) tb.connect(dvbt_energy_dispersal, dvbt_reed_solomon_enc) tb.connect(dvbt_reed_solomon_enc, dvbt_convolutional_interleaver) tb.connect(dvbt_convolutional_interleaver, dvbt_inner_coder) tb.connect(dvbt_inner_coder, dvbt_bit_inner_interleaver) tb.connect(dvbt_bit_inner_interleaver, dvbt_symbol_inner_interleaver) tb.connect(dvbt_symbol_inner_interleaver, dvbt_map) tb.connect(dvbt_map, dvbt_reference_signals) tb.connect(dvbt_reference_signals, fft_vxx) tb.connect(fft_vxx, digital_ofdm_cyclic_prefixer) tb.connect(digital_ofdm_cyclic_prefixer, blocks_multiply_const_vxx) tb.connect(blocks_multiply_const_vxx, out) if outfile: dst = blocks.file_sink(gr.sizeof_gr_complex, outfile) tb.connect(blocks_multiply_const_vxx, dst) tb.run()
def main(args): d = 'Transmit a DVB-T signal using the bladeRF and gr-dtv' parser = argparse.ArgumentParser() mode_help = '# of carriers. Options: t2k, t8k (default).' parser.add_argument('-m', '--mode', dest='mode', default='t8k', type=str, help=mode_help) ch_help = 'channel width in MHz. Options: 5, 6, 7, 8 (default).' parser.add_argument('-c', '--channel', dest='channel', default=8, metavar='CH', type=int, help=ch_help) const_help = 'constellation. qpsk, qam16, qam64 (default).' parser.add_argument('-C', '--cons', dest='cons', default='qam64', metavar='TYPE', type=str, help=const_help) rate_help = 'Viterbi rate. 1/2, 2/3, 3/4, 5/6, 7/8 (default).' parser.add_argument('-r', '--rate', dest='rate', default='7/8', type=str, help=rate_help) guard_help = 'guard interval. 1/32 (default), 1/16, 1/8, 1/4.' parser.add_argument('-g', '--guard', dest='interval', default='1/32', metavar='D', type=str, help=guard_help) freq_help = 'center frequency (Hz). Default is 429e6.' parser.add_argument('-f', '--freq', dest='freq', default=429e6, type=float, help=freq_help) vga1_help = 'bladeRF TXVGA1 gain. Default is -6.' parser.add_argument('--txvga1', dest='txvga1', default=-6, metavar='gain', type=int, help=vga1_help) vga2_help = 'bladeRF TXVGA2 gain. Default is 9.' parser.add_argument('--txvga2', dest='txvga2', default=9, metavar='gain', type=int, help=vga2_help) outfile_help = 'write to specified file.' parser.add_argument('-o', '--output', dest='outfile', default=None, metavar='OUT', type=str, help=outfile_help) parser.add_argument('infile', metavar='input-file', type=str, help='Input file') args = parser.parse_args() print args if args.mode.lower() == 't2k': mode = dtv.T2k elif args.mode.lower() == 't8k': mode = dtv.T8k else: sys.stderr.write('Invalid mode provided: ' + args.mode + '\n') sys.exit(1) if args.channel < 5 or args.channel > 8: sys.stderr.write('Invalid channel: ' + str(args.channel) + '\n') sys.exit(1) else: channel_mhz = args.channel if args.cons.lower() == 'qpsk': constellation = dtv.MOD_QPSK elif args.cons.lower() == 'qam16': constellation = dtv.MOD_16QAM elif args.cons.lower() == 'qam64': constellation = dtv.MOD_64QAM else: sys.stderr.write('Invalid constellation type: ' + args.cons + '\n') sys.exit(1) if args.rate == '1/2': code_rate = dtv.C1_2 elif args.rate == '2/3': code_rate = dtv.C2_3 elif args.rate == '3/4': code_rate = dtv.C3_4 elif args.rate == '5/6': code_rate = dtv.C5_6 elif args.rate == '7/8': code_rate = dtv.C7_8 else: sys.stderr.write('Invalid Viterbi rate: ' + args.rate + '\n') sys.exit(1) if args.interval == '1/32': guard_interval = dtv.GI_1_32 elif args.interval == '1/16': guard_interval = dtv.GI_1_16 elif args.interval == '1/8': guard_interval = dtv.GI_1_8 elif args.interval == '1/4': guard_interval = dtv.GI_1_4 else: sys.stderr.write('Invalid guard interval: ' + args.interval + '\n') sys.exit(1) if args.freq < 300e6 or args.freq > 3.8e9: sys.stderr.write('Invalid center frequency: ' + str(args.freq) + '\n') sys.exit(1) else: center_freq = int(args.freq) if args.txvga1 < -35 or args.txvga1 > -4: sys.stderr.write('Invalid bladeRF TXVGA1 gain: ' + str(args.txvga1) + '\n') sys.exit(1) else: txvga1_gain = args.txvga1 if args.txvga2 < 0 or args.txvga2 > 25: sys.stderr.write('Invalid bladeRF TXVGA2 gain: ' + str(args.txvga2) + '\n') sys.exit(1) else: txvga2_gain = args.txvga2 infile = args.infile outfile = args.outfile symbol_rate = channel_mhz * 8000000.0 / 7 if mode == dtv.T2k: factor = 1 carriers = 2048 elif mode == dtv.T8k: factor = 4 carriers = 8192 if guard_interval == dtv.GI_1_32: gi = carriers / 32 elif guard_interval == dtv.GI_1_16: gi = carriers / 16 elif guard_interval == dtv.GI_1_8: gi = carriers / 8 elif guard_interval == dtv.GI_1_4: gi = carriers / 4 if channel_mhz == 8: bandwidth = 8750000 elif channel_mhz == 7: bandwidth = 7000000 elif channel_mhz == 6: bandwidth = 6000000 elif channel_mhz == 5: bandwidth = 5000000 else: bandwidth = 8750000 tb = gr.top_block() src = blocks.file_source(gr.sizeof_char, infile, True) dtv_dvbt_energy_dispersal = dtv.dvbt_energy_dispersal(1 * factor) dtv_dvbt_reed_solomon_enc = dtv.dvbt_reed_solomon_enc( 2, 8, 0x11d, 255, 239, 8, 51, (8 * factor)) dtv_dvbt_convolutional_interleaver = dtv.dvbt_convolutional_interleaver( (136 * factor), 12, 17) dtv_dvbt_inner_coder = dtv.dvbt_inner_coder(1, (1512 * factor), constellation, dtv.NH, code_rate) dtv_dvbt_bit_inner_interleaver = dtv.dvbt_bit_inner_interleaver( (1512 * factor), constellation, dtv.NH, mode) dtv_dvbt_symbol_inner_interleaver = dtv.dvbt_symbol_inner_interleaver( (1512 * factor), mode, 1) dtv_dvbt_map = dtv.dvbt_map((1512 * factor), constellation, dtv.NH, mode, 1) dtv_dvbt_reference_signals = dtv.dvbt_reference_signals( gr.sizeof_gr_complex, (1512 * factor), carriers, constellation, dtv.NH, code_rate, code_rate, guard_interval, mode, 0, 0) fft_vxx = fft.fft_vcc(carriers, False, (window.rectangular(carriers)), True, 10) digital_ofdm_cyclic_prefixer = digital.ofdm_cyclic_prefixer( carriers, carriers + (gi), 0, "") blocks_multiply_const_vxx = blocks.multiply_const_vcc((0.0022097087, )) out = osmosdr.sink(args="bladerf=0,buffers=128,buflen=32768") out.set_sample_rate(symbol_rate) out.set_center_freq(center_freq, 0) out.set_freq_corr(0, 0) out.set_gain(txvga2_gain, 0) out.set_bb_gain(txvga1_gain, 0) out.set_bandwidth(bandwidth, 0) tb.connect(src, dtv_dvbt_energy_dispersal) tb.connect(dtv_dvbt_energy_dispersal, dtv_dvbt_reed_solomon_enc) tb.connect(dtv_dvbt_reed_solomon_enc, dtv_dvbt_convolutional_interleaver) tb.connect(dtv_dvbt_convolutional_interleaver, dtv_dvbt_inner_coder) tb.connect(dtv_dvbt_inner_coder, dtv_dvbt_bit_inner_interleaver) tb.connect(dtv_dvbt_bit_inner_interleaver, dtv_dvbt_symbol_inner_interleaver) tb.connect(dtv_dvbt_symbol_inner_interleaver, dtv_dvbt_map) tb.connect(dtv_dvbt_map, dtv_dvbt_reference_signals) tb.connect(dtv_dvbt_reference_signals, fft_vxx) tb.connect(fft_vxx, digital_ofdm_cyclic_prefixer) tb.connect(digital_ofdm_cyclic_prefixer, blocks_multiply_const_vxx) tb.connect(blocks_multiply_const_vxx, out) if outfile: dst = blocks.file_sink(gr.sizeof_gr_complex, outfile) tb.connect(blocks_multiply_const_vxx, dst) tb.run()
def main(args): d = 'Transmit a DVB-T signal using the bladeRF and gr-dtv' parser = argparse.ArgumentParser() mode_help = '# of carriers. Options: t2k, t8k (default).' parser.add_argument('-m', '--mode', dest='mode', default='t8k', type=str, help=mode_help) ch_help = 'channel width in MHz. Options: 5, 6, 7, 8 (default).' parser.add_argument('-c', '--channel', dest='channel', default=8, metavar='CH', type=int, help=ch_help) const_help = 'constellation. qpsk, qam16, qam64 (default).' parser.add_argument('-C', '--cons', dest='cons', default='qam64', metavar='TYPE', type=str, help=const_help) rate_help = 'Viterbi rate. 1/2, 2/3, 3/4, 5/6, 7/8 (default).' parser.add_argument('-r', '--rate', dest='rate', default='7/8', type=str, help=rate_help) guard_help = 'guard interval. 1/32 (default), 1/16, 1/8, 1/4.' parser.add_argument('-g', '--guard', dest='interval', default='1/32', metavar='D', type=str, help=guard_help) freq_help = 'center frequency (Hz). Default is 429e6.' parser.add_argument('-f', '--freq', dest='freq', default=429e6, type=float, help=freq_help) vga1_help = 'bladeRF TXVGA1 gain. Default is -6.' parser.add_argument('--txvga1', dest='txvga1', default=-6, metavar='gain', type=int, help=vga1_help) vga2_help = 'bladeRF TXVGA2 gain. Default is 9.' parser.add_argument('--txvga2', dest='txvga2', default=9, metavar='gain', type=int, help=vga2_help) outfile_help = 'write to specified file.' parser.add_argument('-o', '--output', dest='outfile', default=None, metavar='OUT', type=str, help=outfile_help) parser.add_argument('infile', metavar='input-file', type=str, help='Input file') args = parser.parse_args() print args if args.mode.lower() == 't2k': mode = dtv.T2k elif args.mode.lower() == 't8k': mode = dtv.T8k else: sys.stderr.write('Invalid mode provided: ' + args.mode + '\n') sys.exit(1) if args.channel < 5 or args.channel > 8: sys.stderr.write('Invalid channel: ' + str(args.channel) + '\n') sys.exit(1) else: channel_mhz = args.channel if args.cons.lower() == 'qpsk': constellation = dtv.MOD_QPSK elif args.cons.lower() == 'qam16': constellation = dtv.MOD_16QAM elif args.cons.lower() == 'qam64': constellation = dtv.MOD_64QAM else: sys.stderr.write('Invalid constellation type: ' + args.cons + '\n') sys.exit(1) if args.rate == '1/2': code_rate = dtv.C1_2 elif args.rate == '2/3': code_rate = dtv.C2_3 elif args.rate == '3/4': code_rate = dtv.C3_4 elif args.rate == '5/6': code_rate = dtv.C5_6 elif args.rate == '7/8': code_rate = dtv.C7_8 else: sys.stderr.write('Invalid Viterbi rate: ' + args.rate + '\n') sys.exit(1) if args.interval == '1/32': guard_interval = dtv.GI_1_32 elif args.interval == '1/16': guard_interval = dtv.GI_1_16 elif args.interval == '1/8': guard_interval = dtv.GI_1_8 elif args.interval == '1/4': guard_interval = dtv.GI_1_4 else: sys.stderr.write('Invalid guard interval: ' + args.interval + '\n') sys.exit(1) if args.freq < 300e6 or args.freq > 3.8e9: sys.stderr.write('Invalid center frequency: ' + str(args.freq) + '\n') sys.exit(1) else: center_freq = int(args.freq) if args.txvga1 < -35 or args.txvga1 > -4: sys.stderr.write('Invalid bladeRF TXVGA1 gain: ' + str(args.txvga1) + '\n') sys.exit(1) else: txvga1_gain = args.txvga1 if args.txvga2 < 0 or args.txvga2 > 25: sys.stderr.write('Invalid bladeRF TXVGA2 gain: ' + str(args.txvga2) + '\n') sys.exit(1) else: txvga2_gain = args.txvga2 infile = args.infile outfile = args.outfile symbol_rate = channel_mhz * 8000000.0 / 7 if mode == dtv.T2k: factor = 1 carriers = 2048 elif mode == dtv.T8k: factor = 4 carriers = 8192 if guard_interval == dtv.GI_1_32: gi = carriers / 32 elif guard_interval == dtv.GI_1_16: gi = carriers / 16 elif guard_interval == dtv.GI_1_8: gi = carriers / 8 elif guard_interval == dtv.GI_1_4: gi = carriers / 4 if channel_mhz == 8: bandwidth = 8750000 elif channel_mhz == 7: bandwidth = 7000000 elif channel_mhz == 6: bandwidth = 6000000 elif channel_mhz == 5: bandwidth = 5000000 else: bandwidth = 8750000 tb = gr.top_block() src = blocks.file_source(gr.sizeof_char, infile, True) dtv_dvbt_energy_dispersal = dtv.dvbt_energy_dispersal(1 * factor) dtv_dvbt_reed_solomon_enc = dtv.dvbt_reed_solomon_enc(2, 8, 0x11d, 255, 239, 8, 51, (8 * factor)) dtv_dvbt_convolutional_interleaver = dtv.dvbt_convolutional_interleaver((136 * factor), 12, 17) dtv_dvbt_inner_coder = dtv.dvbt_inner_coder(1, (1512 * factor), constellation, dtv.NH, code_rate) dtv_dvbt_bit_inner_interleaver = dtv.dvbt_bit_inner_interleaver((1512 * factor), constellation, dtv.NH, mode) dtv_dvbt_symbol_inner_interleaver = dtv.dvbt_symbol_inner_interleaver((1512 * factor), mode, 1) dtv_dvbt_map = dtv.dvbt_map((1512 * factor), constellation, dtv.NH, mode, 1) dtv_dvbt_reference_signals = dtv.dvbt_reference_signals(gr.sizeof_gr_complex, (1512 * factor), carriers, constellation, dtv.NH, code_rate, code_rate, guard_interval, mode, 0, 0) fft_vxx = fft.fft_vcc(carriers, False, (window.rectangular(carriers)), True, 10) digital_ofdm_cyclic_prefixer = digital.ofdm_cyclic_prefixer(carriers, carriers+(gi), 0, "") blocks_multiply_const_vxx = blocks.multiply_const_vcc((0.0022097087, )) out = osmosdr.sink(args="bladerf=0,buffers=128,buflen=32768") out.set_sample_rate(symbol_rate) out.set_center_freq(center_freq, 0) out.set_freq_corr(0, 0) out.set_gain(txvga2_gain, 0) out.set_bb_gain(txvga1_gain, 0) out.set_bandwidth(bandwidth, 0) tb.connect(src, dtv_dvbt_energy_dispersal) tb.connect(dtv_dvbt_energy_dispersal, dtv_dvbt_reed_solomon_enc) tb.connect(dtv_dvbt_reed_solomon_enc, dtv_dvbt_convolutional_interleaver) tb.connect(dtv_dvbt_convolutional_interleaver, dtv_dvbt_inner_coder) tb.connect(dtv_dvbt_inner_coder, dtv_dvbt_bit_inner_interleaver) tb.connect(dtv_dvbt_bit_inner_interleaver, dtv_dvbt_symbol_inner_interleaver) tb.connect(dtv_dvbt_symbol_inner_interleaver, dtv_dvbt_map) tb.connect(dtv_dvbt_map, dtv_dvbt_reference_signals) tb.connect(dtv_dvbt_reference_signals, fft_vxx) tb.connect(fft_vxx, digital_ofdm_cyclic_prefixer) tb.connect(digital_ofdm_cyclic_prefixer, blocks_multiply_const_vxx) tb.connect(blocks_multiply_const_vxx, out) if outfile: dst = blocks.file_sink(gr.sizeof_gr_complex, outfile) tb.connect(blocks_multiply_const_vxx, dst) tb.run()
def __init__(self): gr.top_block.__init__(self, "Dvbt Tx") Qt.QWidget.__init__(self) self.setWindowTitle("Dvbt Tx") 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", "dvbt_tx") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.vga2_gain = vga2_gain = 10 self.vga1_gain = vga1_gain = -8 self.tx_gain = tx_gain = 50 self.samp_rate = samp_rate = (8000000.0 * 8) / 7 self.center_freq = center_freq = 429e6 ################################################## # Blocks ################################################## self._vga2_gain_range = Range(0, 25, 1, 10, 200) self._vga2_gain_win = RangeWidget(self._vga2_gain_range, self.set_vga2_gain, "vga2_gain", "counter_slider", int) self.top_layout.addWidget(self._vga2_gain_win) self._vga1_gain_range = Range(-35, -4, 1, -8, 200) self._vga1_gain_win = RangeWidget(self._vga1_gain_range, self.set_vga1_gain, "vga1_gain", "counter_slider", int) self.top_layout.addWidget(self._vga1_gain_win) self._tx_gain_range = Range(0, 89, 1, 50, 200) self._tx_gain_win = RangeWidget(self._tx_gain_range, self.set_tx_gain, "tx_gain", "counter_slider", float) self.top_layout.addWidget(self._tx_gain_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(-2, 2) self.qtgui_const_sink_x_0.set_x_axis(-2, 2) 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) self.qtgui_const_sink_x_0.enable_axis_labels(True) 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.top_layout.addWidget(self._qtgui_const_sink_x_0_win) self.osmosdr_sink_0 = osmosdr.sink(args="numchan=" + str(1) + " " + 'hackrf=0,buffers=128,buflen=32768') self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(center_freq, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(vga2_gain, 0) self.osmosdr_sink_0.set_if_gain(0, 0) self.osmosdr_sink_0.set_bb_gain(vga1_gain, 0) self.osmosdr_sink_0.set_antenna('', 0) self.osmosdr_sink_0.set_bandwidth(8750000, 0) self.fft_vxx_0 = fft.fft_vcc(8192, False, (window.rectangular(8192)), True, 1) self.dtv_dvbt_symbol_inner_interleaver_0 = dtv.dvbt_symbol_inner_interleaver( 6048, dtv.T8k, 1) self.dtv_dvbt_reference_signals_0 = dtv.dvbt_reference_signals( gr.sizeof_gr_complex, 6048, 8192, dtv.MOD_64QAM, dtv.NH, dtv.C2_3, dtv.C2_3, dtv.GI_1_32, dtv.T8k, 1, 0) self.dtv_dvbt_reed_solomon_enc_0 = dtv.dvbt_reed_solomon_enc( 2, 8, 0x11d, 255, 239, 8, 51, 8) self.dtv_dvbt_map_0 = dtv.dvbt_map(6048, dtv.MOD_64QAM, dtv.NH, dtv.T8k, 1) self.dtv_dvbt_inner_coder_0 = dtv.dvbt_inner_coder( 1, 6048, dtv.MOD_64QAM, dtv.NH, dtv.C2_3) self.dtv_dvbt_energy_dispersal_0 = dtv.dvbt_energy_dispersal(1) self.dtv_dvbt_convolutional_interleaver_0 = dtv.dvbt_convolutional_interleaver( 136, 12, 17) self.dtv_dvbt_bit_inner_interleaver_0 = dtv.dvbt_bit_inner_interleaver( 6048, dtv.MOD_64QAM, dtv.NH, dtv.T8k) self.digital_ofdm_cyclic_prefixer_0 = digital.ofdm_cyclic_prefixer( 8192, 8192 + 256, 0, '') self.blocks_vector_to_stream_0 = blocks.vector_to_stream( gr.sizeof_gr_complex * 1, 8192) self.blocks_multiply_const_xx_0 = blocks.multiply_const_cc( 0.0022097087) self.blocks_file_source_0 = blocks.file_source( gr.sizeof_char * 1, 'C:\\Users\\hamin\\Desktop\\Fall2020\\CSE310\\CSE310_FinalProject\\dmb\\honne2.ts', True) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.dtv_dvbt_energy_dispersal_0, 0)) self.connect((self.blocks_multiply_const_xx_0, 0), (self.osmosdr_sink_0, 0)) self.connect((self.blocks_vector_to_stream_0, 0), (self.qtgui_const_sink_x_0, 0)) self.connect((self.digital_ofdm_cyclic_prefixer_0, 0), (self.blocks_multiply_const_xx_0, 0)) self.connect((self.dtv_dvbt_bit_inner_interleaver_0, 0), (self.dtv_dvbt_symbol_inner_interleaver_0, 0)) self.connect((self.dtv_dvbt_convolutional_interleaver_0, 0), (self.dtv_dvbt_inner_coder_0, 0)) self.connect((self.dtv_dvbt_energy_dispersal_0, 0), (self.dtv_dvbt_reed_solomon_enc_0, 0)) self.connect((self.dtv_dvbt_inner_coder_0, 0), (self.dtv_dvbt_bit_inner_interleaver_0, 0)) self.connect((self.dtv_dvbt_map_0, 0), (self.dtv_dvbt_reference_signals_0, 0)) self.connect((self.dtv_dvbt_reed_solomon_enc_0, 0), (self.dtv_dvbt_convolutional_interleaver_0, 0)) self.connect((self.dtv_dvbt_reference_signals_0, 0), (self.blocks_vector_to_stream_0, 0)) self.connect((self.dtv_dvbt_reference_signals_0, 0), (self.fft_vxx_0, 0)) self.connect((self.dtv_dvbt_symbol_inner_interleaver_0, 0), (self.dtv_dvbt_map_0, 0)) self.connect((self.fft_vxx_0, 0), (self.digital_ofdm_cyclic_prefixer_0, 0))
def main(args): nargs = len(args) if nargs == 1: port = int(args[0]) outfile = None elif nargs == 2: port = int(args[0]) outfile = args[1] else: sys.stderr.write("Usage: dvbt-hackrf.py port [output_file]\n") sys.exit(1) channel_mhz = 6 mode = dtv.T2k code_rate = dtv.C1_2 constellation = dtv.MOD_QPSK guard_interval = dtv.GI_1_32 symbol_rate = channel_mhz * 8000000.0 / 7 center_freq = 441000000 rf_gain = 14 if_gain = 40 if mode == dtv.T2k: factor = 1 carriers = 2048 elif mode == dtv.T8k: factor = 4 carriers = 8192 if guard_interval == dtv.GI_1_32: gi = carriers / 32 elif guard_interval == dtv.GI_1_16: gi = carriers / 16 elif guard_interval == dtv.GI_1_8: gi = carriers / 8 elif guard_interval == dtv.GI_1_4: gi = carriers / 4 if channel_mhz == 8: bandwidth = 8750000 elif channel_mhz == 7: bandwidth = 7000000 elif channel_mhz == 6: bandwidth = 6000000 elif channel_mhz == 5: bandwidth = 5000000 else: bandwidth = 8750000 tb = gr.top_block() src = grc_blks2.tcp_source(gr.sizeof_char * 1, "127.0.0.1", port, True) dvbt_energy_dispersal = dtv.dvbt_energy_dispersal(1 * factor) dvbt_reed_solomon_enc = dtv.dvbt_reed_solomon_enc(2, 8, 0x11d, 255, 239, 8, 51, (8 * factor)) dvbt_convolutional_interleaver = dtv.dvbt_convolutional_interleaver( (136 * factor), 12, 17) dvbt_inner_coder = dtv.dvbt_inner_coder(1, (1512 * factor), constellation, dtv.NH, code_rate) dvbt_bit_inner_interleaver = dtv.dvbt_bit_inner_interleaver( (1512 * factor), constellation, dtv.NH, mode) dvbt_symbol_inner_interleaver = dtv.dvbt_symbol_inner_interleaver( (1512 * factor), mode, 1) dvbt_map = dtv.dvbt_map((1512 * factor), constellation, dtv.NH, mode, 1) dvbt_reference_signals = dtv.dvbt_reference_signals( gr.sizeof_gr_complex, (1512 * factor), carriers, constellation, dtv.NH, code_rate, code_rate, dtv.GI_1_32, mode, 0, 0) fft_vxx = fft.fft_vcc(carriers, False, (window.rectangular(carriers)), True, 10) digital_ofdm_cyclic_prefixer = digital.ofdm_cyclic_prefixer( carriers, carriers + (gi), 0, "") blocks_multiply_const_vxx = blocks.multiply_const_vcc( (0.0022097087 * 2.5, )) out = osmosdr.sink() out.set_sample_rate(symbol_rate) out.set_center_freq(center_freq, 0) out.set_freq_corr(0, 0) out.set_gain(rf_gain, 0) out.set_if_gain(if_gain, 0) out.set_bandwidth(bandwidth, 0) tb.connect(src, dvbt_energy_dispersal) tb.connect(dvbt_energy_dispersal, dvbt_reed_solomon_enc) tb.connect(dvbt_reed_solomon_enc, dvbt_convolutional_interleaver) tb.connect(dvbt_convolutional_interleaver, dvbt_inner_coder) tb.connect(dvbt_inner_coder, dvbt_bit_inner_interleaver) tb.connect(dvbt_bit_inner_interleaver, dvbt_symbol_inner_interleaver) tb.connect(dvbt_symbol_inner_interleaver, dvbt_map) tb.connect(dvbt_map, dvbt_reference_signals) tb.connect(dvbt_reference_signals, fft_vxx) tb.connect(fft_vxx, digital_ofdm_cyclic_prefixer) tb.connect(digital_ofdm_cyclic_prefixer, blocks_multiply_const_vxx) tb.connect(blocks_multiply_const_vxx, out) if outfile: dst = blocks.file_sink(gr.sizeof_gr_complex, outfile) tb.connect(blocks_multiply_const_vxx, dst) tb.run()
def __init__(self): gr.top_block.__init__(self, "Dvbt Tx Demo") Qt.QWidget.__init__(self) self.setWindowTitle("Dvbt Tx Demo") 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", "dvbt_tx_demo") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.samp_rate = samp_rate = (8000000.0 * 8) / 7 ################################################## # Blocks ################################################## self.qtgui_waterfall_sink_x_1 = qtgui.waterfall_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 1269000000, #fc samp_rate, #bw "", #name 1 #number of inputs ) self.qtgui_waterfall_sink_x_1.set_update_time(0.10) self.qtgui_waterfall_sink_x_1.enable_grid(False) if not True: self.qtgui_waterfall_sink_x_1.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_waterfall_sink_x_1.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_1.set_line_label(i, "Data {0}".format(i)) else: self.qtgui_waterfall_sink_x_1.set_line_label(i, labels[i]) self.qtgui_waterfall_sink_x_1.set_color_map(i, colors[i]) self.qtgui_waterfall_sink_x_1.set_line_alpha(i, alphas[i]) self.qtgui_waterfall_sink_x_1.set_intensity_range(-140, 10) self._qtgui_waterfall_sink_x_1_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_1.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_waterfall_sink_x_1_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 1269000000, #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, 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_control_panel(False) 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.top_layout.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(-2, 2) self.qtgui_const_sink_x_0.set_x_axis(-2, 2) 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.top_layout.addWidget(self._qtgui_const_sink_x_0_win) self.osmosdr_sink_0 = osmosdr.sink( args="numchan=" + str(1) + " " + "" ) self.osmosdr_sink_0.set_sample_rate(samp_rate) self.osmosdr_sink_0.set_center_freq(1269000000, 0) self.osmosdr_sink_0.set_freq_corr(0, 0) self.osmosdr_sink_0.set_gain(14, 0) self.osmosdr_sink_0.set_if_gain(30, 0) self.osmosdr_sink_0.set_bb_gain(20, 0) self.osmosdr_sink_0.set_antenna("", 0) self.osmosdr_sink_0.set_bandwidth(0, 0) self.fft_vxx_0 = fft.fft_vcc(2048, False, (window.rectangular(2048)), True, 1) self.dtv_dvbt_symbol_inner_interleaver_0 = dtv.dvbt_symbol_inner_interleaver(1512, dtv.T2k, 1) self.dtv_dvbt_reference_signals_0 = dtv.dvbt_reference_signals(gr.sizeof_gr_complex, 1512, 2048, dtv.MOD_64QAM, dtv.NH, dtv.C2_3, dtv.C2_3, dtv.GI_1_32, dtv.T2k, 1, 0) self.dtv_dvbt_reed_solomon_enc_0 = dtv.dvbt_reed_solomon_enc(2, 8, 0x11d, 255, 239, 8, 51, 8) self.dtv_dvbt_map_0 = dtv.dvbt_map(1512, dtv.MOD_64QAM, dtv.NH, dtv.T2k, 1) self.dtv_dvbt_inner_coder_0 = dtv.dvbt_inner_coder(1, 1512, dtv.MOD_64QAM, dtv.NH, dtv.C2_3) self.dtv_dvbt_energy_dispersal_0 = dtv.dvbt_energy_dispersal(1) self.dtv_dvbt_convolutional_interleaver_0 = dtv.dvbt_convolutional_interleaver(136, 12, 17) self.dtv_dvbt_bit_inner_interleaver_0 = dtv.dvbt_bit_inner_interleaver(1512, dtv.MOD_64QAM, dtv.NH, dtv.T2k) self.digital_ofdm_cyclic_prefixer_0 = digital.ofdm_cyclic_prefixer(2048, 2048+64, 0, "") self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_gr_complex*1, 2048) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((0.0022097087, )) self.blocks_file_source_0 = blocks.file_source(gr.sizeof_char*1, "/Volumes/work/satellite_ground_emulator/DVB_S2/run/shm/adv16apsk910.ts", True) ################################################## # Connections ################################################## self.connect((self.blocks_file_source_0, 0), (self.dtv_dvbt_energy_dispersal_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.osmosdr_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_waterfall_sink_x_1, 0)) self.connect((self.blocks_vector_to_stream_0, 0), (self.qtgui_const_sink_x_0, 0)) self.connect((self.digital_ofdm_cyclic_prefixer_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.dtv_dvbt_bit_inner_interleaver_0, 0), (self.dtv_dvbt_symbol_inner_interleaver_0, 0)) self.connect((self.dtv_dvbt_convolutional_interleaver_0, 0), (self.dtv_dvbt_inner_coder_0, 0)) self.connect((self.dtv_dvbt_energy_dispersal_0, 0), (self.dtv_dvbt_reed_solomon_enc_0, 0)) self.connect((self.dtv_dvbt_inner_coder_0, 0), (self.dtv_dvbt_bit_inner_interleaver_0, 0)) self.connect((self.dtv_dvbt_map_0, 0), (self.dtv_dvbt_reference_signals_0, 0)) self.connect((self.dtv_dvbt_reed_solomon_enc_0, 0), (self.dtv_dvbt_convolutional_interleaver_0, 0)) self.connect((self.dtv_dvbt_reference_signals_0, 0), (self.blocks_vector_to_stream_0, 0)) self.connect((self.dtv_dvbt_reference_signals_0, 0), (self.fft_vxx_0, 0)) self.connect((self.dtv_dvbt_symbol_inner_interleaver_0, 0), (self.dtv_dvbt_map_0, 0)) self.connect((self.fft_vxx_0, 0), (self.digital_ofdm_cyclic_prefixer_0, 0))