diff options
72 files changed, 8922 insertions, 950 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 130fe7e1d0..3641ab4b5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,8 +46,8 @@ message(STATUS "Build type set to ${CMAKE_BUILD_TYPE}.") # Set the version information here set(VERSION_INFO_MAJOR_VERSION 3) set(VERSION_INFO_API_COMPAT 7) -set(VERSION_INFO_MINOR_VERSION 9) -set(VERSION_INFO_MAINT_VERSION 0) +set(VERSION_INFO_MINOR_VERSION 10) +set(VERSION_INFO_MAINT_VERSION git) include(GrVersion) #setup version info # Append -O2 optimization flag for Debug builds diff --git a/gr-blocks/grc/blocks_repeat.xml b/gr-blocks/grc/blocks_repeat.xml index c6c17c9900..793d0148b2 100644 --- a/gr-blocks/grc/blocks_repeat.xml +++ b/gr-blocks/grc/blocks_repeat.xml @@ -9,6 +9,7 @@ <key>blocks_repeat</key> <import>from gnuradio import blocks</import> <make>blocks.repeat($type.size*$vlen, $interp)</make> + <callback>set_interpolation($interp)</callback> <param> <name>Type</name> <key>type</key> diff --git a/gr-blocks/include/gnuradio/blocks/repeat.h b/gr-blocks/include/gnuradio/blocks/repeat.h index 622b066017..b34bda1ec5 100644 --- a/gr-blocks/include/gnuradio/blocks/repeat.h +++ b/gr-blocks/include/gnuradio/blocks/repeat.h @@ -32,6 +32,10 @@ namespace gr { /*! * \brief repeat each input \p repeat times * \ingroup stream_operators_blk + * + * Message Ports: + * * interpolation (in): + * Takes a pmt_pair(pmt::mp("interpolation"), pmt_long interp), setting the interpolation to interp. */ class BLOCKS_API repeat : virtual public sync_interpolator { @@ -46,6 +50,20 @@ namespace gr { * \param repeat number of times to repeat the input */ static sptr make(size_t itemsize, int repeat); + + /*! + * \brief Return current interpolation + */ + virtual int interpolation() const = 0; + + /*! + * \brief sets the interpolation + * + * Call this method in a callback to adjust the interpolation at run time. + * + * \param interp interpolation to be set + */ + virtual void set_interpolation(int interp) = 0; }; } /* namespace blocks */ diff --git a/gr-blocks/include/gnuradio/blocks/vector_sink_X.h.t b/gr-blocks/include/gnuradio/blocks/vector_sink_X.h.t index 527ebf7dff..a4ef38fd04 100644 --- a/gr-blocks/include/gnuradio/blocks/vector_sink_X.h.t +++ b/gr-blocks/include/gnuradio/blocks/vector_sink_X.h.t @@ -43,6 +43,7 @@ namespace gr { static sptr make(int vlen = 1); + //! Clear the data and tags containers. virtual void reset() = 0; virtual std::vector<@TYPE@> data() const = 0; virtual std::vector<tag_t> tags() const = 0; diff --git a/gr-blocks/lib/repeat_impl.cc b/gr-blocks/lib/repeat_impl.cc index 9c2ccc63c8..fb62265134 100644 --- a/gr-blocks/lib/repeat_impl.cc +++ b/gr-blocks/lib/repeat_impl.cc @@ -43,6 +43,26 @@ namespace gr { d_itemsize(itemsize), d_interp(interp) { + message_port_register_in(pmt::mp("interpolation")); + set_msg_handler(pmt::mp("interpolation"), + boost::bind(&repeat_impl::msg_set_interpolation, this, _1)); + } + + void + repeat_impl::msg_set_interpolation(pmt::pmt_t msg) + { + // Dynamization by Kevin McQuiggin: + d_interp = pmt::to_long(pmt::cdr(msg)); + sync_interpolator::set_interpolation(d_interp); + } + void + repeat_impl::set_interpolation(int interp) + { + // This ensures that interpolation is only changed between calls to work + // (and not in the middle of an ongoing work) + _post( pmt::mp("interpolation"), /* port */ + pmt::cons(pmt::mp("interpolation"), pmt::from_long(interp)) /* pair */ + ); } int diff --git a/gr-blocks/lib/repeat_impl.h b/gr-blocks/lib/repeat_impl.h index 1942729194..486a47a1ad 100644 --- a/gr-blocks/lib/repeat_impl.h +++ b/gr-blocks/lib/repeat_impl.h @@ -36,9 +36,15 @@ namespace gr { public: repeat_impl(size_t itemsize, int d_interp); + int interpolation() const { return d_interp; } + void set_interpolation(int interp); + + int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); + private: + void msg_set_interpolation(pmt::pmt_t msg); }; } /* namespace blocks */ diff --git a/gr-blocks/lib/tuntap_pdu_impl.cc b/gr-blocks/lib/tuntap_pdu_impl.cc index 45995e4803..391b33937a 100644 --- a/gr-blocks/lib/tuntap_pdu_impl.cc +++ b/gr-blocks/lib/tuntap_pdu_impl.cc @@ -76,6 +76,14 @@ namespace gr { if (d_fd <= 0) throw std::runtime_error("gr::tuntap_pdu::make: tun_alloc failed (are you running as root?)"); + int err = set_mtu(dev_cstr, MTU); + if(err < 0) + std::cerr << boost::format( + "gr::tuntap_pdu: failed to set MTU to %d.\n" + "You should use ifconfig to set the MTU. E.g.,\n" + " $ sudo ifconfig %s mtu %d\n" + ) % MTU % dev % MTU << std::endl; + std::cout << boost::format( "Allocated virtual ethernet interface: %s\n" "You must now use ifconfig to set its IP address. E.g.,\n" @@ -140,6 +148,31 @@ namespace gr { */ return fd; } + + int + tuntap_pdu_impl::set_mtu(const char *dev, int MTU) + { + struct ifreq ifr; + int sfd, err; + + /* MTU must be set by passing a socket fd to ioctl; + * create an arbitrary socket for this purpose + */ + if ((sfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) + return sfd; + + /* preparation of the struct ifr, of type "struct ifreq" */ + memset(&ifr, 0, sizeof(ifr)); + strncpy(ifr.ifr_name, dev, IFNAMSIZ); + ifr.ifr_addr.sa_family = AF_INET; /* address family */ + ifr.ifr_mtu = MTU; + + /* try to set MTU */ + if ((err = ioctl(sfd, SIOCSIFMTU, (void *) &ifr)) < 0) + return err; + + return MTU; + } #endif } /* namespace blocks */ diff --git a/gr-blocks/lib/tuntap_pdu_impl.h b/gr-blocks/lib/tuntap_pdu_impl.h index 360f954630..3a53e3acb5 100644 --- a/gr-blocks/lib/tuntap_pdu_impl.h +++ b/gr-blocks/lib/tuntap_pdu_impl.h @@ -40,6 +40,7 @@ namespace gr { std::string d_dev; bool d_istunflag; int tun_alloc(char *dev, int flags); + int set_mtu(const char *dev, int MTU); public: tuntap_pdu_impl(std::string dev, int MTU, bool istunflag); diff --git a/gr-blocks/lib/vector_sink_X_impl.h.t b/gr-blocks/lib/vector_sink_X_impl.h.t index b5d3bd6432..86f0e8773c 100644 --- a/gr-blocks/lib/vector_sink_X_impl.h.t +++ b/gr-blocks/lib/vector_sink_X_impl.h.t @@ -41,7 +41,7 @@ namespace gr { @NAME_IMPL@(int vlen); ~@NAME_IMPL@(); - void reset() { d_data.clear(); } + void reset() { d_data.clear(); d_tags.clear(); } std::vector<@TYPE@> data() const; std::vector<tag_t> tags() const; diff --git a/gr-dtv/CMakeLists.txt b/gr-dtv/CMakeLists.txt index fc7ab56bef..5a23482b26 100644 --- a/gr-dtv/CMakeLists.txt +++ b/gr-dtv/CMakeLists.txt @@ -41,6 +41,8 @@ GR_SET_GLOBAL(GR_DTV_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/lib ) +SET(GR_PKG_DTV_EXAMPLES_DIR ${GR_PKG_DATA_DIR}/examples/dtv) + ######################################################################## # Begin conditional configuration ######################################################################## diff --git a/gr-dtv/examples/CMakeLists.txt b/gr-dtv/examples/CMakeLists.txt index 82b663d924..8f209bce4f 100644 --- a/gr-dtv/examples/CMakeLists.txt +++ b/gr-dtv/examples/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2014 Free Software Foundation, Inc. +# Copyright 2014-2015 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -21,6 +21,31 @@ include(GrPython) GR_PYTHON_INSTALL( PROGRAMS + atsc_ctrlport_monitor.py + DESTINATION ${GR_PKG_DTV_EXAMPLES_DIR} + COMPONENT "dtv_python" +) + +install( + FILES + README.dvbs + README.dvbs2 + README.dvbt + README.dvbt2 + README.catv + dvbs2_tx.grc + dvbs_tx.grc + dvbt_rx_8k.grc + dvbt_tx_2k.grc + dvbt_tx_8k.grc + file_atsc_rx.grc + file_atsc_tx.grc + uhd_atsc_capture.grc + uhd_rx_atsc.grc + vv003-cr23.grc + vv009-4kfft.grc + vv018-miso.grc + catv_tx_64qam.grc DESTINATION ${GR_PKG_DTV_EXAMPLES_DIR} COMPONENT "dtv_python" ) diff --git a/gr-dtv/examples/README.catv b/gr-dtv/examples/README.catv new file mode 100644 index 0000000000..84c4cd0b26 --- /dev/null +++ b/gr-dtv/examples/README.catv @@ -0,0 +1,31 @@ +A test Transport Stream (26.970352 Mbps) for the example flow graph +is available here: + +http://www.w6rz.net/advqam64.ts + +It is 357,356,980 bytes. + +The three parameters Control_Word, I_taps and J_increment can be +used to control the interleaver from the following table. + +Control_Word I_taps J_increment Burst protection Latency + 0 128 1 95 us 4 ms + 1 128 1 95 us 4 ms + 2 128 2 190 us 8 ms + 3 64 2 47 us 2 ms + 4 128 3 285 us 12 ms + 5 32 4 24 us 0.98 ms + 6 128 4 379 us 16 ms + 7 16 8 12 us 0.48 ms + 8 128 5 474 us 20 ms + 9 8 16 5.9 us 0.22 ms + 10 128 6 569 us 24 ms + 11 Reserved + 12 128 7 664 us 28 ms + 13 Reserved + 14 128 8 759 us 32 ms + 15 Reserved + +The default is Control_Word = 6, I_taps = 128 and J_increment = 4 +which seems to be the most commonly used on CATV systems. + diff --git a/gr-dtv/examples/README.dvbs b/gr-dtv/examples/README.dvbs new file mode 100644 index 0000000000..d9097c4876 --- /dev/null +++ b/gr-dtv/examples/README.dvbs @@ -0,0 +1,26 @@ +Puncturing values for DVB-S code rates: + +1/2 code rate = Puncture Size = 2, Puncture Pattern = 0b11 +2/3 code rate = Puncture Size = 4, Puncture Pattern = 0b1101 +3/4 code rate = Puncture Size = 6, Puncture Pattern = 0b110110 +5/6 code rate = Puncture Size = 10, Puncture Pattern = 0b1101100110 +7/8 code rate = Puncture Size = 14, Puncture Pattern = 0b11010101100110 + +A test Transport Stream for the example flow graph +(8 Msyms/s and 7/8 code rate) is available here: + +http://www.w6rz.net/advdvbs78.ts + +It is 170,950,844 bytes. + +This stream can also be used at: + +14 Msyms/s 1/2 code rate +10.5 MSyms/s 2/3 code rate +9.333333 MSyms/s 3/4 code rate +8.4 Msyms/s 5/6 code rate + +The equation for calculating the correct Transport Stream bit-rate is: + +TS bit-rate = symbol rate * 2 * code rate * (188 / 204) + diff --git a/gr-dtv/examples/atsc_ctrlport_monitor.py b/gr-dtv/examples/atsc_ctrlport_monitor.py new file mode 100755 index 0000000000..7c43aebb77 --- /dev/null +++ b/gr-dtv/examples/atsc_ctrlport_monitor.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python +# +# Copyright 2015 Free Software Foundation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +import sys +import matplotlib +matplotlib.use("QT4Agg") +import matplotlib.pyplot as plt +import matplotlib.animation as animation +from gnuradio.ctrlport.GNURadioControlPortClient import GNURadioControlPortClient +import scipy +from scipy import fftpack + +""" +If a host is running the ATSC receiver chain with ControlPort +turned on, this script will connect to the host using the hostname and +port pair of the ControlPort instance and display metrics of the +receiver. The ATSC publishes information about the succes of the +Reed-Solomon decoder and Viterbi metrics for use here in displaying +the link quality. This also gets the equalizer taps of the receiver +and displays the frequency response. +""" + +class atsc_ctrlport_monitor: + def __init__(self, host, port): + argv = [None, host, port] + radiosys = GNURadioControlPortClient(argv=argv, rpcmethod='thrift') + self.radio = radiosys.client + print self.radio + + + vt_init_key = 'dtv_atsc_viterbi_decoder0::decoder_metrics' + data = self.radio.getKnobs([vt_init_key])[vt_init_key] + init_metric = scipy.mean(data.value) + self._viterbi_metric = 100*[init_metric,] + + table_col_labels = ('Num Packets', 'Error Rate', 'Packet Error Rate', + 'Viterbi Metric', 'SNR') + + self._fig = plt.figure(1, figsize=(12,12), facecolor='w') + self._sp0 = self._fig.add_subplot(4,1,1) + self._sp1 = self._fig.add_subplot(4,1,2) + self._sp2 = self._fig.add_subplot(4,1,3) + self._plot_taps = self._sp0.plot([], [], 'k', linewidth=2) + self._plot_psd = self._sp1.plot([], [], 'k', linewidth=2) + self._plot_data = self._sp2.plot([], [], 'ok', linewidth=2, markersize=4, alpha=0.05) + + self._ax2 = self._fig.add_subplot(4,1,4) + self._table = self._ax2.table(cellText=[len(table_col_labels)*['0']], + colLabels=table_col_labels, + loc='center') + self._ax2.axis('off') + cells = self._table.properties()['child_artists'] + for c in cells: + c.set_lw(0.1) # set's line width + c.set_ls('solid') + c.set_height(0.2) + + ani = animation.FuncAnimation(self._fig, self.update_data, frames=200, + fargs=(self._plot_taps[0], self._plot_psd[0], + self._plot_data[0], self._table), + init_func=self.init_function, + blit=True) + plt.show() + + def update_data(self, x, taps, psd, syms, table): + try: + eqdata_key = 'dtv_atsc_equalizer0::taps' + symdata_key = 'dtv_atsc_equalizer0::data' + rs_nump_key = 'dtv_atsc_rs_decoder0::num_packets' + rs_numbp_key = 'dtv_atsc_rs_decoder0::num_bad_packets' + rs_numerrs_key = 'dtv_atsc_rs_decoder0::num_errors_corrected' + vt_metrics_key = 'dtv_atsc_viterbi_decoder0::decoder_metrics' + snr_key = 'probe2_f0::SNR' + + data = self.radio.getKnobs([]) + eqdata = data[eqdata_key] + symdata = data[symdata_key] + rs_num_packets = data[rs_nump_key] + rs_num_bad_packets = data[rs_numbp_key] + rs_num_errors_corrected = data[rs_numerrs_key] + vt_decoder_metrics = data[vt_metrics_key] + snr_est = data[snr_key] + + vt_decoder_metrics = scipy.mean(vt_decoder_metrics.value) + self._viterbi_metric.pop() + self._viterbi_metric.insert(0, vt_decoder_metrics) + + except: + sys.stderr.write("Lost connection, exiting") + sys.exit(1) + + ntaps = len(eqdata.value) + taps.set_ydata(eqdata.value) + taps.set_xdata(xrange(ntaps)) + self._sp0.set_xlim(0, ntaps) + self._sp0.set_ylim(min(eqdata.value), max(eqdata.value)) + + fs = 6.25e6 + freq = scipy.linspace(-fs/2, fs/2, 10000) + H = fftpack.fftshift(fftpack.fft(eqdata.value, 10000)) + HdB = 20.0*scipy.log10(abs(H)) + psd.set_ydata(HdB) + psd.set_xdata(freq) + self._sp1.set_xlim(0, fs/2) + self._sp1.set_ylim([min(HdB), max(HdB)]) + self._sp1.set_yticks([min(HdB), max(HdB)]) + self._sp1.set_yticklabels(["min", "max"]) + + nsyms = len(symdata.value) + syms.set_ydata(symdata.value) + syms.set_xdata(nsyms*[0,]) + self._sp2.set_xlim([-1, 1]) + self._sp2.set_ylim([-10, 10]) + + per = float(rs_num_bad_packets.value) / float(rs_num_packets.value) + ber = float(rs_num_errors_corrected.value) / float(187*rs_num_packets.value) + + table._cells[(1,0)]._text.set_text("{0}".format(rs_num_packets.value)) + table._cells[(1,1)]._text.set_text("{0:.2g}".format(ber)) + table._cells[(1,2)]._text.set_text("{0:.2g}".format(per)) + table._cells[(1,3)]._text.set_text("{0:.1f}".format(scipy.mean(self._viterbi_metric))) + table._cells[(1,4)]._text.set_text("{0:.4f}".format(snr_est.value[0])) + + return (taps, psd, syms, table) + + def init_function(self): + return self._plot_taps + self._plot_psd + self._plot_data + +if __name__ == "__main__": + host = sys.argv[1] + port = sys.argv[2] + m = atsc_ctrlport_monitor(host, port) diff --git a/gr-dtv/examples/catv_tx_64qam.grc b/gr-dtv/examples/catv_tx_64qam.grc new file mode 100644 index 0000000000..964ef8470f --- /dev/null +++ b/gr-dtv/examples/catv_tx_64qam.grc @@ -0,0 +1,2079 @@ +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.10'?> +<flow_graph> + <timestamp>Thu Feb 20 21:02:41 2014</timestamp> + <block> + <key>options</key> + <param> + <key>author</key> + <value></value> + </param> + <param> + <key>window_size</key> + <value>1280, 1024</value> + </param> + <param> + <key>category</key> + <value>Custom</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>description</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>generate_options</key> + <value>wx_gui</value> + </param> + <param> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>catv_tx_64qam</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>qt_qss_theme</key> + <value></value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>run_command</key> + <value>{python} -u {filename}</value> + </param> + <param> + <key>run_options</key> + <value>prompt</value> + </param> + <param> + <key>run</key> + <value>True</value> + </param> + <param> + <key>thread_safe_setters</key> + <value></value> + </param> + <param> + <key>title</key> + <value></value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 299)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>Control_Word</value> + </param> + <param> + <key>value</key> + <value>6</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 371)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>I_taps</value> + </param> + <param> + <key>value</key> + <value>128</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 443)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>J_increment</value> + </param> + <param> + <key>value</key> + <value>4</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 155)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>center_freq</value> + </param> + <param> + <key>value</key> + <value>429000000</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 227)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>rrc_taps</value> + </param> + <param> + <key>value</key> + <value>100</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 83)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>value</key> + <value>5056941 * 2</value> + </param> + </block> + <block> + <key>variable_slider</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>converver</key> + <value>int_converter</value> + </param> + <param> + <key>value</key> + <value>-8</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(312, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>vga1_gain</value> + </param> + <param> + <key>label</key> + <value>VGA1 Gain</value> + </param> + <param> + <key>max</key> + <value>-4</value> + </param> + <param> + <key>min</key> + <value>-35</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>num_steps</key> + <value>31</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + </block> + <block> + <key>variable_slider</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>converver</key> + <value>int_converter</value> + </param> + <param> + <key>value</key> + <value>10</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(448, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>vga2_gain</value> + </param> + <param> + <key>label</key> + <value>VGA2 Gain</value> + </param> + <param> + <key>max</key> + <value>25</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>num_steps</key> + <value>25</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + </block> + <block> + <key>blocks_file_source</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>file</key> + <value>/run/shm/advqam64.ts</value> + </param> + <param> + <key>_coordinate</key> + <value>(128, 163)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_file_source_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_packed_to_unpacked_xx</key> + <param> + <key>bits_per_chunk</key> + <value>7</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>endianness</key> + <value>gr.GR_MSB_FIRST</value> + </param> + <param> + <key>_coordinate</key> + <value>(624, 163)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_packed_to_unpacked_xx_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + </block> + <block> + <key>blocks_stream_to_vector</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(536, 251)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>blocks_stream_to_vector_0</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_items</key> + <value>I_taps</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>dtv_catv_frame_sync_enc_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>ctrlword</key> + <value>Control_Word</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(584, 347)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_catv_frame_sync_enc_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_catv_randomizer_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(424, 353)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_catv_randomizer_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_catv_reed_solomon_enc_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(848, 177)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_catv_reed_solomon_enc_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_catv_transport_framing_enc_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(360, 177)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_catv_transport_framing_enc_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_catv_trellis_enc_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(800, 353)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_catv_trellis_enc_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvbs2_modulator_bc</key> + <param> + <key>interpolation</key> + <value>INTERPOLATION_ON</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>rate</key> + <value>C_OTHER</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>constellation</key> + <value>MOD_64QAM</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>_coordinate</key> + <value>(400, 499)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbs2_modulator_bc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvbt_convolutional_interleaver</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>blocks</key> + <value>1</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>M</key> + <value>J_increment</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(168, 339)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_convolutional_interleaver_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>I</key> + <value>I_taps</value> + </param> + </block> + <block> + <key>fft_filter_xxx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(712, 507)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fft_filter_xxx_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>nthreads</key> + <value>1</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>taps</key> + <value>firdes.root_raised_cosine(0.14, samp_rate, samp_rate/2, 0.18, rrc_taps)</value> + </param> + <param> + <key>type</key> + <value>ccf</value> + </param> + </block> + <block> + <key>osmosdr_sink</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>ant0</key> + <value></value> + </param> + <param> + <key>bb_gain0</key> + <value>vga1_gain</value> + </param> + <param> + <key>bw0</key> + <value>6000000</value> + </param> + <param> + <key>corr0</key> + <value>0</value> + </param> + <param> + <key>freq0</key> + <value>center_freq</value> + </param> + <param> + <key>if_gain0</key> + <value>0</value> + </param> + <param> + <key>gain0</key> + <value>vga2_gain</value> + </param> + <param> + <key>ant10</key> + <value></value> + </param> + <param> + <key>bb_gain10</key> + <value>20</value> + </param> + <param> + <key>bw10</key> + <value>0</value> + </param> + <param> + <key>corr10</key> + <value>0</value> + </param> + <param> + <key>freq10</key> + <value>100e6</value> + </param> + <param> + <key>if_gain10</key> + <value>20</value> + </param> + <param> + <key>gain10</key> + <value>10</value> + </param> + <param> + <key>ant11</key> + <value></value> + </param> + <param> + <key>bb_gain11</key> + <value>20</value> + </param> + <param> + <key>bw11</key> + <value>0</value> + </param> + <param> + <key>corr11</key> + <value>0</value> + </param> + <param> + <key>freq11</key> + <value>100e6</value> + </param> + <param> + <key>if_gain11</key> + <value>20</value> + </param> + <param> + <key>gain11</key> + <value>10</value> + </param> + <param> + <key>ant12</key> + <value></value> + </param> + <param> + <key>bb_gain12</key> + <value>20</value> + </param> + <param> + <key>bw12</key> + <value>0</value> + </param> + <param> + <key>corr12</key> + <value>0</value> + </param> + <param> + <key>freq12</key> + <value>100e6</value> + </param> + <param> + <key>if_gain12</key> + <value>20</value> + </param> + <param> + <key>gain12</key> + <value>10</value> + </param> + <param> + <key>ant13</key> + <value></value> + </param> + <param> + <key>bb_gain13</key> + <value>20</value> + </param> + <param> + <key>bw13</key> + <value>0</value> + </param> + <param> + <key>corr13</key> + <value>0</value> + </param> + <param> + <key>freq13</key> + <value>100e6</value> + </param> + <param> + <key>if_gain13</key> + <value>20</value> + </param> + <param> + <key>gain13</key> + <value>10</value> + </param> + <param> + <key>ant14</key> + <value></value> + </param> + <param> + <key>bb_gain14</key> + <value>20</value> + </param> + <param> + <key>bw14</key> + <value>0</value> + </param> + <param> + <key>corr14</key> + <value>0</value> + </param> + <param> + <key>freq14</key> + <value>100e6</value> + </param> + <param> + <key>if_gain14</key> + <value>20</value> + </param> + <param> + <key>gain14</key> + <value>10</value> + </param> + <param> + <key>ant15</key> + <value></value> + </param> + <param> + <key>bb_gain15</key> + <value>20</value> + </param> + <param> + <key>bw15</key> + <value>0</value> + </param> + <param> + <key>corr15</key> + <value>0</value> + </param> + <param> + <key>freq15</key> + <value>100e6</value> + </param> + <param> + <key>if_gain15</key> + <value>20</value> + </param> + <param> + <key>gain15</key> + <value>10</value> + </param> + <param> + <key>ant16</key> + <value></value> + </param> + <param> + <key>bb_gain16</key> + <value>20</value> + </param> + <param> + <key>bw16</key> + <value>0</value> + </param> + <param> + <key>corr16</key> + <value>0</value> + </param> + <param> + <key>freq16</key> + <value>100e6</value> + </param> + <param> + <key>if_gain16</key> + <value>20</value> + </param> + <param> + <key>gain16</key> + <value>10</value> + </param> + <param> + <key>ant17</key> + <value></value> + </param> + <param> + <key>bb_gain17</key> + <value>20</value> + </param> + <param> + <key>bw17</key> + <value>0</value> + </param> + <param> + <key>corr17</key> + <value>0</value> + </param> + <param> + <key>freq17</key> + <value>100e6</value> + </param> + <param> + <key>if_gain17</key> + <value>20</value> + </param> + <param> + <key>gain17</key> + <value>10</value> + </param> + <param> + <key>ant18</key> + <value></value> + </param> + <param> + <key>bb_gain18</key> + <value>20</value> + </param> + <param> + <key>bw18</key> + <value>0</value> + </param> + <param> + <key>corr18</key> + <value>0</value> + </param> + <param> + <key>freq18</key> + <value>100e6</value> + </param> + <param> + <key>if_gain18</key> + <value>20</value> + </param> + <param> + <key>gain18</key> + <value>10</value> + </param> + <param> + <key>ant19</key> + <value></value> + </param> + <param> + <key>bb_gain19</key> + <value>20</value> + </param> + <param> + <key>bw19</key> + <value>0</value> + </param> + <param> + <key>corr19</key> + <value>0</value> + </param> + <param> + <key>freq19</key> + <value>100e6</value> + </param> + <param> + <key>if_gain19</key> + <value>20</value> + </param> + <param> + <key>gain19</key> + <value>10</value> + </param> + <param> + <key>ant1</key> + <value></value> + </param> + <param> + <key>bb_gain1</key> + <value>20</value> + </param> + <param> + <key>bw1</key> + <value>0</value> + </param> + <param> + <key>corr1</key> + <value>0</value> + </param> + <param> + <key>freq1</key> + <value>100e6</value> + </param> + <param> + <key>if_gain1</key> + <value>20</value> + </param> + <param> + <key>gain1</key> + <value>10</value> + </param> + <param> + <key>ant20</key> + <value></value> + </param> + <param> + <key>bb_gain20</key> + <value>20</value> + </param> + <param> + <key>bw20</key> + <value>0</value> + </param> + <param> + <key>corr20</key> + <value>0</value> + </param> + <param> + <key>freq20</key> + <value>100e6</value> + </param> + <param> + <key>if_gain20</key> + <value>20</value> + </param> + <param> + <key>gain20</key> + <value>10</value> + </param> + <param> + <key>ant21</key> + <value></value> + </param> + <param> + <key>bb_gain21</key> + <value>20</value> + </param> + <param> + <key>bw21</key> + <value>0</value> + </param> + <param> + <key>corr21</key> + <value>0</value> + </param> + <param> + <key>freq21</key> + <value>100e6</value> + </param> + <param> + <key>if_gain21</key> + <value>20</value> + </param> + <param> + <key>gain21</key> + <value>10</value> + </param> + <param> + <key>ant22</key> + <value></value> + </param> + <param> + <key>bb_gain22</key> + <value>20</value> + </param> + <param> + <key>bw22</key> + <value>0</value> + </param> + <param> + <key>corr22</key> + <value>0</value> + </param> + <param> + <key>freq22</key> + <value>100e6</value> + </param> + <param> + <key>if_gain22</key> + <value>20</value> + </param> + <param> + <key>gain22</key> + <value>10</value> + </param> + <param> + <key>ant23</key> + <value></value> + </param> + <param> + <key>bb_gain23</key> + <value>20</value> + </param> + <param> + <key>bw23</key> + <value>0</value> + </param> + <param> + <key>corr23</key> + <value>0</value> + </param> + <param> + <key>freq23</key> + <value>100e6</value> + </param> + <param> + <key>if_gain23</key> + <value>20</value> + </param> + <param> + <key>gain23</key> + <value>10</value> + </param> + <param> + <key>ant24</key> + <value></value> + </param> + <param> + <key>bb_gain24</key> + <value>20</value> + </param> + <param> + <key>bw24</key> + <value>0</value> + </param> + <param> + <key>corr24</key> + <value>0</value> + </param> + <param> + <key>freq24</key> + <value>100e6</value> + </param> + <param> + <key>if_gain24</key> + <value>20</value> + </param> + <param> + <key>gain24</key> + <value>10</value> + </param> + <param> + <key>ant25</key> + <value></value> + </param> + <param> + <key>bb_gain25</key> + <value>20</value> + </param> + <param> + <key>bw25</key> + <value>0</value> + </param> + <param> + <key>corr25</key> + <value>0</value> + </param> + <param> + <key>freq25</key> + <value>100e6</value> + </param> + <param> + <key>if_gain25</key> + <value>20</value> + </param> + <param> + <key>gain25</key> + <value>10</value> + </param> + <param> + <key>ant26</key> + <value></value> + </param> + <param> + <key>bb_gain26</key> + <value>20</value> + </param> + <param> + <key>bw26</key> + <value>0</value> + </param> + <param> + <key>corr26</key> + <value>0</value> + </param> + <param> + <key>freq26</key> + <value>100e6</value> + </param> + <param> + <key>if_gain26</key> + <value>20</value> + </param> + <param> + <key>gain26</key> + <value>10</value> + </param> + <param> + <key>ant27</key> + <value></value> + </param> + <param> + <key>bb_gain27</key> + <value>20</value> + </param> + <param> + <key>bw27</key> + <value>0</value> + </param> + <param> + <key>corr27</key> + <value>0</value> + </param> + <param> + <key>freq27</key> + <value>100e6</value> + </param> + <param> + <key>if_gain27</key> + <value>20</value> + </param> + <param> + <key>gain27</key> + <value>10</value> + </param> + <param> + <key>ant28</key> + <value></value> + </param> + <param> + <key>bb_gain28</key> + <value>20</value> + </param> + <param> + <key>bw28</key> + <value>0</value> + </param> + <param> + <key>corr28</key> + <value>0</value> + </param> + <param> + <key>freq28</key> + <value>100e6</value> + </param> + <param> + <key>if_gain28</key> + <value>20</value> + </param> + <param> + <key>gain28</key> + <value>10</value> + </param> + <param> + <key>ant29</key> + <value></value> + </param> + <param> + <key>bb_gain29</key> + <value>20</value> + </param> + <param> + <key>bw29</key> + <value>0</value> + </param> + <param> + <key>corr29</key> + <value>0</value> + </param> + <param> + <key>freq29</key> + <value>100e6</value> + </param> + <param> + <key>if_gain29</key> + <value>20</value> + </param> + <param> + <key>gain29</key> + <value>10</value> + </param> + <param> + <key>ant2</key> + <value></value> + </param> + <param> + <key>bb_gain2</key> + <value>20</value> + </param> + <param> + <key>bw2</key> + <value>0</value> + </param> + <param> + <key>corr2</key> + <value>0</value> + </param> + <param> + <key>freq2</key> + <value>100e6</value> + </param> + <param> + <key>if_gain2</key> + <value>20</value> + </param> + <param> + <key>gain2</key> + <value>10</value> + </param> + <param> + <key>ant30</key> + <value></value> + </param> + <param> + <key>bb_gain30</key> + <value>20</value> + </param> + <param> + <key>bw30</key> + <value>0</value> + </param> + <param> + <key>corr30</key> + <value>0</value> + </param> + <param> + <key>freq30</key> + <value>100e6</value> + </param> + <param> + <key>if_gain30</key> + <value>20</value> + </param> + <param> + <key>gain30</key> + <value>10</value> + </param> + <param> + <key>ant31</key> + <value></value> + </param> + <param> + <key>bb_gain31</key> + <value>20</value> + </param> + <param> + <key>bw31</key> + <value>0</value> + </param> + <param> + <key>corr31</key> + <value>0</value> + </param> + <param> + <key>freq31</key> + <value>100e6</value> + </param> + <param> + <key>if_gain31</key> + <value>20</value> + </param> + <param> + <key>gain31</key> + <value>10</value> + </param> + <param> + <key>ant3</key> + <value></value> + </param> + <param> + <key>bb_gain3</key> + <value>20</value> + </param> + <param> + <key>bw3</key> + <value>0</value> + </param> + <param> + <key>corr3</key> + <value>0</value> + </param> + <param> + <key>freq3</key> + <value>100e6</value> + </param> + <param> + <key>if_gain3</key> + <value>20</value> + </param> + <param> + <key>gain3</key> + <value>10</value> + </param> + <param> + <key>ant4</key> + <value></value> + </param> + <param> + <key>bb_gain4</key> + <value>20</value> + </param> + <param> + <key>bw4</key> + <value>0</value> + </param> + <param> + <key>corr4</key> + <value>0</value> + </param> + <param> + <key>freq4</key> + <value>100e6</value> + </param> + <param> + <key>if_gain4</key> + <value>20</value> + </param> + <param> + <key>gain4</key> + <value>10</value> + </param> + <param> + <key>ant5</key> + <value></value> + </param> + <param> + <key>bb_gain5</key> + <value>20</value> + </param> + <param> + <key>bw5</key> + <value>0</value> + </param> + <param> + <key>corr5</key> + <value>0</value> + </param> + <param> + <key>freq5</key> + <value>100e6</value> + </param> + <param> + <key>if_gain5</key> + <value>20</value> + </param> + <param> + <key>gain5</key> + <value>10</value> + </param> + <param> + <key>ant6</key> + <value></value> + </param> + <param> + <key>bb_gain6</key> + <value>20</value> + </param> + <param> + <key>bw6</key> + <value>0</value> + </param> + <param> + <key>corr6</key> + <value>0</value> + </param> + <param> + <key>freq6</key> + <value>100e6</value> + </param> + <param> + <key>if_gain6</key> + <value>20</value> + </param> + <param> + <key>gain6</key> + <value>10</value> + </param> + <param> + <key>ant7</key> + <value></value> + </param> + <param> + <key>bb_gain7</key> + <value>20</value> + </param> + <param> + <key>bw7</key> + <value>0</value> + </param> + <param> + <key>corr7</key> + <value>0</value> + </param> + <param> + <key>freq7</key> + <value>100e6</value> + </param> + <param> + <key>if_gain7</key> + <value>20</value> + </param> + <param> + <key>gain7</key> + <value>10</value> + </param> + <param> + <key>ant8</key> + <value></value> + </param> + <param> + <key>bb_gain8</key> + <value>20</value> + </param> + <param> + <key>bw8</key> + <value>0</value> + </param> + <param> + <key>corr8</key> + <value>0</value> + </param> + <param> + <key>freq8</key> + <value>100e6</value> + </param> + <param> + <key>if_gain8</key> + <value>20</value> + </param> + <param> + <key>gain8</key> + <value>10</value> + </param> + <param> + <key>ant9</key> + <value></value> + </param> + <param> + <key>bb_gain9</key> + <value>20</value> + </param> + <param> + <key>bw9</key> + <value>0</value> + </param> + <param> + <key>corr9</key> + <value>0</value> + </param> + <param> + <key>freq9</key> + <value>100e6</value> + </param> + <param> + <key>if_gain9</key> + <value>20</value> + </param> + <param> + <key>gain9</key> + <value>10</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(1056, 467)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>osmosdr_sink_0</value> + </param> + <param> + <key>type</key> + <value>fc32</value> + </param> + <param> + <key>clock_source0</key> + <value></value> + </param> + <param> + <key>time_source0</key> + <value></value> + </param> + <param> + <key>clock_source1</key> + <value></value> + </param> + <param> + <key>time_source1</key> + <value></value> + </param> + <param> + <key>clock_source2</key> + <value></value> + </param> + <param> + <key>time_source2</key> + <value></value> + </param> + <param> + <key>clock_source3</key> + <value></value> + </param> + <param> + <key>time_source3</key> + <value></value> + </param> + <param> + <key>clock_source4</key> + <value></value> + </param> + <param> + <key>time_source4</key> + <value></value> + </param> + <param> + <key>clock_source5</key> + <value></value> + </param> + <param> + <key>time_source5</key> + <value></value> + </param> + <param> + <key>clock_source6</key> + <value></value> + </param> + <param> + <key>time_source6</key> + <value></value> + </param> + <param> + <key>clock_source7</key> + <value></value> + </param> + <param> + <key>time_source7</key> + <value></value> + </param> + <param> + <key>nchan</key> + <value>1</value> + </param> + <param> + <key>num_mboards</key> + <value>1</value> + </param> + <param> + <key>sample_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + </block> + <block> + <key>wxgui_fftsink2</key> + <param> + <key>avg_alpha</key> + <value>0.1333</value> + </param> + <param> + <key>average</key> + <value>True</value> + </param> + <param> + <key>baseband_freq</key> + <value>center_freq</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>fft_size</key> + <value>1024</value> + </param> + <param> + <key>freqvar</key> + <value>None</value> + </param> + <param> + <key>_coordinate</key> + <value>(1056, 203)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>wxgui_fftsink2_0_0</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>ref_level</key> + <value>-10</value> + </param> + <param> + <key>ref_scale</key> + <value>2.0</value> + </param> + <param> + <key>fft_rate</key> + <value>15</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>title</key> + <value>FFT Plot</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>win_size</key> + <value>640,480</value> + </param> + <param> + <key>win</key> + <value>None</value> + </param> + <param> + <key>y_divs</key> + <value>10</value> + </param> + <param> + <key>y_per_div</key> + <value>10</value> + </param> + </block> + <connection> + <source_block_id>blocks_file_source_0</source_block_id> + <sink_block_id>dtv_catv_transport_framing_enc_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id> + <sink_block_id>dtv_catv_reed_solomon_enc_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_stream_to_vector_0</source_block_id> + <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_catv_frame_sync_enc_bb_0</source_block_id> + <sink_block_id>dtv_catv_trellis_enc_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_catv_randomizer_bb_0</source_block_id> + <sink_block_id>dtv_catv_frame_sync_enc_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_catv_reed_solomon_enc_bb_0</source_block_id> + <sink_block_id>blocks_stream_to_vector_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_catv_transport_framing_enc_bb_0</source_block_id> + <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_catv_trellis_enc_bb_0</source_block_id> + <sink_block_id>dtv_dvbs2_modulator_bc_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id> + <sink_block_id>fft_filter_xxx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id> + <sink_block_id>dtv_catv_randomizer_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>osmosdr_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>wxgui_fftsink2_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> +</flow_graph> diff --git a/gr-dtv/examples/dvbs2_tx.grc b/gr-dtv/examples/dvbs2_tx.grc index 47daa4cb9d..c6de308ae3 100644 --- a/gr-dtv/examples/dvbs2_tx.grc +++ b/gr-dtv/examples/dvbs2_tx.grc @@ -1,23 +1,23 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.7'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.10'?> <flow_graph> <timestamp>Wed Sep 3 03:03:39 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>dvbs2_tx</value> + <key>author</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>1280, 1024</value> </param> <param> - <key>title</key> - <value></value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> + <key>comment</key> <value></value> </param> <param> @@ -25,16 +25,44 @@ <value></value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> <key>generate_options</key> <value>wx_gui</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>dvbs2_tx</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>qt_qss_theme</key> + <value></value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> <key>run_options</key> @@ -45,45 +73,79 @@ <value>True</value> </param> <param> - <key>max_nouts</key> - <value>0</value> + <key>thread_safe_setters</key> + <value></value> </param> <param> - <key>realtime_scheduling</key> + <key>title</key> <value></value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 11)</value> + <value>(8, 203)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>frequency</value> + </param> + <param> + <key>value</key> + <value>1280e6</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>samp_rate</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(8, 267)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>rolloff</value> + </param> + <param> <key>value</key> - <value>symbol_rate * 2</value> + <value>0.2</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> <value>(8, 75)</value> </param> @@ -91,107 +153,186 @@ <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>value</key> + <value>symbol_rate * 2</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>symbol_rate</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(8, 139)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>symbol_rate</value> + </param> + <param> <key>value</key> <value>5000000</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 139)</value> + <value>(8, 331)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>rolloff</value> + <value>taps</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>100</value> </param> + </block> + <block> + <key>blocks_file_sink</key> <param> - <key>value</key> - <value>0.2</value> + <key>append</key> + <value>False</value> </param> <param> <key>alias</key> <value></value> </param> <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>False</value> + </param> + <param> + <key>file</key> + <value>adv.cfile</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 203)</value> + <value>(784, 547)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>taps</value> + <value>blocks_file_sink_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>value</key> - <value>50</value> + <key>unbuffered</key> + <value>False</value> </param> <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_file_source</key> + <param> <key>alias</key> <value></value> </param> <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>file</key> + <value>/run/shm/adv16apsk910.ts</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 267)</value> + <value>(176, 43)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvb_bch_bb</key> <param> <key>id</key> - <value>dtv_dvb_bch_bb_0</value> + <value>blocks_file_source_0</value> </param> <param> - <key>_enabled</key> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> <value>True</value> </param> <param> - <key>standard</key> - <value>STANDARD_DVBS2</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>dtv_dvb_bbheader_bb</key> <param> - <key>framesize</key> + <key>mode</key> <value>FECFRAME_NORMAL</value> </param> <param> + <key>alias</key> + <value></value> + </param> + <param> <key>rate1</key> <value>C1_2</value> </param> @@ -208,7 +349,7 @@ <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -216,39 +357,59 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fecblocks</key> + <value>168</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(824, 35)</value> + <value>(400, 27)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvb_bbscrambler_bb</key> <param> <key>id</key> - <value>dtv_dvb_bbscrambler_bb_0</value> + <value>dtv_dvb_bbheader_bb_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>inband</key> + <value>INBAND_OFF</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>rolloff</key> + <value>RO_0_20</value> </param> <param> <key>standard</key> <value>STANDARD_DVBS2</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>tsrate</key> + <value>4000000</value> + </param> + </block> + <block> + <key>dtv_dvb_bbscrambler_bb</key> + <param> + <key>alias</key> + <value></value> </param> <param> <key>rate1</key> @@ -267,7 +428,7 @@ <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -275,12 +436,12 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> @@ -290,24 +451,28 @@ <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvb_ldpc_bb</key> <param> <key>id</key> - <value>dtv_dvb_ldpc_bb_0</value> + <value>dtv_dvb_bbscrambler_bb_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>standard</key> <value>STANDARD_DVBS2</value> </param> + </block> + <block> + <key>dtv_dvb_bch_bb</key> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>alias</key> + <value></value> </param> <param> <key>rate1</key> @@ -326,11 +491,7 @@ <value>C1_4</value> </param> <param> - <key>constellation</key> - <value>MOD_OTHER</value> - </param> - <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -338,239 +499,310 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(1048, 27)</value> + <value>(824, 35)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>dtv_dvb_bch_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>standard</key> + <value>STANDARD_DVBS2</value> + </param> </block> <block> - <key>dtv_dvbs2_interleaver_bb</key> + <key>dtv_dvb_ldpc_bb</key> <param> - <key>id</key> - <value>dtv_dvbs2_interleaver_bb_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>rate1</key> + <value>C1_2</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>rate2</key> + <value>C1_3</value> </param> <param> - <key>constellation</key> - <value>MOD_16APSK</value> + <key>rate3</key> + <value>C9_10</value> </param> <param> - <key>rate</key> - <value>C_OTHER</value> + <key>rate4</key> + <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>MOD_OTHER</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(192, 235)</value> + <value>(1048, 27)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_fftsink2</key> <param> <key>id</key> - <value>wxgui_fftsink2_0</value> + <value>dtv_dvb_ldpc_bb_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>title</key> - <value>FFT Plot</value> + <key>standard</key> + <value>STANDARD_DVBS2</value> </param> + </block> + <block> + <key>dtv_dvbs2_interleaver_bb</key> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>alias</key> + <value></value> </param> <param> - <key>baseband_freq</key> - <value>1280000000</value> + <key>rate</key> + <value>C_OTHER</value> </param> <param> - <key>y_per_div</key> - <value>10</value> + <key>comment</key> + <value></value> </param> <param> - <key>y_divs</key> - <value>10</value> + <key>constellation</key> + <value>MOD_16APSK</value> </param> <param> - <key>ref_level</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>ref_scale</key> - <value>2.0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>fft_size</key> - <value>1024</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>fft_rate</key> - <value>15</value> + <key>_coordinate</key> + <value>(192, 235)</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>average</key> - <value>True</value> + <key>id</key> + <value>dtv_dvbs2_interleaver_bb_0</value> </param> <param> - <key>avg_alpha</key> - <value>0.13333</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>win</key> - <value>None</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbs2_modulator_bc</key> <param> - <key>win_size</key> - <value></value> + <key>interpolation</key> + <value>INTERPOLATION_OFF</value> </param> <param> - <key>grid_pos</key> + <key>alias</key> <value></value> </param> <param> - <key>notebook</key> - <value></value> + <key>rate</key> + <value>C9_10</value> </param> <param> - <key>freqvar</key> - <value>None</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>constellation</key> + <value>MOD_16APSK</value> </param> <param> <key>affinity</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> <key>_coordinate</key> - <value>(1000, 395)</value> + <value>(472, 227)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbs2_modulator_bc</key> <param> <key>id</key> <value>dtv_dvbs2_modulator_bc_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbs2_physical_cc</key> <param> - <key>constellation</key> - <value>MOD_16APSK</value> + <key>alias</key> + <value></value> </param> <param> <key>rate</key> <value>C9_10</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>MOD_16APSK</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(472, 235)</value> + <value>(192, 443)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>goldcode</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbs2_physical_cc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>pilots</key> + <value>PILOTS_ON</value> + </param> </block> <block> <key>fft_filter_xxx</key> <param> - <key>id</key> - <value>fft_filter_xxx_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>type</key> - <value>ccc</value> + <key>affinity</key> + <value></value> </param> <param> <key>decim</key> <value>1</value> </param> <param> - <key>taps</key> - <value>firdes.root_raised_cosine(1, samp_rate, samp_rate/2, rolloff, taps)</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>samp_delay</key> + <key>_coordinate</key> + <value>(472, 459)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fft_filter_xxx_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> <value>0</value> </param> <param> @@ -578,1014 +810,1458 @@ <value>1</value> </param> <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>taps</key> + <value>firdes.root_raised_cosine(1.0, samp_rate, samp_rate/2, rolloff, taps)</value> + </param> + <param> + <key>type</key> + <value>ccc</value> + </param> + </block> + <block> + <key>osmosdr_sink</key> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>ant0</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bb_gain0</key> + <value>-10</value> + </param> + <param> + <key>bw0</key> + <value>6000000</value> + </param> + <param> + <key>corr0</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>freq0</key> + <value>frequency</value> + </param> + <param> + <key>if_gain0</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(472, 459)</value> + <key>gain0</key> + <value>15</value> </param> <param> - <key>_rotation</key> + <key>ant10</key> + <value></value> + </param> + <param> + <key>bb_gain10</key> + <value>20</value> + </param> + <param> + <key>bw10</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbs2_physical_cc</key> <param> - <key>id</key> - <value>dtv_dvbs2_physical_cc_0</value> + <key>corr10</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq10</key> + <value>100e6</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>if_gain10</key> + <value>20</value> </param> <param> - <key>constellation</key> - <value>MOD_16APSK</value> + <key>gain10</key> + <value>10</value> </param> <param> - <key>rate</key> - <value>C9_10</value> + <key>ant11</key> + <value></value> </param> <param> - <key>pilots</key> - <value>PILOTS_ON</value> + <key>bb_gain11</key> + <value>20</value> </param> <param> - <key>goldcode</key> + <key>bw11</key> <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>corr11</key> + <value>0</value> </param> <param> - <key>affinity</key> + <key>freq11</key> + <value>100e6</value> + </param> + <param> + <key>if_gain11</key> + <value>20</value> + </param> + <param> + <key>gain11</key> + <value>10</value> + </param> + <param> + <key>ant12</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bb_gain12</key> + <value>20</value> + </param> + <param> + <key>bw12</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr12</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(192, 443)</value> + <key>freq12</key> + <value>100e6</value> </param> <param> - <key>_rotation</key> + <key>if_gain12</key> + <value>20</value> + </param> + <param> + <key>gain12</key> + <value>10</value> + </param> + <param> + <key>ant13</key> + <value></value> + </param> + <param> + <key>bb_gain13</key> + <value>20</value> + </param> + <param> + <key>bw13</key> <value>0</value> </param> - </block> - <block> - <key>osmosdr_sink</key> <param> - <key>id</key> - <value>osmosdr_sink_0</value> + <key>corr13</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq13</key> + <value>100e6</value> </param> <param> - <key>type</key> - <value>fc32</value> + <key>if_gain13</key> + <value>20</value> </param> <param> - <key>args</key> - <value>bladerf=0,buffers=128,buflen=32768</value> + <key>gain13</key> + <value>10</value> </param> <param> - <key>sync</key> + <key>ant14</key> <value></value> </param> <param> - <key>num_mboards</key> - <value>1</value> + <key>bb_gain14</key> + <value>20</value> </param> <param> - <key>clock_source0</key> - <value></value> + <key>bw14</key> + <value>0</value> </param> <param> - <key>time_source0</key> - <value></value> + <key>corr14</key> + <value>0</value> </param> <param> - <key>clock_source1</key> - <value></value> + <key>freq14</key> + <value>100e6</value> </param> <param> - <key>time_source1</key> - <value></value> + <key>if_gain14</key> + <value>20</value> </param> <param> - <key>clock_source2</key> - <value></value> + <key>gain14</key> + <value>10</value> </param> <param> - <key>time_source2</key> + <key>ant15</key> <value></value> </param> <param> - <key>clock_source3</key> - <value></value> + <key>bb_gain15</key> + <value>20</value> </param> <param> - <key>time_source3</key> - <value></value> + <key>bw15</key> + <value>0</value> </param> <param> - <key>clock_source4</key> - <value></value> + <key>corr15</key> + <value>0</value> </param> <param> - <key>time_source4</key> - <value></value> + <key>freq15</key> + <value>100e6</value> </param> <param> - <key>clock_source5</key> - <value></value> + <key>if_gain15</key> + <value>20</value> </param> <param> - <key>time_source5</key> - <value></value> + <key>gain15</key> + <value>10</value> </param> <param> - <key>clock_source6</key> + <key>ant16</key> <value></value> </param> <param> - <key>time_source6</key> - <value></value> + <key>bb_gain16</key> + <value>20</value> </param> <param> - <key>clock_source7</key> - <value></value> + <key>bw16</key> + <value>0</value> </param> <param> - <key>time_source7</key> - <value></value> + <key>corr16</key> + <value>0</value> </param> <param> - <key>nchan</key> - <value>1</value> + <key>freq16</key> + <value>100e6</value> </param> <param> - <key>sample_rate</key> - <value>samp_rate</value> + <key>if_gain16</key> + <value>20</value> </param> <param> - <key>freq0</key> - <value>1280e6</value> + <key>gain16</key> + <value>10</value> </param> <param> - <key>corr0</key> - <value>0</value> + <key>ant17</key> + <value></value> </param> <param> - <key>gain0</key> - <value>15</value> + <key>bb_gain17</key> + <value>20</value> </param> <param> - <key>if_gain0</key> + <key>bw17</key> <value>0</value> </param> <param> - <key>bb_gain0</key> - <value>-10</value> + <key>corr17</key> + <value>0</value> </param> <param> - <key>ant0</key> + <key>freq17</key> + <value>100e6</value> + </param> + <param> + <key>if_gain17</key> + <value>20</value> + </param> + <param> + <key>gain17</key> + <value>10</value> + </param> + <param> + <key>ant18</key> <value></value> </param> <param> - <key>bw0</key> - <value>6000000</value> + <key>bb_gain18</key> + <value>20</value> </param> <param> - <key>freq1</key> - <value>100e6</value> + <key>bw18</key> + <value>0</value> </param> <param> - <key>corr1</key> + <key>corr18</key> <value>0</value> </param> <param> - <key>gain1</key> + <key>freq18</key> + <value>100e6</value> + </param> + <param> + <key>if_gain18</key> + <value>20</value> + </param> + <param> + <key>gain18</key> <value>10</value> </param> <param> - <key>if_gain1</key> + <key>ant19</key> + <value></value> + </param> + <param> + <key>bb_gain19</key> <value>20</value> </param> <param> - <key>bb_gain1</key> + <key>bw19</key> + <value>0</value> + </param> + <param> + <key>corr19</key> + <value>0</value> + </param> + <param> + <key>freq19</key> + <value>100e6</value> + </param> + <param> + <key>if_gain19</key> <value>20</value> </param> <param> + <key>gain19</key> + <value>10</value> + </param> + <param> <key>ant1</key> <value></value> </param> <param> + <key>bb_gain1</key> + <value>20</value> + </param> + <param> <key>bw1</key> <value>0</value> </param> <param> - <key>freq2</key> + <key>corr1</key> + <value>0</value> + </param> + <param> + <key>freq1</key> <value>100e6</value> </param> <param> - <key>corr2</key> - <value>0</value> + <key>if_gain1</key> + <value>20</value> </param> <param> - <key>gain2</key> + <key>gain1</key> <value>10</value> </param> <param> - <key>if_gain2</key> - <value>20</value> + <key>ant20</key> + <value></value> </param> <param> - <key>bb_gain2</key> + <key>bb_gain20</key> <value>20</value> </param> <param> - <key>ant2</key> - <value></value> + <key>bw20</key> + <value>0</value> </param> <param> - <key>bw2</key> + <key>corr20</key> <value>0</value> </param> <param> - <key>freq3</key> + <key>freq20</key> <value>100e6</value> </param> <param> - <key>corr3</key> - <value>0</value> + <key>if_gain20</key> + <value>20</value> </param> <param> - <key>gain3</key> + <key>gain20</key> <value>10</value> </param> <param> - <key>if_gain3</key> - <value>20</value> + <key>ant21</key> + <value></value> </param> <param> - <key>bb_gain3</key> + <key>bb_gain21</key> <value>20</value> </param> <param> - <key>ant3</key> - <value></value> + <key>bw21</key> + <value>0</value> </param> <param> - <key>bw3</key> + <key>corr21</key> <value>0</value> </param> <param> - <key>freq4</key> + <key>freq21</key> <value>100e6</value> </param> <param> - <key>corr4</key> - <value>0</value> + <key>if_gain21</key> + <value>20</value> </param> <param> - <key>gain4</key> + <key>gain21</key> <value>10</value> </param> <param> - <key>if_gain4</key> - <value>20</value> + <key>ant22</key> + <value></value> </param> <param> - <key>bb_gain4</key> + <key>bb_gain22</key> <value>20</value> </param> <param> - <key>ant4</key> - <value></value> + <key>bw22</key> + <value>0</value> </param> <param> - <key>bw4</key> + <key>corr22</key> <value>0</value> </param> <param> - <key>freq5</key> + <key>freq22</key> <value>100e6</value> </param> <param> - <key>corr5</key> - <value>0</value> + <key>if_gain22</key> + <value>20</value> </param> <param> - <key>gain5</key> + <key>gain22</key> <value>10</value> </param> <param> - <key>if_gain5</key> - <value>20</value> + <key>ant23</key> + <value></value> </param> <param> - <key>bb_gain5</key> + <key>bb_gain23</key> <value>20</value> </param> <param> - <key>ant5</key> - <value></value> + <key>bw23</key> + <value>0</value> </param> <param> - <key>bw5</key> + <key>corr23</key> <value>0</value> </param> <param> - <key>freq6</key> + <key>freq23</key> <value>100e6</value> </param> <param> - <key>corr6</key> - <value>0</value> + <key>if_gain23</key> + <value>20</value> </param> <param> - <key>gain6</key> + <key>gain23</key> <value>10</value> </param> <param> - <key>if_gain6</key> - <value>20</value> + <key>ant24</key> + <value></value> </param> <param> - <key>bb_gain6</key> + <key>bb_gain24</key> <value>20</value> </param> <param> - <key>ant6</key> - <value></value> + <key>bw24</key> + <value>0</value> </param> <param> - <key>bw6</key> + <key>corr24</key> <value>0</value> </param> <param> - <key>freq7</key> + <key>freq24</key> <value>100e6</value> </param> <param> - <key>corr7</key> - <value>0</value> + <key>if_gain24</key> + <value>20</value> </param> <param> - <key>gain7</key> + <key>gain24</key> <value>10</value> </param> <param> - <key>if_gain7</key> - <value>20</value> + <key>ant25</key> + <value></value> </param> <param> - <key>bb_gain7</key> + <key>bb_gain25</key> <value>20</value> </param> <param> - <key>ant7</key> - <value></value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>bw7</key> + <key>corr25</key> <value>0</value> </param> <param> - <key>freq8</key> + <key>freq25</key> <value>100e6</value> </param> <param> - <key>corr8</key> - <value>0</value> + <key>if_gain25</key> + <value>20</value> </param> <param> - <key>gain8</key> + <key>gain25</key> <value>10</value> </param> <param> - <key>if_gain8</key> - <value>20</value> + <key>ant26</key> + <value></value> </param> <param> - <key>bb_gain8</key> + <key>bb_gain26</key> <value>20</value> </param> <param> - <key>ant8</key> - <value></value> + <key>bw26</key> + <value>0</value> </param> <param> - <key>bw8</key> + <key>corr26</key> <value>0</value> </param> <param> - <key>freq9</key> + <key>freq26</key> <value>100e6</value> </param> <param> - <key>corr9</key> - <value>0</value> + <key>if_gain26</key> + <value>20</value> </param> <param> - <key>gain9</key> + <key>gain26</key> <value>10</value> </param> <param> - <key>if_gain9</key> - <value>20</value> + <key>ant27</key> + <value></value> </param> <param> - <key>bb_gain9</key> + <key>bb_gain27</key> <value>20</value> </param> <param> - <key>ant9</key> - <value></value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>bw9</key> + <key>corr27</key> <value>0</value> </param> <param> - <key>freq10</key> + <key>freq27</key> <value>100e6</value> </param> <param> - <key>corr10</key> - <value>0</value> + <key>if_gain27</key> + <value>20</value> </param> <param> - <key>gain10</key> + <key>gain27</key> <value>10</value> </param> <param> - <key>if_gain10</key> - <value>20</value> + <key>ant28</key> + <value></value> </param> <param> - <key>bb_gain10</key> + <key>bb_gain28</key> <value>20</value> </param> <param> - <key>ant10</key> - <value></value> + <key>bw28</key> + <value>0</value> </param> <param> - <key>bw10</key> + <key>corr28</key> <value>0</value> </param> <param> - <key>freq11</key> + <key>freq28</key> <value>100e6</value> </param> <param> - <key>corr11</key> - <value>0</value> + <key>if_gain28</key> + <value>20</value> </param> <param> - <key>gain11</key> + <key>gain28</key> <value>10</value> </param> <param> - <key>if_gain11</key> - <value>20</value> + <key>ant29</key> + <value></value> </param> <param> - <key>bb_gain11</key> + <key>bb_gain29</key> <value>20</value> </param> <param> - <key>ant11</key> - <value></value> + <key>bw29</key> + <value>0</value> </param> <param> - <key>bw11</key> + <key>corr29</key> <value>0</value> </param> <param> - <key>freq12</key> + <key>freq29</key> <value>100e6</value> </param> <param> - <key>corr12</key> - <value>0</value> + <key>if_gain29</key> + <value>20</value> </param> <param> - <key>gain12</key> + <key>gain29</key> <value>10</value> </param> <param> - <key>if_gain12</key> - <value>20</value> + <key>ant2</key> + <value></value> </param> <param> - <key>bb_gain12</key> + <key>bb_gain2</key> <value>20</value> </param> <param> - <key>ant12</key> - <value></value> + <key>bw2</key> + <value>0</value> </param> <param> - <key>bw12</key> + <key>corr2</key> <value>0</value> </param> <param> - <key>freq13</key> + <key>freq2</key> <value>100e6</value> </param> <param> - <key>corr13</key> - <value>0</value> + <key>if_gain2</key> + <value>20</value> </param> <param> - <key>gain13</key> + <key>gain2</key> <value>10</value> </param> <param> - <key>if_gain13</key> - <value>20</value> + <key>ant30</key> + <value></value> </param> <param> - <key>bb_gain13</key> + <key>bb_gain30</key> <value>20</value> </param> <param> - <key>ant13</key> - <value></value> + <key>bw30</key> + <value>0</value> </param> <param> - <key>bw13</key> + <key>corr30</key> <value>0</value> </param> <param> - <key>freq14</key> + <key>freq30</key> <value>100e6</value> </param> <param> - <key>corr14</key> - <value>0</value> + <key>if_gain30</key> + <value>20</value> </param> <param> - <key>gain14</key> + <key>gain30</key> <value>10</value> </param> <param> - <key>if_gain14</key> - <value>20</value> + <key>ant31</key> + <value></value> </param> <param> - <key>bb_gain14</key> + <key>bb_gain31</key> <value>20</value> </param> <param> - <key>ant14</key> - <value></value> + <key>bw31</key> + <value>0</value> </param> <param> - <key>bw14</key> + <key>corr31</key> <value>0</value> </param> <param> - <key>freq15</key> + <key>freq31</key> <value>100e6</value> </param> <param> - <key>corr15</key> - <value>0</value> + <key>if_gain31</key> + <value>20</value> </param> <param> - <key>gain15</key> + <key>gain31</key> <value>10</value> </param> <param> - <key>if_gain15</key> + <key>ant3</key> + <value></value> + </param> + <param> + <key>bb_gain3</key> <value>20</value> </param> <param> - <key>bb_gain15</key> + <key>bw3</key> + <value>0</value> + </param> + <param> + <key>corr3</key> + <value>0</value> + </param> + <param> + <key>freq3</key> + <value>100e6</value> + </param> + <param> + <key>if_gain3</key> <value>20</value> </param> <param> - <key>ant15</key> + <key>gain3</key> + <value>10</value> + </param> + <param> + <key>ant4</key> <value></value> </param> <param> - <key>bw15</key> + <key>bb_gain4</key> + <value>20</value> + </param> + <param> + <key>bw4</key> <value>0</value> </param> <param> - <key>freq16</key> + <key>corr4</key> + <value>0</value> + </param> + <param> + <key>freq4</key> <value>100e6</value> </param> <param> - <key>corr16</key> - <value>0</value> + <key>if_gain4</key> + <value>20</value> </param> <param> - <key>gain16</key> + <key>gain4</key> <value>10</value> </param> <param> - <key>if_gain16</key> + <key>ant5</key> + <value></value> + </param> + <param> + <key>bb_gain5</key> <value>20</value> </param> <param> - <key>bb_gain16</key> + <key>bw5</key> + <value>0</value> + </param> + <param> + <key>corr5</key> + <value>0</value> + </param> + <param> + <key>freq5</key> + <value>100e6</value> + </param> + <param> + <key>if_gain5</key> <value>20</value> </param> <param> - <key>ant16</key> + <key>gain5</key> + <value>10</value> + </param> + <param> + <key>ant6</key> <value></value> </param> <param> - <key>bw16</key> + <key>bb_gain6</key> + <value>20</value> + </param> + <param> + <key>bw6</key> <value>0</value> </param> <param> - <key>freq17</key> + <key>corr6</key> + <value>0</value> + </param> + <param> + <key>freq6</key> <value>100e6</value> </param> <param> - <key>corr17</key> - <value>0</value> + <key>if_gain6</key> + <value>20</value> </param> <param> - <key>gain17</key> + <key>gain6</key> <value>10</value> </param> <param> - <key>if_gain17</key> + <key>ant7</key> + <value></value> + </param> + <param> + <key>bb_gain7</key> <value>20</value> </param> <param> - <key>bb_gain17</key> + <key>bw7</key> + <value>0</value> + </param> + <param> + <key>corr7</key> + <value>0</value> + </param> + <param> + <key>freq7</key> + <value>100e6</value> + </param> + <param> + <key>if_gain7</key> <value>20</value> </param> <param> - <key>ant17</key> + <key>gain7</key> + <value>10</value> + </param> + <param> + <key>ant8</key> <value></value> </param> <param> - <key>bw17</key> + <key>bb_gain8</key> + <value>20</value> + </param> + <param> + <key>bw8</key> <value>0</value> </param> <param> - <key>freq18</key> + <key>corr8</key> + <value>0</value> + </param> + <param> + <key>freq8</key> <value>100e6</value> </param> <param> - <key>corr18</key> - <value>0</value> + <key>if_gain8</key> + <value>20</value> </param> <param> - <key>gain18</key> + <key>gain8</key> <value>10</value> </param> <param> - <key>if_gain18</key> + <key>ant9</key> + <value></value> + </param> + <param> + <key>bb_gain9</key> <value>20</value> </param> <param> - <key>bb_gain18</key> + <key>bw9</key> + <value>0</value> + </param> + <param> + <key>corr9</key> + <value>0</value> + </param> + <param> + <key>freq9</key> + <value>100e6</value> + </param> + <param> + <key>if_gain9</key> <value>20</value> </param> <param> - <key>ant18</key> + <key>gain9</key> + <value>10</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> - <key>bw18</key> + <key>affinity</key> + <value></value> + </param> + <param> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> + </param> + <param> + <key>_enabled</key> <value>0</value> </param> <param> - <key>freq19</key> - <value>100e6</value> + <key>_coordinate</key> + <value>(1040, 243)</value> </param> <param> - <key>corr19</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>gain19</key> - <value>10</value> + <key>id</key> + <value>osmosdr_sink_0</value> </param> <param> - <key>if_gain19</key> - <value>20</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>bb_gain19</key> - <value>20</value> + <key>clock_source0</key> + <value></value> </param> <param> - <key>ant19</key> + <key>time_source0</key> <value></value> </param> <param> - <key>bw19</key> + <key>clock_source1</key> + <value></value> + </param> + <param> + <key>time_source1</key> + <value></value> + </param> + <param> + <key>clock_source2</key> + <value></value> + </param> + <param> + <key>time_source2</key> + <value></value> + </param> + <param> + <key>clock_source3</key> + <value></value> + </param> + <param> + <key>time_source3</key> + <value></value> + </param> + <param> + <key>clock_source4</key> + <value></value> + </param> + <param> + <key>time_source4</key> + <value></value> + </param> + <param> + <key>clock_source5</key> + <value></value> + </param> + <param> + <key>time_source5</key> + <value></value> + </param> + <param> + <key>clock_source6</key> + <value></value> + </param> + <param> + <key>time_source6</key> + <value></value> + </param> + <param> + <key>clock_source7</key> + <value></value> + </param> + <param> + <key>time_source7</key> + <value></value> + </param> + <param> + <key>nchan</key> + <value>1</value> + </param> + <param> + <key>num_mboards</key> + <value>1</value> + </param> + <param> + <key>sample_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + </block> + <block> + <key>uhd_usrp_sink</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>ant0</key> + <value></value> + </param> + <param> + <key>bw0</key> <value>0</value> </param> <param> - <key>freq20</key> - <value>100e6</value> + <key>center_freq0</key> + <value>uhd.tune_request(frequency, ((symbol_rate * (1 + rolloff)) / 2 ) + 1e5)</value> </param> <param> - <key>corr20</key> + <key>norm_gain0</key> + <value>False</value> + </param> + <param> + <key>gain0</key> + <value>60</value> + </param> + <param> + <key>ant10</key> + <value></value> + </param> + <param> + <key>bw10</key> <value>0</value> </param> <param> - <key>gain20</key> - <value>10</value> + <key>center_freq10</key> + <value>0</value> </param> <param> - <key>if_gain20</key> - <value>20</value> + <key>norm_gain10</key> + <value>False</value> </param> <param> - <key>bb_gain20</key> - <value>20</value> + <key>gain10</key> + <value>0</value> </param> <param> - <key>ant20</key> + <key>ant11</key> <value></value> </param> <param> - <key>bw20</key> + <key>bw11</key> <value>0</value> </param> <param> - <key>freq21</key> - <value>100e6</value> + <key>center_freq11</key> + <value>0</value> </param> <param> - <key>corr21</key> + <key>norm_gain11</key> + <value>False</value> + </param> + <param> + <key>gain11</key> <value>0</value> </param> <param> - <key>gain21</key> - <value>10</value> + <key>ant12</key> + <value></value> </param> <param> - <key>if_gain21</key> - <value>20</value> + <key>bw12</key> + <value>0</value> </param> <param> - <key>bb_gain21</key> - <value>20</value> + <key>center_freq12</key> + <value>0</value> </param> <param> - <key>ant21</key> + <key>norm_gain12</key> + <value>False</value> + </param> + <param> + <key>gain12</key> + <value>0</value> + </param> + <param> + <key>ant13</key> <value></value> </param> <param> - <key>bw21</key> + <key>bw13</key> <value>0</value> </param> <param> - <key>freq22</key> - <value>100e6</value> + <key>center_freq13</key> + <value>0</value> </param> <param> - <key>corr22</key> + <key>norm_gain13</key> + <value>False</value> + </param> + <param> + <key>gain13</key> <value>0</value> </param> <param> - <key>gain22</key> - <value>10</value> + <key>ant14</key> + <value></value> </param> <param> - <key>if_gain22</key> - <value>20</value> + <key>bw14</key> + <value>0</value> </param> <param> - <key>bb_gain22</key> - <value>20</value> + <key>center_freq14</key> + <value>0</value> </param> <param> - <key>ant22</key> + <key>norm_gain14</key> + <value>False</value> + </param> + <param> + <key>gain14</key> + <value>0</value> + </param> + <param> + <key>ant15</key> <value></value> </param> <param> - <key>bw22</key> + <key>bw15</key> <value>0</value> </param> <param> - <key>freq23</key> - <value>100e6</value> + <key>center_freq15</key> + <value>0</value> </param> <param> - <key>corr23</key> + <key>norm_gain15</key> + <value>False</value> + </param> + <param> + <key>gain15</key> <value>0</value> </param> <param> - <key>gain23</key> - <value>10</value> + <key>ant16</key> + <value></value> </param> <param> - <key>if_gain23</key> - <value>20</value> + <key>bw16</key> + <value>0</value> </param> <param> - <key>bb_gain23</key> - <value>20</value> + <key>center_freq16</key> + <value>0</value> </param> <param> - <key>ant23</key> + <key>norm_gain16</key> + <value>False</value> + </param> + <param> + <key>gain16</key> + <value>0</value> + </param> + <param> + <key>ant17</key> <value></value> </param> <param> - <key>bw23</key> + <key>bw17</key> <value>0</value> </param> <param> - <key>freq24</key> - <value>100e6</value> + <key>center_freq17</key> + <value>0</value> </param> <param> - <key>corr24</key> + <key>norm_gain17</key> + <value>False</value> + </param> + <param> + <key>gain17</key> <value>0</value> </param> <param> - <key>gain24</key> - <value>10</value> + <key>ant18</key> + <value></value> </param> <param> - <key>if_gain24</key> - <value>20</value> + <key>bw18</key> + <value>0</value> </param> <param> - <key>bb_gain24</key> - <value>20</value> + <key>center_freq18</key> + <value>0</value> </param> <param> - <key>ant24</key> + <key>norm_gain18</key> + <value>False</value> + </param> + <param> + <key>gain18</key> + <value>0</value> + </param> + <param> + <key>ant19</key> <value></value> </param> <param> - <key>bw24</key> + <key>bw19</key> <value>0</value> </param> <param> - <key>freq25</key> - <value>100e6</value> + <key>center_freq19</key> + <value>0</value> </param> <param> - <key>corr25</key> + <key>norm_gain19</key> + <value>False</value> + </param> + <param> + <key>gain19</key> <value>0</value> </param> <param> - <key>gain25</key> - <value>10</value> + <key>ant1</key> + <value></value> </param> <param> - <key>if_gain25</key> - <value>20</value> + <key>bw1</key> + <value>0</value> </param> <param> - <key>bb_gain25</key> - <value>20</value> + <key>center_freq1</key> + <value>0</value> </param> <param> - <key>ant25</key> + <key>norm_gain1</key> + <value>False</value> + </param> + <param> + <key>gain1</key> + <value>0</value> + </param> + <param> + <key>ant20</key> <value></value> </param> <param> - <key>bw25</key> + <key>bw20</key> <value>0</value> </param> <param> - <key>freq26</key> - <value>100e6</value> + <key>center_freq20</key> + <value>0</value> </param> <param> - <key>corr26</key> + <key>norm_gain20</key> + <value>False</value> + </param> + <param> + <key>gain20</key> <value>0</value> </param> <param> - <key>gain26</key> - <value>10</value> + <key>ant21</key> + <value></value> </param> <param> - <key>if_gain26</key> - <value>20</value> + <key>bw21</key> + <value>0</value> </param> <param> - <key>bb_gain26</key> - <value>20</value> + <key>center_freq21</key> + <value>0</value> </param> <param> - <key>ant26</key> + <key>norm_gain21</key> + <value>False</value> + </param> + <param> + <key>gain21</key> + <value>0</value> + </param> + <param> + <key>ant22</key> <value></value> </param> <param> - <key>bw26</key> + <key>bw22</key> <value>0</value> </param> <param> - <key>freq27</key> - <value>100e6</value> + <key>center_freq22</key> + <value>0</value> </param> <param> - <key>corr27</key> + <key>norm_gain22</key> + <value>False</value> + </param> + <param> + <key>gain22</key> <value>0</value> </param> <param> - <key>gain27</key> - <value>10</value> + <key>ant23</key> + <value></value> </param> <param> - <key>if_gain27</key> - <value>20</value> + <key>bw23</key> + <value>0</value> </param> <param> - <key>bb_gain27</key> - <value>20</value> + <key>center_freq23</key> + <value>0</value> </param> <param> - <key>ant27</key> + <key>norm_gain23</key> + <value>False</value> + </param> + <param> + <key>gain23</key> + <value>0</value> + </param> + <param> + <key>ant24</key> <value></value> </param> <param> - <key>bw27</key> + <key>bw24</key> <value>0</value> </param> <param> - <key>freq28</key> - <value>100e6</value> + <key>center_freq24</key> + <value>0</value> </param> <param> - <key>corr28</key> + <key>norm_gain24</key> + <value>False</value> + </param> + <param> + <key>gain24</key> <value>0</value> </param> <param> - <key>gain28</key> - <value>10</value> + <key>ant25</key> + <value></value> </param> <param> - <key>if_gain28</key> - <value>20</value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>bb_gain28</key> - <value>20</value> + <key>center_freq25</key> + <value>0</value> </param> <param> - <key>ant28</key> + <key>norm_gain25</key> + <value>False</value> + </param> + <param> + <key>gain25</key> + <value>0</value> + </param> + <param> + <key>ant26</key> <value></value> </param> <param> - <key>bw28</key> + <key>bw26</key> <value>0</value> </param> <param> - <key>freq29</key> - <value>100e6</value> + <key>center_freq26</key> + <value>0</value> </param> <param> - <key>corr29</key> + <key>norm_gain26</key> + <value>False</value> + </param> + <param> + <key>gain26</key> <value>0</value> </param> <param> - <key>gain29</key> - <value>10</value> + <key>ant27</key> + <value></value> </param> <param> - <key>if_gain29</key> - <value>20</value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>bb_gain29</key> - <value>20</value> + <key>center_freq27</key> + <value>0</value> + </param> + <param> + <key>norm_gain27</key> + <value>False</value> + </param> + <param> + <key>gain27</key> + <value>0</value> + </param> + <param> + <key>ant28</key> + <value></value> + </param> + <param> + <key>bw28</key> + <value>0</value> + </param> + <param> + <key>center_freq28</key> + <value>0</value> + </param> + <param> + <key>norm_gain28</key> + <value>False</value> + </param> + <param> + <key>gain28</key> + <value>0</value> </param> <param> <key>ant29</key> @@ -1596,24 +2272,36 @@ <value>0</value> </param> <param> - <key>freq30</key> - <value>100e6</value> + <key>center_freq29</key> + <value>0</value> </param> <param> - <key>corr30</key> + <key>norm_gain29</key> + <value>False</value> + </param> + <param> + <key>gain29</key> <value>0</value> </param> <param> - <key>gain30</key> - <value>10</value> + <key>ant2</key> + <value></value> </param> <param> - <key>if_gain30</key> - <value>20</value> + <key>bw2</key> + <value>0</value> </param> <param> - <key>bb_gain30</key> - <value>20</value> + <key>center_freq2</key> + <value>0</value> + </param> + <param> + <key>norm_gain2</key> + <value>False</value> + </param> + <param> + <key>gain2</key> + <value>0</value> </param> <param> <key>ant30</key> @@ -1624,82 +2312,183 @@ <value>0</value> </param> <param> - <key>freq31</key> - <value>100e6</value> + <key>center_freq30</key> + <value>0</value> </param> <param> - <key>corr31</key> + <key>norm_gain30</key> + <value>False</value> + </param> + <param> + <key>gain30</key> <value>0</value> </param> <param> + <key>ant31</key> + <value></value> + </param> + <param> + <key>bw31</key> + <value>0</value> + </param> + <param> + <key>center_freq31</key> + <value>0</value> + </param> + <param> + <key>norm_gain31</key> + <value>False</value> + </param> + <param> <key>gain31</key> - <value>10</value> + <value>0</value> </param> <param> - <key>if_gain31</key> - <value>20</value> + <key>ant3</key> + <value></value> </param> <param> - <key>bb_gain31</key> - <value>20</value> + <key>bw3</key> + <value>0</value> </param> <param> - <key>ant31</key> + <key>center_freq3</key> + <value>0</value> + </param> + <param> + <key>norm_gain3</key> + <value>False</value> + </param> + <param> + <key>gain3</key> + <value>0</value> + </param> + <param> + <key>ant4</key> <value></value> </param> <param> - <key>bw31</key> + <key>bw4</key> <value>0</value> </param> <param> - <key>alias</key> + <key>center_freq4</key> + <value>0</value> + </param> + <param> + <key>norm_gain4</key> + <value>False</value> + </param> + <param> + <key>gain4</key> + <value>0</value> + </param> + <param> + <key>ant5</key> <value></value> </param> <param> - <key>affinity</key> + <key>bw5</key> + <value>0</value> + </param> + <param> + <key>center_freq5</key> + <value>0</value> + </param> + <param> + <key>norm_gain5</key> + <value>False</value> + </param> + <param> + <key>gain5</key> + <value>0</value> + </param> + <param> + <key>ant6</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(1000, 203)</value> + <key>bw6</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq6</key> <value>0</value> </param> - </block> - <block> - <key>blocks_file_sink</key> <param> - <key>id</key> - <value>blocks_file_sink_0</value> + <key>norm_gain6</key> + <value>False</value> </param> <param> - <key>_enabled</key> + <key>gain6</key> + <value>0</value> + </param> + <param> + <key>ant7</key> + <value></value> + </param> + <param> + <key>bw7</key> + <value>0</value> + </param> + <param> + <key>center_freq7</key> + <value>0</value> + </param> + <param> + <key>norm_gain7</key> <value>False</value> </param> <param> - <key>file</key> - <value>adv.cfile</value> + <key>gain7</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>ant8</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>bw8</key> + <value>0</value> </param> <param> - <key>unbuffered</key> + <key>center_freq8</key> + <value>0</value> + </param> + <param> + <key>norm_gain8</key> <value>False</value> </param> <param> - <key>append</key> + <key>gain8</key> + <value>0</value> + </param> + <param> + <key>ant9</key> + <value></value> + </param> + <param> + <key>bw9</key> + <value>0</value> + </param> + <param> + <key>center_freq9</key> + <value>0</value> + </param> + <param> + <key>norm_gain9</key> <value>False</value> </param> <param> - <key>alias</key> + <key>gain9</key> + <value>0</value> + </param> + <param> + <key>clock_rate</key> + <value>0.0</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> @@ -1707,163 +2496,270 @@ <value></value> </param> <param> + <key>dev_addr</key> + <value>"send_frame_size=65536,num_send_frames=256,master_clock_rate=" + str(samp_rate*2)</value> + </param> + <param> + <key>dev_args</key> + <value>""</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> <key>_coordinate</key> - <value>(792, 547)</value> + <value>(1040, 427)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvb_bbheader_bb</key> <param> <key>id</key> - <value>dtv_dvb_bbheader_bb_0</value> + <value>uhd_usrp_sink_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>standard</key> - <value>STANDARD_DVBS2</value> + <key>clock_source0</key> + <value></value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>sd_spec0</key> + <value></value> </param> <param> - <key>rate1</key> - <value>C1_2</value> + <key>time_source0</key> + <value></value> </param> <param> - <key>rate2</key> - <value>C1_3</value> + <key>clock_source1</key> + <value></value> </param> <param> - <key>rate3</key> - <value>C9_10</value> + <key>sd_spec1</key> + <value></value> </param> <param> - <key>rate4</key> - <value>C1_4</value> + <key>time_source1</key> + <value></value> </param> <param> - <key>rolloff</key> - <value>RO_0_20</value> + <key>clock_source2</key> + <value></value> </param> <param> - <key>mode</key> - <value>FECFRAME_NORMAL</value> + <key>sd_spec2</key> + <value></value> </param> <param> - <key>inband</key> - <value>INBAND_OFF</value> + <key>time_source2</key> + <value></value> </param> <param> - <key>fecblocks</key> - <value>168</value> + <key>clock_source3</key> + <value></value> </param> <param> - <key>tsrate</key> - <value>4000000</value> + <key>sd_spec3</key> + <value></value> </param> <param> - <key>alias</key> + <key>time_source3</key> <value></value> </param> <param> - <key>affinity</key> + <key>clock_source4</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>sd_spec4</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>time_source4</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(400, 27)</value> + <key>clock_source5</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>sd_spec5</key> + <value></value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> - <key>id</key> - <value>blocks_file_source_0</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>clock_source6</key> + <value></value> </param> <param> - <key>file</key> - <value>/run/shm/adv16apsk910.ts</value> + <key>sd_spec6</key> + <value></value> </param> <param> - <key>type</key> - <value>byte</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>clock_source7</key> + <value></value> </param> <param> - <key>vlen</key> + <key>sd_spec7</key> + <value></value> + </param> + <param> + <key>time_source7</key> + <value></value> + </param> + <param> + <key>nchan</key> <value>1</value> </param> <param> + <key>num_mboards</key> + <value>1</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>hide_cmd_port</key> + <value>False</value> + </param> + <param> + <key>stream_args</key> + <value></value> + </param> + <param> + <key>stream_chans</key> + <value>[]</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + <param> + <key>len_tag_name</key> + <value></value> + </param> + <param> + <key>otw</key> + <value></value> + </param> + </block> + <block> + <key>wxgui_fftsink2</key> + <param> + <key>avg_alpha</key> + <value>0.13333</value> + </param> + <param> + <key>average</key> + <value>True</value> + </param> + <param> + <key>baseband_freq</key> + <value>frequency</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> + <key>comment</key> + <value></value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fft_size</key> + <value>1024</value> + </param> + <param> + <key>freqvar</key> + <value>None</value> </param> <param> <key>_coordinate</key> - <value>(176, 43)</value> + <value>(784, 203)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>wxgui_fftsink2_0</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>ref_scale</key> + <value>2.0</value> + </param> + <param> + <key>fft_rate</key> + <value>15</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>title</key> + <value>FFT Plot</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>win</key> + <value>None</value> + </param> + <param> + <key>y_divs</key> + <value>10</value> + </param> + <param> + <key>y_per_div</key> + <value>10</value> + </param> </block> <connection> - <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>osmosdr_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>wxgui_fftsink2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>blocks_file_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> <source_block_id>blocks_file_source_0</source_block_id> <sink_block_id>dtv_dvb_bbheader_bb_0</sink_block_id> <source_key>0</source_key> @@ -1900,14 +2796,38 @@ <sink_key>0</sink_key> </connection> <connection> + <source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id> + <sink_block_id>dtv_dvbs2_physical_cc_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> <source_block_id>dtv_dvbs2_physical_cc_0</source_block_id> <sink_block_id>fft_filter_xxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id> - <sink_block_id>dtv_dvbs2_physical_cc_0</sink_block_id> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>osmosdr_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>uhd_usrp_sink_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>wxgui_fftsink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/dvbs_tx.grc b/gr-dtv/examples/dvbs_tx.grc new file mode 100644 index 0000000000..c9dd98a0b9 --- /dev/null +++ b/gr-dtv/examples/dvbs_tx.grc @@ -0,0 +1,2853 @@ +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.10'?> +<flow_graph> + <timestamp>Wed Jun 18 01:23:58 2014</timestamp> + <block> + <key>options</key> + <param> + <key>author</key> + <value></value> + </param> + <param> + <key>window_size</key> + <value>1280, 1024</value> + </param> + <param> + <key>category</key> + <value>Custom</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>description</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 11)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>generate_options</key> + <value>wx_gui</value> + </param> + <param> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>dvbs_tx</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>qt_qss_theme</key> + <value></value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>run_command</key> + <value>{python} -u {filename}</value> + </param> + <param> + <key>run_options</key> + <value>prompt</value> + </param> + <param> + <key>run</key> + <value>True</value> + </param> + <param> + <key>thread_safe_setters</key> + <value></value> + </param> + <param> + <key>title</key> + <value></value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 203)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>frequency</value> + </param> + <param> + <key>value</key> + <value>1280e6</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 267)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>rrc_taps</value> + </param> + <param> + <key>value</key> + <value>100</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 75)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>value</key> + <value>symbol_rate * 2</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 139)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>symbol_rate</value> + </param> + <param> + <key>value</key> + <value>8000000</value> + </param> + </block> + <block> + <key>blocks_file_sink</key> + <param> + <key>append</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>file</key> + <value>adv.bin</value> + </param> + <param> + <key>_coordinate</key> + <value>(848, 507)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_file_sink_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>unbuffered</key> + <value>False</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_file_source</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>file</key> + <value>/run/shm/advdvbs78.ts</value> + </param> + <param> + <key>_coordinate</key> + <value>(184, 59)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_file_source_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_pack_k_bits_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(176, 451)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_pack_k_bits_bb_0</value> + </param> + <param> + <key>k</key> + <value>2</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_packed_to_unpacked_xx</key> + <param> + <key>bits_per_chunk</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>endianness</key> + <value>gr.GR_MSB_FIRST</value> + </param> + <param> + <key>_coordinate</key> + <value>(1080, 59)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_packed_to_unpacked_xx_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + </block> + <block> + <key>blocks_unpack_k_bits_bb</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(408, 235)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_unpack_k_bits_bb_0</value> + </param> + <param> + <key>k</key> + <value>2</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvbs2_modulator_bc</key> + <param> + <key>interpolation</key> + <value>INTERPOLATION_ON</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>rate</key> + <value>C_OTHER</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>constellation</key> + <value>MOD_QPSK</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>_coordinate</key> + <value>(352, 427)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbs2_modulator_bc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvbt_convolutional_interleaver</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>blocks</key> + <value>136</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>M</key> + <value>17</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(832, 51)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_convolutional_interleaver_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>I</key> + <value>12</value> + </param> + </block> + <block> + <key>dtv_dvbt_energy_dispersal</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>nsize</key> + <value>1</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(408, 73)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_energy_dispersal_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvbt_reed_solomon_enc</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>blocks</key> + <value>8</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>gfpoly</key> + <value>0x11d</value> + </param> + <param> + <key>_coordinate</key> + <value>(600, 19)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_reed_solomon_enc_0</value> + </param> + <param> + <key>k</key> + <value>239</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>n</key> + <value>255</value> + </param> + <param> + <key>s</key> + <value>51</value> + </param> + <param> + <key>m</key> + <value>8</value> + </param> + <param> + <key>p</key> + <value>2</value> + </param> + <param> + <key>t</key> + <value>8</value> + </param> + </block> + <block> + <key>fec_puncture_xx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>delay</key> + <value>0</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(600, 219)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fec_puncture_xx_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>puncpat</key> + <value>0b11010101100110</value> + </param> + <param> + <key>puncsize</key> + <value>14</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + </block> + <block> + <key>fft_filter_xxx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(584, 435)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fft_filter_xxx_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>nthreads</key> + <value>1</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>taps</key> + <value>firdes.root_raised_cosine(1.0, samp_rate, samp_rate/2, 0.35, rrc_taps)</value> + </param> + <param> + <key>type</key> + <value>ccc</value> + </param> + </block> + <block> + <key>osmosdr_sink</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>ant0</key> + <value></value> + </param> + <param> + <key>bb_gain0</key> + <value>-10</value> + </param> + <param> + <key>bw0</key> + <value>10000000</value> + </param> + <param> + <key>corr0</key> + <value>0</value> + </param> + <param> + <key>freq0</key> + <value>frequency</value> + </param> + <param> + <key>if_gain0</key> + <value>0</value> + </param> + <param> + <key>gain0</key> + <value>15</value> + </param> + <param> + <key>ant10</key> + <value></value> + </param> + <param> + <key>bb_gain10</key> + <value>20</value> + </param> + <param> + <key>bw10</key> + <value>0</value> + </param> + <param> + <key>corr10</key> + <value>0</value> + </param> + <param> + <key>freq10</key> + <value>100e6</value> + </param> + <param> + <key>if_gain10</key> + <value>20</value> + </param> + <param> + <key>gain10</key> + <value>10</value> + </param> + <param> + <key>ant11</key> + <value></value> + </param> + <param> + <key>bb_gain11</key> + <value>20</value> + </param> + <param> + <key>bw11</key> + <value>0</value> + </param> + <param> + <key>corr11</key> + <value>0</value> + </param> + <param> + <key>freq11</key> + <value>100e6</value> + </param> + <param> + <key>if_gain11</key> + <value>20</value> + </param> + <param> + <key>gain11</key> + <value>10</value> + </param> + <param> + <key>ant12</key> + <value></value> + </param> + <param> + <key>bb_gain12</key> + <value>20</value> + </param> + <param> + <key>bw12</key> + <value>0</value> + </param> + <param> + <key>corr12</key> + <value>0</value> + </param> + <param> + <key>freq12</key> + <value>100e6</value> + </param> + <param> + <key>if_gain12</key> + <value>20</value> + </param> + <param> + <key>gain12</key> + <value>10</value> + </param> + <param> + <key>ant13</key> + <value></value> + </param> + <param> + <key>bb_gain13</key> + <value>20</value> + </param> + <param> + <key>bw13</key> + <value>0</value> + </param> + <param> + <key>corr13</key> + <value>0</value> + </param> + <param> + <key>freq13</key> + <value>100e6</value> + </param> + <param> + <key>if_gain13</key> + <value>20</value> + </param> + <param> + <key>gain13</key> + <value>10</value> + </param> + <param> + <key>ant14</key> + <value></value> + </param> + <param> + <key>bb_gain14</key> + <value>20</value> + </param> + <param> + <key>bw14</key> + <value>0</value> + </param> + <param> + <key>corr14</key> + <value>0</value> + </param> + <param> + <key>freq14</key> + <value>100e6</value> + </param> + <param> + <key>if_gain14</key> + <value>20</value> + </param> + <param> + <key>gain14</key> + <value>10</value> + </param> + <param> + <key>ant15</key> + <value></value> + </param> + <param> + <key>bb_gain15</key> + <value>20</value> + </param> + <param> + <key>bw15</key> + <value>0</value> + </param> + <param> + <key>corr15</key> + <value>0</value> + </param> + <param> + <key>freq15</key> + <value>100e6</value> + </param> + <param> + <key>if_gain15</key> + <value>20</value> + </param> + <param> + <key>gain15</key> + <value>10</value> + </param> + <param> + <key>ant16</key> + <value></value> + </param> + <param> + <key>bb_gain16</key> + <value>20</value> + </param> + <param> + <key>bw16</key> + <value>0</value> + </param> + <param> + <key>corr16</key> + <value>0</value> + </param> + <param> + <key>freq16</key> + <value>100e6</value> + </param> + <param> + <key>if_gain16</key> + <value>20</value> + </param> + <param> + <key>gain16</key> + <value>10</value> + </param> + <param> + <key>ant17</key> + <value></value> + </param> + <param> + <key>bb_gain17</key> + <value>20</value> + </param> + <param> + <key>bw17</key> + <value>0</value> + </param> + <param> + <key>corr17</key> + <value>0</value> + </param> + <param> + <key>freq17</key> + <value>100e6</value> + </param> + <param> + <key>if_gain17</key> + <value>20</value> + </param> + <param> + <key>gain17</key> + <value>10</value> + </param> + <param> + <key>ant18</key> + <value></value> + </param> + <param> + <key>bb_gain18</key> + <value>20</value> + </param> + <param> + <key>bw18</key> + <value>0</value> + </param> + <param> + <key>corr18</key> + <value>0</value> + </param> + <param> + <key>freq18</key> + <value>100e6</value> + </param> + <param> + <key>if_gain18</key> + <value>20</value> + </param> + <param> + <key>gain18</key> + <value>10</value> + </param> + <param> + <key>ant19</key> + <value></value> + </param> + <param> + <key>bb_gain19</key> + <value>20</value> + </param> + <param> + <key>bw19</key> + <value>0</value> + </param> + <param> + <key>corr19</key> + <value>0</value> + </param> + <param> + <key>freq19</key> + <value>100e6</value> + </param> + <param> + <key>if_gain19</key> + <value>20</value> + </param> + <param> + <key>gain19</key> + <value>10</value> + </param> + <param> + <key>ant1</key> + <value></value> + </param> + <param> + <key>bb_gain1</key> + <value>20</value> + </param> + <param> + <key>bw1</key> + <value>0</value> + </param> + <param> + <key>corr1</key> + <value>0</value> + </param> + <param> + <key>freq1</key> + <value>100e6</value> + </param> + <param> + <key>if_gain1</key> + <value>20</value> + </param> + <param> + <key>gain1</key> + <value>10</value> + </param> + <param> + <key>ant20</key> + <value></value> + </param> + <param> + <key>bb_gain20</key> + <value>20</value> + </param> + <param> + <key>bw20</key> + <value>0</value> + </param> + <param> + <key>corr20</key> + <value>0</value> + </param> + <param> + <key>freq20</key> + <value>100e6</value> + </param> + <param> + <key>if_gain20</key> + <value>20</value> + </param> + <param> + <key>gain20</key> + <value>10</value> + </param> + <param> + <key>ant21</key> + <value></value> + </param> + <param> + <key>bb_gain21</key> + <value>20</value> + </param> + <param> + <key>bw21</key> + <value>0</value> + </param> + <param> + <key>corr21</key> + <value>0</value> + </param> + <param> + <key>freq21</key> + <value>100e6</value> + </param> + <param> + <key>if_gain21</key> + <value>20</value> + </param> + <param> + <key>gain21</key> + <value>10</value> + </param> + <param> + <key>ant22</key> + <value></value> + </param> + <param> + <key>bb_gain22</key> + <value>20</value> + </param> + <param> + <key>bw22</key> + <value>0</value> + </param> + <param> + <key>corr22</key> + <value>0</value> + </param> + <param> + <key>freq22</key> + <value>100e6</value> + </param> + <param> + <key>if_gain22</key> + <value>20</value> + </param> + <param> + <key>gain22</key> + <value>10</value> + </param> + <param> + <key>ant23</key> + <value></value> + </param> + <param> + <key>bb_gain23</key> + <value>20</value> + </param> + <param> + <key>bw23</key> + <value>0</value> + </param> + <param> + <key>corr23</key> + <value>0</value> + </param> + <param> + <key>freq23</key> + <value>100e6</value> + </param> + <param> + <key>if_gain23</key> + <value>20</value> + </param> + <param> + <key>gain23</key> + <value>10</value> + </param> + <param> + <key>ant24</key> + <value></value> + </param> + <param> + <key>bb_gain24</key> + <value>20</value> + </param> + <param> + <key>bw24</key> + <value>0</value> + </param> + <param> + <key>corr24</key> + <value>0</value> + </param> + <param> + <key>freq24</key> + <value>100e6</value> + </param> + <param> + <key>if_gain24</key> + <value>20</value> + </param> + <param> + <key>gain24</key> + <value>10</value> + </param> + <param> + <key>ant25</key> + <value></value> + </param> + <param> + <key>bb_gain25</key> + <value>20</value> + </param> + <param> + <key>bw25</key> + <value>0</value> + </param> + <param> + <key>corr25</key> + <value>0</value> + </param> + <param> + <key>freq25</key> + <value>100e6</value> + </param> + <param> + <key>if_gain25</key> + <value>20</value> + </param> + <param> + <key>gain25</key> + <value>10</value> + </param> + <param> + <key>ant26</key> + <value></value> + </param> + <param> + <key>bb_gain26</key> + <value>20</value> + </param> + <param> + <key>bw26</key> + <value>0</value> + </param> + <param> + <key>corr26</key> + <value>0</value> + </param> + <param> + <key>freq26</key> + <value>100e6</value> + </param> + <param> + <key>if_gain26</key> + <value>20</value> + </param> + <param> + <key>gain26</key> + <value>10</value> + </param> + <param> + <key>ant27</key> + <value></value> + </param> + <param> + <key>bb_gain27</key> + <value>20</value> + </param> + <param> + <key>bw27</key> + <value>0</value> + </param> + <param> + <key>corr27</key> + <value>0</value> + </param> + <param> + <key>freq27</key> + <value>100e6</value> + </param> + <param> + <key>if_gain27</key> + <value>20</value> + </param> + <param> + <key>gain27</key> + <value>10</value> + </param> + <param> + <key>ant28</key> + <value></value> + </param> + <param> + <key>bb_gain28</key> + <value>20</value> + </param> + <param> + <key>bw28</key> + <value>0</value> + </param> + <param> + <key>corr28</key> + <value>0</value> + </param> + <param> + <key>freq28</key> + <value>100e6</value> + </param> + <param> + <key>if_gain28</key> + <value>20</value> + </param> + <param> + <key>gain28</key> + <value>10</value> + </param> + <param> + <key>ant29</key> + <value></value> + </param> + <param> + <key>bb_gain29</key> + <value>20</value> + </param> + <param> + <key>bw29</key> + <value>0</value> + </param> + <param> + <key>corr29</key> + <value>0</value> + </param> + <param> + <key>freq29</key> + <value>100e6</value> + </param> + <param> + <key>if_gain29</key> + <value>20</value> + </param> + <param> + <key>gain29</key> + <value>10</value> + </param> + <param> + <key>ant2</key> + <value></value> + </param> + <param> + <key>bb_gain2</key> + <value>20</value> + </param> + <param> + <key>bw2</key> + <value>0</value> + </param> + <param> + <key>corr2</key> + <value>0</value> + </param> + <param> + <key>freq2</key> + <value>100e6</value> + </param> + <param> + <key>if_gain2</key> + <value>20</value> + </param> + <param> + <key>gain2</key> + <value>10</value> + </param> + <param> + <key>ant30</key> + <value></value> + </param> + <param> + <key>bb_gain30</key> + <value>20</value> + </param> + <param> + <key>bw30</key> + <value>0</value> + </param> + <param> + <key>corr30</key> + <value>0</value> + </param> + <param> + <key>freq30</key> + <value>100e6</value> + </param> + <param> + <key>if_gain30</key> + <value>20</value> + </param> + <param> + <key>gain30</key> + <value>10</value> + </param> + <param> + <key>ant31</key> + <value></value> + </param> + <param> + <key>bb_gain31</key> + <value>20</value> + </param> + <param> + <key>bw31</key> + <value>0</value> + </param> + <param> + <key>corr31</key> + <value>0</value> + </param> + <param> + <key>freq31</key> + <value>100e6</value> + </param> + <param> + <key>if_gain31</key> + <value>20</value> + </param> + <param> + <key>gain31</key> + <value>10</value> + </param> + <param> + <key>ant3</key> + <value></value> + </param> + <param> + <key>bb_gain3</key> + <value>20</value> + </param> + <param> + <key>bw3</key> + <value>0</value> + </param> + <param> + <key>corr3</key> + <value>0</value> + </param> + <param> + <key>freq3</key> + <value>100e6</value> + </param> + <param> + <key>if_gain3</key> + <value>20</value> + </param> + <param> + <key>gain3</key> + <value>10</value> + </param> + <param> + <key>ant4</key> + <value></value> + </param> + <param> + <key>bb_gain4</key> + <value>20</value> + </param> + <param> + <key>bw4</key> + <value>0</value> + </param> + <param> + <key>corr4</key> + <value>0</value> + </param> + <param> + <key>freq4</key> + <value>100e6</value> + </param> + <param> + <key>if_gain4</key> + <value>20</value> + </param> + <param> + <key>gain4</key> + <value>10</value> + </param> + <param> + <key>ant5</key> + <value></value> + </param> + <param> + <key>bb_gain5</key> + <value>20</value> + </param> + <param> + <key>bw5</key> + <value>0</value> + </param> + <param> + <key>corr5</key> + <value>0</value> + </param> + <param> + <key>freq5</key> + <value>100e6</value> + </param> + <param> + <key>if_gain5</key> + <value>20</value> + </param> + <param> + <key>gain5</key> + <value>10</value> + </param> + <param> + <key>ant6</key> + <value></value> + </param> + <param> + <key>bb_gain6</key> + <value>20</value> + </param> + <param> + <key>bw6</key> + <value>0</value> + </param> + <param> + <key>corr6</key> + <value>0</value> + </param> + <param> + <key>freq6</key> + <value>100e6</value> + </param> + <param> + <key>if_gain6</key> + <value>20</value> + </param> + <param> + <key>gain6</key> + <value>10</value> + </param> + <param> + <key>ant7</key> + <value></value> + </param> + <param> + <key>bb_gain7</key> + <value>20</value> + </param> + <param> + <key>bw7</key> + <value>0</value> + </param> + <param> + <key>corr7</key> + <value>0</value> + </param> + <param> + <key>freq7</key> + <value>100e6</value> + </param> + <param> + <key>if_gain7</key> + <value>20</value> + </param> + <param> + <key>gain7</key> + <value>10</value> + </param> + <param> + <key>ant8</key> + <value></value> + </param> + <param> + <key>bb_gain8</key> + <value>20</value> + </param> + <param> + <key>bw8</key> + <value>0</value> + </param> + <param> + <key>corr8</key> + <value>0</value> + </param> + <param> + <key>freq8</key> + <value>100e6</value> + </param> + <param> + <key>if_gain8</key> + <value>20</value> + </param> + <param> + <key>gain8</key> + <value>10</value> + </param> + <param> + <key>ant9</key> + <value></value> + </param> + <param> + <key>bb_gain9</key> + <value>20</value> + </param> + <param> + <key>bw9</key> + <value>0</value> + </param> + <param> + <key>corr9</key> + <value>0</value> + </param> + <param> + <key>freq9</key> + <value>100e6</value> + </param> + <param> + <key>if_gain9</key> + <value>20</value> + </param> + <param> + <key>gain9</key> + <value>10</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(1064, 211)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>osmosdr_sink_0</value> + </param> + <param> + <key>type</key> + <value>fc32</value> + </param> + <param> + <key>clock_source0</key> + <value></value> + </param> + <param> + <key>time_source0</key> + <value></value> + </param> + <param> + <key>clock_source1</key> + <value></value> + </param> + <param> + <key>time_source1</key> + <value></value> + </param> + <param> + <key>clock_source2</key> + <value></value> + </param> + <param> + <key>time_source2</key> + <value></value> + </param> + <param> + <key>clock_source3</key> + <value></value> + </param> + <param> + <key>time_source3</key> + <value></value> + </param> + <param> + <key>clock_source4</key> + <value></value> + </param> + <param> + <key>time_source4</key> + <value></value> + </param> + <param> + <key>clock_source5</key> + <value></value> + </param> + <param> + <key>time_source5</key> + <value></value> + </param> + <param> + <key>clock_source6</key> + <value></value> + </param> + <param> + <key>time_source6</key> + <value></value> + </param> + <param> + <key>clock_source7</key> + <value></value> + </param> + <param> + <key>time_source7</key> + <value></value> + </param> + <param> + <key>nchan</key> + <value>1</value> + </param> + <param> + <key>num_mboards</key> + <value>1</value> + </param> + <param> + <key>sample_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + </block> + <block> + <key>trellis_encoder_xx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>blocklength</key> + <value>0</value> + </param> + <param> + <key>blockwise</key> + <value>False</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>fsm_args</key> + <value>1, 2, (0171, 0133)</value> + </param> + <param> + <key>_coordinate</key> + <value>(176, 227)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>trellis_encoder_xx_0</value> + </param> + <param> + <key>init_state</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>bb</value> + </param> + </block> + <block> + <key>uhd_usrp_sink</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>ant0</key> + <value></value> + </param> + <param> + <key>bw0</key> + <value>0</value> + </param> + <param> + <key>center_freq0</key> + <value>uhd.tune_request(frequency, ((symbol_rate * 1.35) / 2 ) + 1e5)</value> + </param> + <param> + <key>norm_gain0</key> + <value>False</value> + </param> + <param> + <key>gain0</key> + <value>60</value> + </param> + <param> + <key>ant10</key> + <value></value> + </param> + <param> + <key>bw10</key> + <value>0</value> + </param> + <param> + <key>center_freq10</key> + <value>0</value> + </param> + <param> + <key>norm_gain10</key> + <value>False</value> + </param> + <param> + <key>gain10</key> + <value>0</value> + </param> + <param> + <key>ant11</key> + <value></value> + </param> + <param> + <key>bw11</key> + <value>0</value> + </param> + <param> + <key>center_freq11</key> + <value>0</value> + </param> + <param> + <key>norm_gain11</key> + <value>False</value> + </param> + <param> + <key>gain11</key> + <value>0</value> + </param> + <param> + <key>ant12</key> + <value></value> + </param> + <param> + <key>bw12</key> + <value>0</value> + </param> + <param> + <key>center_freq12</key> + <value>0</value> + </param> + <param> + <key>norm_gain12</key> + <value>False</value> + </param> + <param> + <key>gain12</key> + <value>0</value> + </param> + <param> + <key>ant13</key> + <value></value> + </param> + <param> + <key>bw13</key> + <value>0</value> + </param> + <param> + <key>center_freq13</key> + <value>0</value> + </param> + <param> + <key>norm_gain13</key> + <value>False</value> + </param> + <param> + <key>gain13</key> + <value>0</value> + </param> + <param> + <key>ant14</key> + <value></value> + </param> + <param> + <key>bw14</key> + <value>0</value> + </param> + <param> + <key>center_freq14</key> + <value>0</value> + </param> + <param> + <key>norm_gain14</key> + <value>False</value> + </param> + <param> + <key>gain14</key> + <value>0</value> + </param> + <param> + <key>ant15</key> + <value></value> + </param> + <param> + <key>bw15</key> + <value>0</value> + </param> + <param> + <key>center_freq15</key> + <value>0</value> + </param> + <param> + <key>norm_gain15</key> + <value>False</value> + </param> + <param> + <key>gain15</key> + <value>0</value> + </param> + <param> + <key>ant16</key> + <value></value> + </param> + <param> + <key>bw16</key> + <value>0</value> + </param> + <param> + <key>center_freq16</key> + <value>0</value> + </param> + <param> + <key>norm_gain16</key> + <value>False</value> + </param> + <param> + <key>gain16</key> + <value>0</value> + </param> + <param> + <key>ant17</key> + <value></value> + </param> + <param> + <key>bw17</key> + <value>0</value> + </param> + <param> + <key>center_freq17</key> + <value>0</value> + </param> + <param> + <key>norm_gain17</key> + <value>False</value> + </param> + <param> + <key>gain17</key> + <value>0</value> + </param> + <param> + <key>ant18</key> + <value></value> + </param> + <param> + <key>bw18</key> + <value>0</value> + </param> + <param> + <key>center_freq18</key> + <value>0</value> + </param> + <param> + <key>norm_gain18</key> + <value>False</value> + </param> + <param> + <key>gain18</key> + <value>0</value> + </param> + <param> + <key>ant19</key> + <value></value> + </param> + <param> + <key>bw19</key> + <value>0</value> + </param> + <param> + <key>center_freq19</key> + <value>0</value> + </param> + <param> + <key>norm_gain19</key> + <value>False</value> + </param> + <param> + <key>gain19</key> + <value>0</value> + </param> + <param> + <key>ant1</key> + <value></value> + </param> + <param> + <key>bw1</key> + <value>0</value> + </param> + <param> + <key>center_freq1</key> + <value>0</value> + </param> + <param> + <key>norm_gain1</key> + <value>False</value> + </param> + <param> + <key>gain1</key> + <value>0</value> + </param> + <param> + <key>ant20</key> + <value></value> + </param> + <param> + <key>bw20</key> + <value>0</value> + </param> + <param> + <key>center_freq20</key> + <value>0</value> + </param> + <param> + <key>norm_gain20</key> + <value>False</value> + </param> + <param> + <key>gain20</key> + <value>0</value> + </param> + <param> + <key>ant21</key> + <value></value> + </param> + <param> + <key>bw21</key> + <value>0</value> + </param> + <param> + <key>center_freq21</key> + <value>0</value> + </param> + <param> + <key>norm_gain21</key> + <value>False</value> + </param> + <param> + <key>gain21</key> + <value>0</value> + </param> + <param> + <key>ant22</key> + <value></value> + </param> + <param> + <key>bw22</key> + <value>0</value> + </param> + <param> + <key>center_freq22</key> + <value>0</value> + </param> + <param> + <key>norm_gain22</key> + <value>False</value> + </param> + <param> + <key>gain22</key> + <value>0</value> + </param> + <param> + <key>ant23</key> + <value></value> + </param> + <param> + <key>bw23</key> + <value>0</value> + </param> + <param> + <key>center_freq23</key> + <value>0</value> + </param> + <param> + <key>norm_gain23</key> + <value>False</value> + </param> + <param> + <key>gain23</key> + <value>0</value> + </param> + <param> + <key>ant24</key> + <value></value> + </param> + <param> + <key>bw24</key> + <value>0</value> + </param> + <param> + <key>center_freq24</key> + <value>0</value> + </param> + <param> + <key>norm_gain24</key> + <value>False</value> + </param> + <param> + <key>gain24</key> + <value>0</value> + </param> + <param> + <key>ant25</key> + <value></value> + </param> + <param> + <key>bw25</key> + <value>0</value> + </param> + <param> + <key>center_freq25</key> + <value>0</value> + </param> + <param> + <key>norm_gain25</key> + <value>False</value> + </param> + <param> + <key>gain25</key> + <value>0</value> + </param> + <param> + <key>ant26</key> + <value></value> + </param> + <param> + <key>bw26</key> + <value>0</value> + </param> + <param> + <key>center_freq26</key> + <value>0</value> + </param> + <param> + <key>norm_gain26</key> + <value>False</value> + </param> + <param> + <key>gain26</key> + <value>0</value> + </param> + <param> + <key>ant27</key> + <value></value> + </param> + <param> + <key>bw27</key> + <value>0</value> + </param> + <param> + <key>center_freq27</key> + <value>0</value> + </param> + <param> + <key>norm_gain27</key> + <value>False</value> + </param> + <param> + <key>gain27</key> + <value>0</value> + </param> + <param> + <key>ant28</key> + <value></value> + </param> + <param> + <key>bw28</key> + <value>0</value> + </param> + <param> + <key>center_freq28</key> + <value>0</value> + </param> + <param> + <key>norm_gain28</key> + <value>False</value> + </param> + <param> + <key>gain28</key> + <value>0</value> + </param> + <param> + <key>ant29</key> + <value></value> + </param> + <param> + <key>bw29</key> + <value>0</value> + </param> + <param> + <key>center_freq29</key> + <value>0</value> + </param> + <param> + <key>norm_gain29</key> + <value>False</value> + </param> + <param> + <key>gain29</key> + <value>0</value> + </param> + <param> + <key>ant2</key> + <value></value> + </param> + <param> + <key>bw2</key> + <value>0</value> + </param> + <param> + <key>center_freq2</key> + <value>0</value> + </param> + <param> + <key>norm_gain2</key> + <value>False</value> + </param> + <param> + <key>gain2</key> + <value>0</value> + </param> + <param> + <key>ant30</key> + <value></value> + </param> + <param> + <key>bw30</key> + <value>0</value> + </param> + <param> + <key>center_freq30</key> + <value>0</value> + </param> + <param> + <key>norm_gain30</key> + <value>False</value> + </param> + <param> + <key>gain30</key> + <value>0</value> + </param> + <param> + <key>ant31</key> + <value></value> + </param> + <param> + <key>bw31</key> + <value>0</value> + </param> + <param> + <key>center_freq31</key> + <value>0</value> + </param> + <param> + <key>norm_gain31</key> + <value>False</value> + </param> + <param> + <key>gain31</key> + <value>0</value> + </param> + <param> + <key>ant3</key> + <value></value> + </param> + <param> + <key>bw3</key> + <value>0</value> + </param> + <param> + <key>center_freq3</key> + <value>0</value> + </param> + <param> + <key>norm_gain3</key> + <value>False</value> + </param> + <param> + <key>gain3</key> + <value>0</value> + </param> + <param> + <key>ant4</key> + <value></value> + </param> + <param> + <key>bw4</key> + <value>0</value> + </param> + <param> + <key>center_freq4</key> + <value>0</value> + </param> + <param> + <key>norm_gain4</key> + <value>False</value> + </param> + <param> + <key>gain4</key> + <value>0</value> + </param> + <param> + <key>ant5</key> + <value></value> + </param> + <param> + <key>bw5</key> + <value>0</value> + </param> + <param> + <key>center_freq5</key> + <value>0</value> + </param> + <param> + <key>norm_gain5</key> + <value>False</value> + </param> + <param> + <key>gain5</key> + <value>0</value> + </param> + <param> + <key>ant6</key> + <value></value> + </param> + <param> + <key>bw6</key> + <value>0</value> + </param> + <param> + <key>center_freq6</key> + <value>0</value> + </param> + <param> + <key>norm_gain6</key> + <value>False</value> + </param> + <param> + <key>gain6</key> + <value>0</value> + </param> + <param> + <key>ant7</key> + <value></value> + </param> + <param> + <key>bw7</key> + <value>0</value> + </param> + <param> + <key>center_freq7</key> + <value>0</value> + </param> + <param> + <key>norm_gain7</key> + <value>False</value> + </param> + <param> + <key>gain7</key> + <value>0</value> + </param> + <param> + <key>ant8</key> + <value></value> + </param> + <param> + <key>bw8</key> + <value>0</value> + </param> + <param> + <key>center_freq8</key> + <value>0</value> + </param> + <param> + <key>norm_gain8</key> + <value>False</value> + </param> + <param> + <key>gain8</key> + <value>0</value> + </param> + <param> + <key>ant9</key> + <value></value> + </param> + <param> + <key>bw9</key> + <value>0</value> + </param> + <param> + <key>center_freq9</key> + <value>0</value> + </param> + <param> + <key>norm_gain9</key> + <value>False</value> + </param> + <param> + <key>gain9</key> + <value>0</value> + </param> + <param> + <key>clock_rate</key> + <value>0.0</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>dev_addr</key> + <value>"send_frame_size=65536,num_send_frames=256,master_clock_rate=" + str(samp_rate*2)</value> + </param> + <param> + <key>dev_args</key> + <value>""</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(1064, 403)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>uhd_usrp_sink_0_0</value> + </param> + <param> + <key>type</key> + <value>fc32</value> + </param> + <param> + <key>clock_source0</key> + <value></value> + </param> + <param> + <key>sd_spec0</key> + <value></value> + </param> + <param> + <key>time_source0</key> + <value></value> + </param> + <param> + <key>clock_source1</key> + <value></value> + </param> + <param> + <key>sd_spec1</key> + <value></value> + </param> + <param> + <key>time_source1</key> + <value></value> + </param> + <param> + <key>clock_source2</key> + <value></value> + </param> + <param> + <key>sd_spec2</key> + <value></value> + </param> + <param> + <key>time_source2</key> + <value></value> + </param> + <param> + <key>clock_source3</key> + <value></value> + </param> + <param> + <key>sd_spec3</key> + <value></value> + </param> + <param> + <key>time_source3</key> + <value></value> + </param> + <param> + <key>clock_source4</key> + <value></value> + </param> + <param> + <key>sd_spec4</key> + <value></value> + </param> + <param> + <key>time_source4</key> + <value></value> + </param> + <param> + <key>clock_source5</key> + <value></value> + </param> + <param> + <key>sd_spec5</key> + <value></value> + </param> + <param> + <key>time_source5</key> + <value></value> + </param> + <param> + <key>clock_source6</key> + <value></value> + </param> + <param> + <key>sd_spec6</key> + <value></value> + </param> + <param> + <key>time_source6</key> + <value></value> + </param> + <param> + <key>clock_source7</key> + <value></value> + </param> + <param> + <key>sd_spec7</key> + <value></value> + </param> + <param> + <key>time_source7</key> + <value></value> + </param> + <param> + <key>nchan</key> + <value>1</value> + </param> + <param> + <key>num_mboards</key> + <value>1</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>hide_cmd_port</key> + <value>False</value> + </param> + <param> + <key>stream_args</key> + <value></value> + </param> + <param> + <key>stream_chans</key> + <value>[]</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + <param> + <key>len_tag_name</key> + <value></value> + </param> + <param> + <key>otw</key> + <value></value> + </param> + </block> + <block> + <key>wxgui_fftsink2</key> + <param> + <key>avg_alpha</key> + <value>0.13333</value> + </param> + <param> + <key>average</key> + <value>True</value> + </param> + <param> + <key>baseband_freq</key> + <value>frequency</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fft_size</key> + <value>1024</value> + </param> + <param> + <key>freqvar</key> + <value>None</value> + </param> + <param> + <key>_coordinate</key> + <value>(848, 195)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>wxgui_fftsink2_0</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>ref_scale</key> + <value>2.0</value> + </param> + <param> + <key>fft_rate</key> + <value>15</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>title</key> + <value>FFT Plot</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>win</key> + <value>None</value> + </param> + <param> + <key>y_divs</key> + <value>10</value> + </param> + <param> + <key>y_per_div</key> + <value>10</value> + </param> + </block> + <connection> + <source_block_id>blocks_file_source_0</source_block_id> + <sink_block_id>dtv_dvbt_energy_dispersal_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_pack_k_bits_bb_0</source_block_id> + <sink_block_id>dtv_dvbs2_modulator_bc_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id> + <sink_block_id>trellis_encoder_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id> + <sink_block_id>fec_puncture_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id> + <sink_block_id>fft_filter_xxx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id> + <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbt_energy_dispersal_0</source_block_id> + <sink_block_id>dtv_dvbt_reed_solomon_enc_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbt_reed_solomon_enc_0</source_block_id> + <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fec_puncture_xx_0</source_block_id> + <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>osmosdr_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>uhd_usrp_sink_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>wxgui_fftsink2_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> +</flow_graph> diff --git a/gr-dtv/grc/CMakeLists.txt b/gr-dtv/grc/CMakeLists.txt index 2fed81ab12..a1386c5adf 100644 --- a/gr-dtv/grc/CMakeLists.txt +++ b/gr-dtv/grc/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2014,2015 Free Software Foundation, Inc. +# Copyright 2014,2015,2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -68,6 +68,11 @@ install(FILES dtv_dvbt_convolutional_deinterleaver.xml dtv_dvbt_reed_solomon_dec.xml dtv_dvbt_energy_descramble.xml + dtv_catv_transport_framing_enc_bb.xml + dtv_catv_reed_solomon_enc_bb.xml + dtv_catv_randomizer_bb.xml + dtv_catv_frame_sync_enc_bb.xml + dtv_catv_trellis_enc_bb.xml DESTINATION ${GRC_BLOCKS_DIR} COMPONENT "dtv_python" ) diff --git a/gr-dtv/grc/dtv_block_tree.xml b/gr-dtv/grc/dtv_block_tree.xml index 32c8974531..fba33852c0 100644 --- a/gr-dtv/grc/dtv_block_tree.xml +++ b/gr-dtv/grc/dtv_block_tree.xml @@ -1,7 +1,7 @@ <?xml version="1.0"?> <!-- - Copyright 2014,2015 Free Software Foundation, Inc. + Copyright 2014,2015,2016 Free Software Foundation, Inc. This file is part of GNU Radio @@ -94,5 +94,13 @@ <block>dtv_dvbt_reed_solomon_dec</block> <block>dtv_dvbt_energy_descramble</block> </cat> + <cat> + <name>ITU-T J.83B</name> + <block>dtv_catv_transport_framing_enc_bb</block> + <block>dtv_catv_reed_solomon_enc_bb</block> + <block>dtv_catv_randomizer_bb</block> + <block>dtv_catv_frame_sync_enc_bb</block> + <block>dtv_catv_trellis_enc_bb</block> + </cat> </cat> </cat> diff --git a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml new file mode 100644 index 0000000000..e7c1392960 --- /dev/null +++ b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml @@ -0,0 +1,26 @@ +<?xml version="1.0"?> +<!-- +################################################### +## Frame Sync Encoder +################################################### + --> +<block> + <name>Frame Sync Encoder</name> + <key>dtv_catv_frame_sync_enc_bb</key> + <import>from gnuradio import dtv</import> + <make>dtv.catv_frame_sync_enc_bb($ctrlword)</make> + <param> + <name>Control Word</name> + <key>ctrlword</key> + <value>6</value> + <type>int</type> + </param> + <sink> + <name>in</name> + <type>byte</type> + </sink> + <source> + <name>out</name> + <type>byte</type> + </source> +</block> diff --git a/gr-dtv/grc/dtv_catv_randomizer_bb.xml b/gr-dtv/grc/dtv_catv_randomizer_bb.xml new file mode 100644 index 0000000000..ca4787d786 --- /dev/null +++ b/gr-dtv/grc/dtv_catv_randomizer_bb.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- +################################################### +## Randomizer +################################################### + --> +<block> + <name>Randomizer</name> + <key>dtv_catv_randomizer_bb</key> + <import>from gnuradio import dtv</import> + <make>dtv.catv_randomizer_bb()</make> + <sink> + <name>in</name> + <type>byte</type> + </sink> + <source> + <name>out</name> + <type>byte</type> + </source> +</block> diff --git a/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml new file mode 100644 index 0000000000..a5dfdc2a5a --- /dev/null +++ b/gr-dtv/grc/dtv_catv_reed_solomon_enc_bb.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- +################################################### +## Reed Solomon Encoder +################################################### + --> +<block> + <name>Reed-Solomon Encoder</name> + <key>dtv_catv_reed_solomon_enc_bb</key> + <import>from gnuradio import dtv</import> + <make>dtv.catv_reed_solomon_enc_bb()</make> + <sink> + <name>in</name> + <type>byte</type> + </sink> + <source> + <name>out</name> + <type>byte</type> + </source> +</block> diff --git a/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml new file mode 100644 index 0000000000..d0b6bf382b --- /dev/null +++ b/gr-dtv/grc/dtv_catv_transport_framing_enc_bb.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- +################################################### +## Transport Framing Encoder +################################################### + --> +<block> + <name>Transport Framing Encoder</name> + <key>dtv_catv_transport_framing_enc_bb</key> + <import>from gnuradio import dtv</import> + <make>dtv.catv_transport_framing_enc_bb()</make> + <sink> + <name>in</name> + <type>byte</type> + </sink> + <source> + <name>out</name> + <type>byte</type> + </source> +</block> diff --git a/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml new file mode 100644 index 0000000000..a96d60c895 --- /dev/null +++ b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<!-- +################################################### +## Trellis Encoder +################################################### + --> +<block> + <name>Trellis Encoder</name> + <key>dtv_catv_trellis_enc_bb</key> + <import>from gnuradio import dtv</import> + <make>dtv.catv_trellis_enc_bb()</make> + <sink> + <name>in</name> + <type>byte</type> + </sink> + <source> + <name>out</name> + <type>byte</type> + </source> +</block> diff --git a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml index 1f7fef09a3..8de645d585 100644 --- a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml +++ b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml @@ -8,7 +8,7 @@ <name>DVB-S2X Modulator</name> <key>dtv_dvbs2_modulator_bc</key> <import>from gnuradio import dtv</import> - <make>dtv.dvbs2_modulator_bc($framesize.val, $rate.val, $constellation.val)</make> + <make>dtv.dvbs2_modulator_bc($framesize.val, $rate.val, $constellation.val, $interpolation.val)</make> <param> <name>FECFRAME size</name> <key>framesize</key> @@ -253,6 +253,26 @@ <key>MOD_256APSK</key> <opt>val:dtv.MOD_256APSK</opt> </option> + <option> + <name>64QAM</name> + <key>MOD_64QAM</key> + <opt>val:dtv.MOD_64QAM</opt> + </option> + </param> + <param> + <name>2X Interpolation</name> + <key>interpolation</key> + <type>enum</type> + <option> + <name>Off</name> + <key>INTERPOLATION_OFF</key> + <opt>val:dtv.INTERPOLATION_OFF</opt> + </option> + <option> + <name>On</name> + <key>INTERPOLATION_ON</key> + <opt>val:dtv.INTERPOLATION_ON</opt> + </option> </param> <sink> <name>in</name> diff --git a/gr-dtv/include/gnuradio/dtv/CMakeLists.txt b/gr-dtv/include/gnuradio/dtv/CMakeLists.txt index 4232ff7065..620dd55879 100644 --- a/gr-dtv/include/gnuradio/dtv/CMakeLists.txt +++ b/gr-dtv/include/gnuradio/dtv/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2014,2015 Free Software Foundation, Inc. +# Copyright 2014,2015,2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -74,6 +74,11 @@ install(FILES dvbt_convolutional_deinterleaver.h dvbt_reed_solomon_dec.h dvbt_energy_descramble.h + catv_transport_framing_enc_bb.h + catv_reed_solomon_enc_bb.h + catv_randomizer_bb.h + catv_frame_sync_enc_bb.h + catv_trellis_enc_bb.h DESTINATION ${GR_INCLUDE_DIR}/gnuradio/dtv COMPONENT "dtv_devel" diff --git a/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h b/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h index 3fe101ac25..17f2e8f768 100644 --- a/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h +++ b/gr-dtv/include/gnuradio/dtv/atsc_equalizer.h @@ -45,6 +45,9 @@ namespace gr { * \brief Make a new instance of gr::dtv::atsc_equalizer. */ static sptr make(); + + virtual std::vector<float> taps() const = 0; + virtual std::vector<float> data() const = 0; }; } /* namespace dtv */ diff --git a/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h b/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h index 92eb263e5d..c2b7d0defa 100644 --- a/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h +++ b/gr-dtv/include/gnuradio/dtv/atsc_rs_decoder.h @@ -42,6 +42,21 @@ namespace gr { typedef boost::shared_ptr<atsc_rs_decoder> sptr; /*! + * Returns the number of errors corrected by the decoder. + */ + virtual int num_errors_corrected() const = 0; + + /*! + * Returns the number of bad packets rejected by the decoder. + */ + virtual int num_bad_packets() const = 0; + + /*! + * Returns the total number of packets seen by the decoder. + */ + virtual int num_packets() const = 0; + + /*! * \brief Make a new instance of gr::dtv::atsc_rs_decoder. */ static sptr make(); diff --git a/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h b/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h index a4c18c39da..8efece4c43 100644 --- a/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h +++ b/gr-dtv/include/gnuradio/dtv/atsc_viterbi_decoder.h @@ -45,6 +45,12 @@ namespace gr { * \brief Make a new instance of gr::dtv::atsc_viterbi_decoder. */ static sptr make(); + + /*! + * For each decoder, returns the current best state of the + * decoding metrics. + */ + virtual std::vector<float> decoder_metrics() const = 0; }; } /* namespace dtv */ diff --git a/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h b/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h new file mode 100644 index 0000000000..799a2d3c55 --- /dev/null +++ b/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h @@ -0,0 +1,54 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_H +#define INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_H + +#include <gnuradio/dtv/api.h> +#include <gnuradio/block.h> + +namespace gr { + namespace dtv { + + /*! + * \brief Frame Sync Encoder. Adds a 42-bit frame sync pattern with control word. + * \ingroup dtv + * + * Input: Scrambled FEC Frame packets of 60 * 128 7-bit symbols.\n + * Output: Scrambled FEC Frame packets of 60 * 128 7-bit symbols with 42-bit FSYNC word. + */ + class DTV_API catv_frame_sync_enc_bb : virtual public gr::block + { + public: + typedef boost::shared_ptr<catv_frame_sync_enc_bb> sptr; + + /*! + * \brief Create an ITU-T J.83B Frame Sync Encoder. + * + * \param ctrlword convolutional interleaver control word. + */ + static sptr make(int ctrlword); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_H */ + diff --git a/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h b/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h new file mode 100644 index 0000000000..83230b8167 --- /dev/null +++ b/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_RANDOMIZER_BB_H +#define INCLUDED_DTV_CATV_RANDOMIZER_BB_H + +#include <gnuradio/dtv/api.h> +#include <gnuradio/sync_block.h> + +namespace gr { + namespace dtv { + + /*! + * \brief Randomizer, x^3 + x + alpha^3, 7-bit symbols. + * \ingroup dtv + * + * Input: Interleaved MPEG-2 + RS parity bitstream packets of 128 7-bit symbols.\n + * Output: Scrambled FEC Frame packets of 60 * 128 7-bit symbols. + */ + class DTV_API catv_randomizer_bb : virtual public gr::sync_block + { + public: + typedef boost::shared_ptr<catv_randomizer_bb> sptr; + + /*! + * \brief Create an ITU-T J.83B randomizer. + * + */ + static sptr make(); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_RANDOMIZER_BB_H */ + diff --git a/gr-dtv/include/gnuradio/dtv/catv_reed_solomon_enc_bb.h b/gr-dtv/include/gnuradio/dtv/catv_reed_solomon_enc_bb.h new file mode 100644 index 0000000000..b661f0da7f --- /dev/null +++ b/gr-dtv/include/gnuradio/dtv/catv_reed_solomon_enc_bb.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_H +#define INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_H + +#include <gnuradio/dtv/api.h> +#include <gnuradio/block.h> + +namespace gr { + namespace dtv { + + /*! + * \brief Reed Solomon Encoder, t=3, (128,122), 7-bit symbols. + * \ingroup dtv + * + * Input: MPEG-2 bitstream packets of 122 7-bit symbols.\n + * Output: MPEG-2 + RS parity bitstream packets of 128 7-bit symbols. + */ + class DTV_API catv_reed_solomon_enc_bb : virtual public gr::block + { + public: + typedef boost::shared_ptr<catv_reed_solomon_enc_bb> sptr; + + /*! + * \brief Create an ITU-T J.83B Reed Solomon encoder. + * + */ + static sptr make(); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_H */ + diff --git a/gr-dtv/include/gnuradio/dtv/catv_transport_framing_enc_bb.h b/gr-dtv/include/gnuradio/dtv/catv_transport_framing_enc_bb.h new file mode 100644 index 0000000000..7df100d990 --- /dev/null +++ b/gr-dtv/include/gnuradio/dtv/catv_transport_framing_enc_bb.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_H +#define INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_H + +#include <gnuradio/dtv/api.h> +#include <gnuradio/sync_block.h> + +namespace gr { + namespace dtv { + + /*! + * \brief Transport Framing Encoder. Adds a parity checksum to MPEG-2 packets. + * \ingroup dtv + * + * Input: MPEG-2 Transport Stream.\n + * Output: MPEG-2 Transport Stream with parity checksum byte. + */ + class DTV_API catv_transport_framing_enc_bb : virtual public gr::sync_block + { + public: + typedef boost::shared_ptr<catv_transport_framing_enc_bb> sptr; + + /*! + * \brief Create an ITU-T J.83B Transport Framing Encoder. + * + */ + static sptr make(); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_H */ + diff --git a/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h b/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h new file mode 100644 index 0000000000..aa6cec1703 --- /dev/null +++ b/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h @@ -0,0 +1,53 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_TRELLIS_ENC_BB_H +#define INCLUDED_DTV_CATV_TRELLIS_ENC_BB_H + +#include <gnuradio/dtv/api.h> +#include <gnuradio/block.h> + +namespace gr { + namespace dtv { + + /*! + * \brief Trellis Encoder. 14/15 code rate. + * \ingroup dtv + * + * Input: Scrambled FEC Frame packets of 60 * 128 7-bit symbols with 42-bit FSYNC word.\n + * Output: Four 7-bit symbols (28 bits) Trellis encoded to 30 bits (14/15 code rate). + */ + class DTV_API catv_trellis_enc_bb : virtual public gr::block + { + public: + typedef boost::shared_ptr<catv_trellis_enc_bb> sptr; + + /*! + * \brief Create an ITU-T J.83B Trellis Encoder. + * + */ + static sptr make(); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_TRELLIS_ENC_BB_H */ + diff --git a/gr-dtv/include/gnuradio/dtv/dvbs2_config.h b/gr-dtv/include/gnuradio/dtv/dvbs2_config.h index 919c7de155..079857a8cf 100644 --- a/gr-dtv/include/gnuradio/dtv/dvbs2_config.h +++ b/gr-dtv/include/gnuradio/dtv/dvbs2_config.h @@ -38,11 +38,17 @@ namespace gr { PILOTS_ON, }; + enum dvbs2_interpolation_t { + INTERPOLATION_OFF = 0, + INTERPOLATION_ON, + }; + } // namespace dtv } // namespace gr typedef gr::dtv::dvbs2_rolloff_factor_t dvbs2_rolloff_factor_t; typedef gr::dtv::dvbs2_pilots_t dvbs2_pilots_t; +typedef gr::dtv::dvbs2_interpolation_t dvbs2_interpolation_t; #endif /* INCLUDED_DTV_DVBS2_CONFIG_H */ diff --git a/gr-dtv/include/gnuradio/dtv/dvbs2_modulator_bc.h b/gr-dtv/include/gnuradio/dtv/dvbs2_modulator_bc.h index 68e5403e05..a1f2c9e6fe 100644 --- a/gr-dtv/include/gnuradio/dtv/dvbs2_modulator_bc.h +++ b/gr-dtv/include/gnuradio/dtv/dvbs2_modulator_bc.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2015 Free Software Foundation, Inc. + * Copyright 2015,2016 Free Software Foundation, Inc. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -23,6 +23,7 @@ #include <gnuradio/dtv/api.h> #include <gnuradio/dtv/dvb_config.h> +#include <gnuradio/dtv/dvbs2_config.h> #include <gnuradio/block.h> namespace gr { @@ -46,8 +47,9 @@ namespace gr { * \param framesize FEC frame size (normal or short). * \param rate FEC code rate. * \param constellation DVB-S2 constellation. + * \param interpolation 2X zero stuffing interpolation (on/off). */ - static sptr make(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation); + static sptr make(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation, dvbs2_interpolation_t interpolation); }; } // namespace dtv diff --git a/gr-dtv/lib/CMakeLists.txt b/gr-dtv/lib/CMakeLists.txt index 868205c241..6ae308395d 100644 --- a/gr-dtv/lib/CMakeLists.txt +++ b/gr-dtv/lib/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2014,2015 Free Software Foundation, Inc. +# Copyright 2014,2015,2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -112,6 +112,11 @@ list(APPEND dtv_sources dvbt/dvbt_convolutional_deinterleaver_impl.cc dvbt/dvbt_reed_solomon_dec_impl.cc dvbt/dvbt_energy_descramble_impl.cc + catv/catv_transport_framing_enc_bb_impl.cc + catv/catv_reed_solomon_enc_bb_impl.cc + catv/catv_randomizer_bb_impl.cc + catv/catv_frame_sync_enc_bb_impl.cc + catv/catv_trellis_enc_bb_impl.cc ) if(ENABLE_GR_CTRLPORT) diff --git a/gr-dtv/lib/atsc/atsc_equalizer_impl.cc b/gr-dtv/lib/atsc/atsc_equalizer_impl.cc index c804be6dc7..de01cea6f2 100644 --- a/gr-dtv/lib/atsc/atsc_equalizer_impl.cc +++ b/gr-dtv/lib/atsc/atsc_equalizer_impl.cc @@ -28,6 +28,7 @@ #include "atsc_types.h" #include "atsc_pnXXX_impl.h" #include <gnuradio/io_signature.h> +#include <volk/volk.h> namespace gr { namespace dtv { @@ -76,23 +77,42 @@ namespace gr { init_field_sync_common(training_sequence1, 0); init_field_sync_common(training_sequence2, 1); - for (int i = 0; i < NTAPS; i++) - d_taps[i] = 0.0; + d_taps.resize(NTAPS, 0.0f); d_buff_not_filled = true; + + const int alignment_multiple = + volk_get_alignment() / sizeof(float); + set_alignment(std::max(1, alignment_multiple)); } atsc_equalizer_impl::~atsc_equalizer_impl() { } + std::vector<float> + atsc_equalizer_impl::taps() const + { + return d_taps; + } + + std::vector<float> + atsc_equalizer_impl::data() const + { + std::vector<float> ret(&data_mem2[0], &data_mem2[ATSC_DATA_SEGMENT_LENGTH-1]); + return ret; + } + void - atsc_equalizer_impl::filterN(const float *input_samples, float *output_samples, int nsamples) + atsc_equalizer_impl::filterN(const float *input_samples, + float *output_samples, + int nsamples) { for (int j = 0; j < nsamples; j++) { output_samples[j] = 0; - for(int i = 0; i < NTAPS; i++) - output_samples[j] += d_taps[i] * input_samples[j + i]; + volk_32f_x2_dot_prod_32f(&output_samples[j], + &input_samples[j], + &d_taps[0], NTAPS); } } @@ -107,14 +127,16 @@ namespace gr { for(int j = 0; j < nsamples; j++) { output_samples[j] = 0; - for( int i = 0; i < NTAPS; i++ ) - output_samples[j] += d_taps[i] * input_samples[j + i]; + volk_32f_x2_dot_prod_32f(&output_samples[j], + &input_samples[j], + &d_taps[0], NTAPS); - double e = output_samples[j] - training_pattern[j]; + float e = output_samples[j] - training_pattern[j]; // update taps... - for( int i = 0; i < NTAPS; i++ ) - d_taps[i] -= BETA * e * (double)(input_samples[j + i]); + float tmp_taps[NTAPS]; + volk_32f_s32f_multiply_32f(tmp_taps, &input_samples[j], BETA*e, NTAPS); + volk_32f_x2_subtract_32f(&d_taps[0], &d_taps[0], tmp_taps, NTAPS); } } @@ -131,8 +153,8 @@ namespace gr { int i = 0; if(d_buff_not_filled) { - for(int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++) - data_mem[NPRETAPS + j] = in[i].data[j]; + memcpy(&data_mem[NPRETAPS], in[i].data, + ATSC_DATA_SEGMENT_LENGTH*sizeof(float)); d_flags = in[i].pli._flags; d_segno = in[i].pli._segno; d_buff_not_filled = false; @@ -141,8 +163,8 @@ namespace gr { for (; i < noutput_items; i++) { - for(int j = 0; j < NTAPS - NPRETAPS; j++) - data_mem[ATSC_DATA_SEGMENT_LENGTH + NPRETAPS + j] = in[i].data[j]; + memcpy(&data_mem[ATSC_DATA_SEGMENT_LENGTH + NPRETAPS], in[i].data, + (NTAPS - NPRETAPS)*sizeof(float)); if(d_segno == -1) { if(d_flags & 0x0010) { @@ -157,19 +179,18 @@ namespace gr { else { filterN(data_mem, data_mem2, ATSC_DATA_SEGMENT_LENGTH); - for(int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++) - out[output_produced].data[j] = data_mem2[j]; + memcpy(out[output_produced].data, data_mem2, + ATSC_DATA_SEGMENT_LENGTH*sizeof(float)); out[output_produced].pli._flags = d_flags; out[output_produced].pli._segno = d_segno; output_produced++; } - for( int j = 0; j < NPRETAPS; j++ ) - data_mem[j] = data_mem[ATSC_DATA_SEGMENT_LENGTH + j]; - - for(int j = 0; j < ATSC_DATA_SEGMENT_LENGTH; j++) - data_mem[NPRETAPS + j] = in[i].data[j]; + memcpy(data_mem, &data_mem[ATSC_DATA_SEGMENT_LENGTH], + NPRETAPS*sizeof(float)); + memcpy(&data_mem[NPRETAPS], in[i].data, + ATSC_DATA_SEGMENT_LENGTH*sizeof(float)); d_flags = in[i].pli._flags; d_segno = in[i].pli._segno; @@ -179,5 +200,31 @@ namespace gr { return output_produced; } + void + atsc_equalizer_impl::setup_rpc() + { +#ifdef GR_CTRLPORT + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<atsc_equalizer, std::vector<float> >( + alias(), "taps", + &atsc_equalizer::taps, + pmt::make_f32vector(1,-10), + pmt::make_f32vector(1,10), + pmt::make_f32vector(1,0), + "", "Equalizer Taps", RPC_PRIVLVL_MIN, + DISPTIME))); + + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<atsc_equalizer, std::vector<float> >( + alias(), "data", + &atsc_equalizer::data, + pmt::make_f32vector(1,-10), + pmt::make_f32vector(1,10), + pmt::make_f32vector(1,0), + "", "Post-equalizer Data", RPC_PRIVLVL_MIN, + DISPTIME))); +#endif /* GR_CTRLPORT */ + } + } /* namespace dtv */ } /* namespace gr */ diff --git a/gr-dtv/lib/atsc/atsc_equalizer_impl.h b/gr-dtv/lib/atsc/atsc_equalizer_impl.h index 6ff89ca646..75862f6408 100644 --- a/gr-dtv/lib/atsc/atsc_equalizer_impl.h +++ b/gr-dtv/lib/atsc/atsc_equalizer_impl.h @@ -46,7 +46,7 @@ namespace gr { void adaptN(const float *input_samples, const float *training_pattern, float *output_samples, int nsamples); - float d_taps[NTAPS]; + std::vector<float> d_taps; float data_mem[ATSC_DATA_SEGMENT_LENGTH + NTAPS]; // Buffer for previous data packet float data_mem2[ATSC_DATA_SEGMENT_LENGTH]; @@ -59,6 +59,11 @@ namespace gr { atsc_equalizer_impl(); ~atsc_equalizer_impl(); + void setup_rpc(); + + std::vector<float> taps() const; + std::vector<float> data() const; + virtual int general_work(int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, diff --git a/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc index 7a950e716e..b8ee91a52d 100644 --- a/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc +++ b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.cc @@ -56,9 +56,9 @@ namespace gr { { d_rs = init_rs_char(rs_init_symsize, rs_init_gfpoly, rs_init_fcr, rs_init_prim, rs_init_nroots); assert (d_rs != 0); - nerrors_corrrected_count = 0; - bad_packet_count = 0; - total_packets = 0; + d_nerrors_corrrected_count = 0; + d_bad_packet_count = 0; + d_total_packets = 0; } int atsc_rs_decoder_impl::decode (atsc_mpeg_packet_no_sync &out, const atsc_mpeg_packet_rs_encoded &in) @@ -89,6 +89,24 @@ namespace gr { } int + atsc_rs_decoder_impl::num_errors_corrected() const + { + return d_nerrors_corrrected_count; + } + + int + atsc_rs_decoder_impl::num_bad_packets() const + { + return d_bad_packet_count; + } + + int + atsc_rs_decoder_impl::num_packets() const + { + return d_total_packets; + } + + int atsc_rs_decoder_impl::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) @@ -102,24 +120,20 @@ namespace gr { int nerrors_corrrected = decode(out[i], in[i]); out[i].pli.set_transport_error(nerrors_corrrected == -1); - if (nerrors_corrrected == -1) - bad_packet_count++; - else - nerrors_corrrected_count += nerrors_corrrected; + if (nerrors_corrrected == -1) { + d_bad_packet_count++; + d_nerrors_corrrected_count += 10; // lower bound estimate; most this RS can fix + } + else { + d_nerrors_corrrected_count += nerrors_corrrected; + } - total_packets++; + d_total_packets++; #if 0 - if (total_packets > 1000) { - // FIXME: convert to logger - std::cout << "Error rate: " - << (float)nerrors_corrrected_count/total_packets - << "\tPacket error rate: " - << (float)bad_packet_count/total_packets - << std::endl; - - nerrors_corrrected_count = 0; - bad_packet_count = 0; - total_packets = 0; + if (d_total_packets > 1000) { + GR_LOG_INFO(d_logger, boost::format("Error rate: %1%\tPacket error rate: %2%") \ + % ((float)d_nerrors_corrrected_count/(ATSC_MPEG_DATA_LENGTH*d_total_packets)) + % ((float)d_bad_packet_count/d_total_packets)); } #endif } @@ -127,5 +141,42 @@ namespace gr { return noutput_items; } + + void + atsc_rs_decoder_impl::setup_rpc() + { +#ifdef GR_CTRLPORT + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<atsc_rs_decoder, int >( + alias(), "num_errors_corrected", + &atsc_rs_decoder::num_errors_corrected, + pmt::from_long(0), + pmt::from_long(10000000), + pmt::from_long(0), + "", "Number of errors corrected", RPC_PRIVLVL_MIN, + DISPTIME))); + + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<atsc_rs_decoder, int >( + alias(), "num_bad_packets", + &atsc_rs_decoder::num_bad_packets, + pmt::from_long(0), + pmt::from_long(10000000), + pmt::from_long(0), + "", "Number of bad packets", RPC_PRIVLVL_MIN, + DISPTIME))); + + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<atsc_rs_decoder, int >( + alias(), "num_packets", + &atsc_rs_decoder::num_packets, + pmt::from_long(0), + pmt::from_long(10000000), + pmt::from_long(0), + "", "Number of packets", RPC_PRIVLVL_MIN, + DISPTIME))); +#endif /* GR_CTRLPORT */ + } + } /* namespace dtv */ } /* namespace gr */ diff --git a/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h index 57460128dc..adbc4879a9 100644 --- a/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h +++ b/gr-dtv/lib/atsc/atsc_rs_decoder_impl.h @@ -36,15 +36,22 @@ namespace gr { class atsc_rs_decoder_impl : public atsc_rs_decoder { private: - int nerrors_corrrected_count; - int bad_packet_count; - int total_packets; + int d_nerrors_corrrected_count; + int d_bad_packet_count; + int d_total_packets; + int d_total_bits; void *d_rs; public: atsc_rs_decoder_impl(); ~atsc_rs_decoder_impl(); + void setup_rpc(); + + int num_errors_corrected() const; + int num_bad_packets() const; + int num_packets() const; + /*! * Decode RS encoded packet. * \returns a count of corrected symbols, or -1 if the block was uncorrectible. diff --git a/gr-dtv/lib/atsc/atsc_single_viterbi.cc b/gr-dtv/lib/atsc/atsc_single_viterbi.cc index 385940e453..011cc0fe96 100644 --- a/gr-dtv/lib/atsc/atsc_single_viterbi.cc +++ b/gr-dtv/lib/atsc/atsc_single_viterbi.cc @@ -28,7 +28,7 @@ namespace gr { /* was_sent is a table of what symbol we get given what bit pair was sent and what state we where in [state][pair] */ - const int atsc_single_viterbi::was_sent[4][4] = { + const int atsc_single_viterbi::d_was_sent[4][4] = { {0,2,4,6}, {0,2,4,6}, {1,3,5,7}, @@ -37,7 +37,7 @@ namespace gr { /* transition_table is a table of what state we were in given current state and bit pair sent [state][pair] */ - const int atsc_single_viterbi::transition_table[4][4] = { + const int atsc_single_viterbi::d_transition_table[4][4] = { {0,2,0,2}, {2,0,2,0}, {1,3,1,3}, @@ -49,11 +49,12 @@ namespace gr { { for (unsigned int i = 0; i<2; i++) for (unsigned int j = 0; j<4; j++) { - path_metrics[i][j] = 0; - traceback[i][j] = 0; + d_path_metrics[i][j] = 0; + d_traceback[i][j] = 0; } - post_coder_state = 0; - phase = 0; + d_post_coder_state = 0; + d_phase = 0; + d_best_state_metric = 100000; } atsc_single_viterbi::atsc_single_viterbi() @@ -61,17 +62,24 @@ namespace gr { reset(); } + float + atsc_single_viterbi::best_state_metric() const + { + return d_best_state_metric; + } + char atsc_single_viterbi::decode(float input) { unsigned int best_state = 0; - float best_state_metric = 100000; + //float best_state_metric = 100000; + d_best_state_metric = 100000; /* Precompute distances from input to each possible symbol */ - float distances[8] = { (float)fabs( input + 7 ), (float)fabs( input + 5 ), - (float)fabs( input + 3 ), (float)fabs( input + 1 ), - (float)fabs( input - 1 ), (float)fabs( input - 3 ), - (float)fabs( input - 5 ), (float)fabs( input - 7 ) }; + float distances[8] = { fabsf( input + 7 ), fabsf( input + 5 ), + fabsf( input + 3 ), fabsf( input + 1 ), + fabsf( input - 1 ), fabsf( input - 3 ), + fabsf( input - 5 ), fabsf( input - 7 ) }; /* We start by iterating over all possible states */ for (unsigned int state = 0; state < 4; state++) { @@ -79,15 +87,20 @@ namespace gr { states to the state we are testing, we only need to look at the 4 paths that can be taken given the 2-bit input */ int min_metric_symb = 0; - float min_metric = distances[was_sent[state][0]] + path_metrics[phase][transition_table[state][0]]; + float min_metric = distances[d_was_sent[state][0]] + + d_path_metrics[d_phase][d_transition_table[state][0]]; + for (unsigned int symbol_sent = 1; symbol_sent < 4; symbol_sent++) - if( (distances[was_sent[state][symbol_sent]] + path_metrics[phase][transition_table[state][symbol_sent]]) < min_metric) { - min_metric = distances[was_sent[state][symbol_sent]] + path_metrics[phase][transition_table[state][symbol_sent]]; + if( (distances[d_was_sent[state][symbol_sent]] + + d_path_metrics[d_phase][d_transition_table[state][symbol_sent]]) < min_metric) { + min_metric = distances[d_was_sent[state][symbol_sent]] + + d_path_metrics[d_phase][d_transition_table[state][symbol_sent]]; min_metric_symb = symbol_sent; } - path_metrics[phase^1][state] = min_metric; - traceback[phase^1][state] = (((unsigned long long)min_metric_symb) << 62) | (traceback[phase][transition_table[state][min_metric_symb]] >> 2); + d_path_metrics[d_phase^1][state] = min_metric; + d_traceback[d_phase^1][state] = (((unsigned long long)min_metric_symb) << 62) | + (d_traceback[d_phase][d_transition_table[state][min_metric_symb]] >> 2); /* If this is the most probable state so far remember it, this only needs to be checked when we are about to output a path @@ -98,26 +111,24 @@ namespace gr { head state path will tend towards the optimal path with a probability approaching 1 in just 8 or so transitions */ - if(min_metric <= best_state_metric) { - best_state_metric = min_metric; + if(min_metric <= d_best_state_metric) { + d_best_state_metric = min_metric; best_state = state; } } - if(best_state_metric > 10000) { + if(d_best_state_metric > 10000) { for(unsigned int state = 0; state < 4; state++) - path_metrics[phase^1][state] -= best_state_metric; + d_path_metrics[d_phase^1][state] -= d_best_state_metric; } - phase ^= 1; + d_phase ^= 1; - int y2 = (0x2 & traceback[phase][best_state]) >> 1; - int x2 = y2 ^ post_coder_state; - post_coder_state = y2; + int y2 = (0x2 & d_traceback[d_phase][best_state]) >> 1; + int x2 = y2 ^ d_post_coder_state; + d_post_coder_state = y2; - return ( x2 << 1 ) | (0x1 & traceback[phase][best_state]); + return ( x2 << 1 ) | (0x1 & d_traceback[d_phase][best_state]); } } /* namespace dtv */ } /* namespace gr */ - - diff --git a/gr-dtv/lib/atsc/atsc_single_viterbi.h b/gr-dtv/lib/atsc/atsc_single_viterbi.h index 3c756c7690..9522e2eb1b 100644 --- a/gr-dtv/lib/atsc/atsc_single_viterbi.h +++ b/gr-dtv/lib/atsc/atsc_single_viterbi.h @@ -44,14 +44,17 @@ namespace gr { //! internal delay of decoder static int delay () { return TB_LEN - 1; } - protected: - static const int transition_table[4][4]; - static const int was_sent[4][4]; + float best_state_metric() const; - float path_metrics [2][4]; - unsigned long long traceback [2][4]; - unsigned char phase; - int post_coder_state; + protected: + static const int d_transition_table[4][4]; + static const int d_was_sent[4][4]; + + float d_path_metrics [2][4]; + unsigned long long d_traceback [2][4]; + unsigned char d_phase; + int d_post_coder_state; + float d_best_state_metric; }; } /* namespace dtv */ diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc index 430eb55a17..2284372dfb 100644 --- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc +++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc @@ -77,6 +77,15 @@ namespace gr { fifo[i]->reset(); } + std::vector<float> + atsc_viterbi_decoder_impl::decoder_metrics() const + { + std::vector<float> metrics(NCODERS); + for (int i = 0; i < NCODERS; i++) + metrics[i] = viterbi[i].best_state_metric(); + return metrics; + } + int atsc_viterbi_decoder_impl::work(int noutput_items, gr_vector_const_void_star &input_items, @@ -135,5 +144,21 @@ namespace gr { return noutput_items; } + void + atsc_viterbi_decoder_impl::setup_rpc() + { +#ifdef GR_CTRLPORT + add_rpc_variable( + rpcbasic_sptr(new rpcbasic_register_get<atsc_viterbi_decoder, std::vector<float> >( + alias(), "decoder_metrics", + &atsc_viterbi_decoder::decoder_metrics, + pmt::make_f32vector(1,0), + pmt::make_f32vector(1,100000), + pmt::make_f32vector(1,0), + "", "Viterbi decoder metrics", RPC_PRIVLVL_MIN, + DISPTIME))); +#endif /* GR_CTRLPORT */ + } + } /* namespace dtv */ } /* namespace gr */ diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h index b4fbbd1033..ef4faab313 100644 --- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h +++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.h @@ -63,8 +63,12 @@ namespace gr { atsc_viterbi_decoder_impl(); ~atsc_viterbi_decoder_impl(); + void setup_rpc(); + void reset(); + std::vector<float> decoder_metrics() const; + virtual int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc new file mode 100644 index 0000000000..87c706b445 --- /dev/null +++ b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc @@ -0,0 +1,96 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/io_signature.h> +#include "catv_frame_sync_enc_bb_impl.h" + +namespace gr { + namespace dtv { + + catv_frame_sync_enc_bb::sptr + catv_frame_sync_enc_bb::make(int ctrlword) + { + return gnuradio::get_initial_sptr + (new catv_frame_sync_enc_bb_impl(ctrlword)); + } + + /* + * The private constructor + */ + catv_frame_sync_enc_bb_impl::catv_frame_sync_enc_bb_impl(int ctrlword) + : gr::block("catv_frame_sync_enc_bb", + gr::io_signature::make(1, 1, sizeof(unsigned char)), + gr::io_signature::make(1, 1, sizeof(unsigned char))) + { + set_output_multiple(60 * 128 + 6); + control_word = ctrlword; + } + + /* + * Our virtual destructor. + */ + catv_frame_sync_enc_bb_impl::~catv_frame_sync_enc_bb_impl() + { + } + + void + catv_frame_sync_enc_bb_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) + { + ninput_items_required[0] = noutput_items / (60 * 128 + 6) * (60 * 128); + } + + int + catv_frame_sync_enc_bb_impl::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + int i = 0, j = 0; + while (i < noutput_items) { + memcpy(out + i, in + j, 60 * 128); + i += 60 * 128; + j += 60 * 128; + + out[i++] = 0x75; + out[i++] = 0x2C; + out[i++] = 0x0D; + out[i++] = 0x6C; + out[i++] = control_word << 3; + out[i++] = 0x00; + } + + // Tell runtime system how many input items we consumed on + // each input stream. + consume_each (j); + + // Tell runtime system how many output items we produced. + return noutput_items; + } + + } /* namespace dtv */ +} /* namespace gr */ + diff --git a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h new file mode 100644 index 0000000000..fb924f7a14 --- /dev/null +++ b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h @@ -0,0 +1,50 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_IMPL_H +#define INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_IMPL_H + +#include <gnuradio/dtv/catv_frame_sync_enc_bb.h> + +namespace gr { + namespace dtv { + + class catv_frame_sync_enc_bb_impl : public catv_frame_sync_enc_bb + { + private: + int control_word; + + public: + catv_frame_sync_enc_bb_impl(int ctrlword); + ~catv_frame_sync_enc_bb_impl(); + + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_FRAME_SYNC_ENC_BB_IMPL_H */ + diff --git a/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc b/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc new file mode 100644 index 0000000000..698288dcd3 --- /dev/null +++ b/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc @@ -0,0 +1,104 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/io_signature.h> +#include "catv_randomizer_bb_impl.h" + +namespace gr { + namespace dtv { + + catv_randomizer_bb::sptr + catv_randomizer_bb::make() + { + return gnuradio::get_initial_sptr + (new catv_randomizer_bb_impl()); + } + + /* + * The private constructor + */ + catv_randomizer_bb_impl::catv_randomizer_bb_impl() + : gr::sync_block("catv_randomizer_bb", + gr::io_signature::make(1, 1, sizeof(unsigned char)), + gr::io_signature::make(1, 1, sizeof(unsigned char))) + { + init_rand(); + + offset = 0; + max_offset = 60 * 128; + } + + /* + * Our virtual destructor. + */ + catv_randomizer_bb_impl::~catv_randomizer_bb_impl() + { + } + + void + catv_randomizer_bb_impl::init_rand() + { + unsigned char c2 = 0x7F, c1 = 0x7F, c0 = 0x7F; + unsigned char c2_new, c1_new, c0_new; + int n, i; + + for (n = 0; n < 60 * 128; n++) { + rseq[n] = c2; + c2_new = c1; + c1_new = c0 ^ c2; + c0_new = c2; + for (i = 0; i < 3; i++) { + c0_new <<= 1; + if (c0_new & 0x80) { + c0_new = (c0_new & 0x7F) ^ 0x09; + } + } + c2 = c2_new; + c1 = c1_new; + c0 = c0_new; + } + } + + int + catv_randomizer_bb_impl::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + for (int i = 0; i < noutput_items; i++) { + out[i] = in[i] ^ rseq[offset++]; + if (offset == max_offset) { + offset = 0; + } + } + + // Tell runtime system how many output items we produced. + return noutput_items; + } + + } /* namespace dtv */ +} /* namespace gr */ + diff --git a/gr-dtv/lib/catv/catv_randomizer_bb_impl.h b/gr-dtv/lib/catv/catv_randomizer_bb_impl.h new file mode 100644 index 0000000000..e4e40f8f6e --- /dev/null +++ b/gr-dtv/lib/catv/catv_randomizer_bb_impl.h @@ -0,0 +1,49 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_RANDOMIZER_BB_IMPL_H +#define INCLUDED_DTV_CATV_RANDOMIZER_BB_IMPL_H + +#include <gnuradio/dtv/catv_randomizer_bb.h> + +namespace gr { + namespace dtv { + + class catv_randomizer_bb_impl : public catv_randomizer_bb + { + private: + unsigned char rseq[60 * 128]; + int offset, max_offset; + void init_rand(); + + public: + catv_randomizer_bb_impl(); + ~catv_randomizer_bb_impl(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_RANDOMIZER_BB_IMPL_H */ + diff --git a/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc new file mode 100644 index 0000000000..06a1f12c3e --- /dev/null +++ b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.cc @@ -0,0 +1,153 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/io_signature.h> +#include "catv_reed_solomon_enc_bb_impl.h" + +namespace gr { + namespace dtv { + + catv_reed_solomon_enc_bb::sptr + catv_reed_solomon_enc_bb::make() + { + return gnuradio::get_initial_sptr + (new catv_reed_solomon_enc_bb_impl()); + } + + /* + * The private constructor + */ + catv_reed_solomon_enc_bb_impl::catv_reed_solomon_enc_bb_impl() + : gr::block("catv_reed_solomon_enc_bb", + gr::io_signature::make(1, 1, sizeof(unsigned char)), + gr::io_signature::make(1, 1, sizeof(unsigned char))) + { + set_output_multiple(128); + init_rs(); + } + + /* + * Our virtual destructor. + */ + catv_reed_solomon_enc_bb_impl::~catv_reed_solomon_enc_bb_impl() + { + } + + void + catv_reed_solomon_enc_bb_impl::init_rs() + { + unsigned char x; + int i, j; + + gf_exp[0] = 1; + gf_log[1] = 0; + + x = 1; + for (i = 1; i < 127; i++) { + x <<= 1; + if (x & 0x80) { + x = (x & 0x7F) ^ 0x09; + } + gf_exp[i] = x; + gf_log[x] = i; + } + for (; i < 256; i++) { + gf_exp[i] = gf_exp[i - 127]; + } + + for (i = 0; i < 128; i++) { + for (j = 0; j < 128; j++) { + if ((i == 0) || (j == 0)) { + gf_mul_table[i][j] = 0; + } else { + gf_mul_table[i][j] = gf_exp[gf_log[i] + gf_log[j]]; + } + } + } + } + + unsigned char + catv_reed_solomon_enc_bb_impl::gf_poly_eval(unsigned char *p, int len, unsigned char x) + { + unsigned char y = p[0]; + int i; + + for (i = 1; i < len; i++) { + y = gf_mul_table[y][x] ^ p[i]; + } + return y; + } + + void + catv_reed_solomon_enc_bb_impl::reed_solomon_enc(const unsigned char *message, unsigned char *output) + { + // Generator polynomial from p.7 of ANSI/SCTE 07 2013 + unsigned char g[] = {1, gf_exp[52], gf_exp[116], gf_exp[119], gf_exp[61], gf_exp[15]}; + int i, j; + + memcpy(output, message, 122); + memset(output + 122, 0, 6); + + for (i = 0; i < 122; i++) { + for (j = 1; j < 6; j++) { + output[i + j] ^= gf_mul_table[output[i]][g[j]]; + } + output[i] = message[i]; + } + + output[127] = gf_poly_eval(output, 128, gf_exp[6]); + } + + void + catv_reed_solomon_enc_bb_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) + { + ninput_items_required[0] = (noutput_items / 128) * 122; + } + + int + catv_reed_solomon_enc_bb_impl::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + int j = 0; + + for (int i = 0; i < noutput_items; i += 128) { + reed_solomon_enc(in + j, out + i); + j += 122; + } + + // Tell runtime system how many input items we consumed on + // each input stream. + consume_each (j); + + // Tell runtime system how many output items we produced. + return noutput_items; + } + + } /* namespace dtv */ +} /* namespace gr */ + diff --git a/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h new file mode 100644 index 0000000000..84e4cb500e --- /dev/null +++ b/gr-dtv/lib/catv/catv_reed_solomon_enc_bb_impl.h @@ -0,0 +1,56 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_IMPL_H +#define INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_IMPL_H + +#include <gnuradio/dtv/catv_reed_solomon_enc_bb.h> + +namespace gr { + namespace dtv { + + class catv_reed_solomon_enc_bb_impl : public catv_reed_solomon_enc_bb + { + private: + unsigned char gf_mul_table[128][128]; + unsigned char gf_exp[256]; + unsigned char gf_log[128]; + + void init_rs(); + unsigned char gf_poly_eval(unsigned char *p, int len, unsigned char x); + void reed_solomon_enc(const unsigned char *message, unsigned char *output); + + public: + catv_reed_solomon_enc_bb_impl(); + ~catv_reed_solomon_enc_bb_impl(); + + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_REED_SOLOMON_ENC_BB_IMPL_H */ + diff --git a/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.cc new file mode 100644 index 0000000000..4082e8265c --- /dev/null +++ b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.cc @@ -0,0 +1,131 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/io_signature.h> +#include "catv_transport_framing_enc_bb_impl.h" + +namespace gr { + namespace dtv { + + catv_transport_framing_enc_bb::sptr + catv_transport_framing_enc_bb::make() + { + return gnuradio::get_initial_sptr + (new catv_transport_framing_enc_bb_impl()); + } + + /* + * The private constructor + */ + catv_transport_framing_enc_bb_impl::catv_transport_framing_enc_bb_impl() + : gr::sync_block("catv_transport_framing_enc_bb", + gr::io_signature::make(1, 1, sizeof(unsigned char)), + gr::io_signature::make(1, 1, sizeof(unsigned char))) + { + set_output_multiple(188); + } + + /* + * Our virtual destructor. + */ + catv_transport_framing_enc_bb_impl::~catv_transport_framing_enc_bb_impl() + { + } + + unsigned char catv_transport_framing_enc_bb_impl::compute_sum(const unsigned char *bytes) + { + unsigned char i, bit, out, out1, out2, out3; + + unsigned char tapsG = 0xB1; // 10110001 + unsigned char tapsB = 0x45; // 1000101 + + unsigned char register1 = 0; + unsigned char register2 = 0; + unsigned char register3 = 0; + + unsigned char result = 0x67; + + unsigned char first7[] = {0, 0, 0, 0, 0, 0, 0, 0}; + + for (i = 0; i < 8; i++) { + bit = (bytes[0] >> (7-i)) & 1; + out = (register1 & 1) ^ bit; + if (i < 7) { + first7[i+1] = out; + } + register1 >>= 1; + if (out == 1) { + register1 ^= tapsG; + } + } + + for (i = 1; i < 187; i++) { + register1 = crctable[((register1) ^ BitReverseTable[bytes[i]]) & 0xff]; + } + + for (i = 0; i < 8; i++) { + out1 = register1 & 1; + register1 >>= 1; + if (out1 == 1) { + register1 ^= tapsG; + } + + out2 = (register2 & 1) ^ first7[i]; + register2 >>= 1; + if (first7[i] == 1) { + register2 ^= tapsB; + } + + out3 = (register3 & 1) ^ out1 ^ out2; + register3 >>= 1; + if ((out1 ^ out2) == 1) { + register3 ^= tapsG; + } + + result ^= (out3 << (7-i)); + } + + return result; + } + + int + catv_transport_framing_enc_bb_impl::work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + for (int i = 0; i < noutput_items; i += 188) { + memcpy(out + i, in + i + 1, 187); + out[i + 187] = compute_sum(in + i + 1); + } + + // Tell runtime system how many output items we produced. + return noutput_items; + } + + } /* namespace dtv */ +} /* namespace gr */ + diff --git a/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.h b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.h new file mode 100644 index 0000000000..fe69bc01f6 --- /dev/null +++ b/gr-dtv/lib/catv/catv_transport_framing_enc_bb_impl.h @@ -0,0 +1,84 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_IMPL_H +#define INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_IMPL_H + +#include <gnuradio/dtv/catv_transport_framing_enc_bb.h> + +namespace gr { + namespace dtv { + static const unsigned char crctable[] = { + 0x00,0x1b,0x36,0x2d,0x6c,0x77,0x5a,0x41,0xd8,0xc3,0xee,0xf5,0xb4,0xaf,0x82,0x99, + 0xd3,0xc8,0xe5,0xfe,0xbf,0xa4,0x89,0x92,0x0b,0x10,0x3d,0x26,0x67,0x7c,0x51,0x4a, + 0xc5,0xde,0xf3,0xe8,0xa9,0xb2,0x9f,0x84,0x1d,0x06,0x2b,0x30,0x71,0x6a,0x47,0x5c, + 0x16,0x0d,0x20,0x3b,0x7a,0x61,0x4c,0x57,0xce,0xd5,0xf8,0xe3,0xa2,0xb9,0x94,0x8f, + 0xe9,0xf2,0xdf,0xc4,0x85,0x9e,0xb3,0xa8,0x31,0x2a,0x07,0x1c,0x5d,0x46,0x6b,0x70, + 0x3a,0x21,0x0c,0x17,0x56,0x4d,0x60,0x7b,0xe2,0xf9,0xd4,0xcf,0x8e,0x95,0xb8,0xa3, + 0x2c,0x37,0x1a,0x01,0x40,0x5b,0x76,0x6d,0xf4,0xef,0xc2,0xd9,0x98,0x83,0xae,0xb5, + 0xff,0xe4,0xc9,0xd2,0x93,0x88,0xa5,0xbe,0x27,0x3c,0x11,0x0a,0x4b,0x50,0x7d,0x66, + 0xb1,0xaa,0x87,0x9c,0xdd,0xc6,0xeb,0xf0,0x69,0x72,0x5f,0x44,0x05,0x1e,0x33,0x28, + 0x62,0x79,0x54,0x4f,0x0e,0x15,0x38,0x23,0xba,0xa1,0x8c,0x97,0xd6,0xcd,0xe0,0xfb, + 0x74,0x6f,0x42,0x59,0x18,0x03,0x2e,0x35,0xac,0xb7,0x9a,0x81,0xc0,0xdb,0xf6,0xed, + 0xa7,0xbc,0x91,0x8a,0xcb,0xd0,0xfd,0xe6,0x7f,0x64,0x49,0x52,0x13,0x08,0x25,0x3e, + 0x58,0x43,0x6e,0x75,0x34,0x2f,0x02,0x19,0x80,0x9b,0xb6,0xad,0xec,0xf7,0xda,0xc1, + 0x8b,0x90,0xbd,0xa6,0xe7,0xfc,0xd1,0xca,0x53,0x48,0x65,0x7e,0x3f,0x24,0x09,0x12, + 0x9d,0x86,0xab,0xb0,0xf1,0xea,0xc7,0xdc,0x45,0x5e,0x73,0x68,0x29,0x32,0x1f,0x04, + 0x4e,0x55,0x78,0x63,0x22,0x39,0x14,0x0f,0x96,0x8d,0xa0,0xbb,0xfa,0xe1,0xcc,0xd7 + }; + + static const unsigned char BitReverseTable[] = { + 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, + 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, + 0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, + 0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, + 0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, + 0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, + 0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, + 0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, + 0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, + 0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, + 0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, + 0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, + 0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, + 0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, + 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, + 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF + }; + + class catv_transport_framing_enc_bb_impl : public catv_transport_framing_enc_bb + { + private: + unsigned char compute_sum(const unsigned char *bytes); + + public: + catv_transport_framing_enc_bb_impl(); + ~catv_transport_framing_enc_bb_impl(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_TRANSPORT_FRAMING_ENC_BB_IMPL_H */ + diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc new file mode 100644 index 0000000000..8fdb8722b6 --- /dev/null +++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc @@ -0,0 +1,193 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <gnuradio/io_signature.h> +#include "catv_trellis_enc_bb_impl.h" + +namespace gr { + namespace dtv { + + catv_trellis_enc_bb::sptr + catv_trellis_enc_bb::make() + { + return gnuradio::get_initial_sptr + (new catv_trellis_enc_bb_impl()); + } + + /* + * The private constructor + */ + catv_trellis_enc_bb_impl::catv_trellis_enc_bb_impl() + : gr::block("catv_trellis_enc_bb", + gr::io_signature::make(1, 1, sizeof(unsigned char)), + gr::io_signature::make(1, 1, sizeof(unsigned char))) + { + set_output_multiple(5); + + init_trellis(); + + Xq = 0; + Yq = 0; + XYp = 0; + } + + /* + * Our virtual destructor. + */ + catv_trellis_enc_bb_impl::~catv_trellis_enc_bb_impl() + { + } + + void + catv_trellis_enc_bb_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) + { + ninput_items_required[0] = noutput_items / 5 * 4; + } + + void + catv_trellis_enc_bb_impl::diff_precoder(unsigned char W, unsigned char Z, unsigned char *Xp, unsigned char *Yp) + { + unsigned char common, newX, newY; + + common = (Z & (*Xp ^ *Yp)); + newX = W ^ *Xp ^ common; + newY = Z ^ W ^ *Yp ^ common; + + *Xp = newX; + *Yp = newY; + } + + void + catv_trellis_enc_bb_impl::init_trellis() + { + unsigned char XYp, W, Z, X, Y, Xp, Yp, state, xy, Xq; + int i, n; + + for (XYp = 0; XYp < 4; XYp++) { + for (W = 0; W < 16; W++) { + for (Z = 0; Z < 16; Z++) { + X = 0; + Y = 0; + Xp = (XYp & 0b10) >> 1; + Yp = (XYp & 0b01); + for (i = 0; i < 4; i++) { + diff_precoder((W >> i) & 1, (Z >> i) & 1, &Xp, &Yp); + X |= (Xp << i); + Y |= (Yp << i); + } + diff_precoder_table[XYp][W][Z][0] = (Xp << 1) + Yp; + diff_precoder_table[XYp][W][Z][1] = X; + diff_precoder_table[XYp][W][Z][2] = Y; + } + } + } + + for (i = 0; i < 32; i++) { + G1table[i] = (i >> 4) ^ ((i & 0x04) >> 2) ^ (i & 1); + G2table[i] = (i >> 4) ^ ((i & 0x08) >> 3) ^ ((i & 0x04) >> 2) ^ ((i & 0x02) >> 1) ^ (i & 1); + } + + memset(trellis_table_x, 0, 16*16*6); + memset(trellis_table_y, 0, 16*16*6); + for (state = 0; state < 16; state++) { + for (xy = 0; xy < 16; xy++) { + i = 0; + Xq = state; + for (n = 0; n < 4; n++) { + Xq = (Xq << 1) + ((xy >> n) & 1); + + if (n == 3) { + trellis_table_x[state][xy][i+1] |= G1table[Xq] << 3; + trellis_table_y[state][xy][i+1] |= G1table[Xq]; + i += 1; + } + trellis_table_x[state][xy][i+1] |= G2table[Xq] << 3; + trellis_table_y[state][xy][i+1] |= G2table[Xq]; + i += 1; + + Xq &= 0x0F; + } + + trellis_table_x[state][xy][0] = Xq; + trellis_table_y[state][xy][0] = Xq; + } + } + } + + void + catv_trellis_enc_bb_impl::trellis_code(const unsigned char *rs, unsigned char *qs) + { + unsigned char X, Y; + int A, B, n; + + A = (rs[1] << 7) | rs[0]; + B = (rs[3] << 7) | rs[2]; + + memset(qs, 0, 5); + + for (n = 0; n < 5; n++) { + qs[n] |= ((A >> (2*n)) & 3) << 4; + qs[n] |= ((B >> (2*n)) & 3) << 1; + } + + X = diff_precoder_table[XYp][A >> 10][B >> 10][1]; + Y = diff_precoder_table[XYp][A >> 10][B >> 10][2]; + XYp = diff_precoder_table[XYp][A >> 10][B >> 10][0]; + + for (n = 0; n < 5; n++) { + qs[n] |= trellis_table_x[Xq][X][1+n]; + qs[n] |= trellis_table_y[Yq][Y][1+n]; + } + Xq = trellis_table_x[Xq][X][0]; + Yq = trellis_table_y[Yq][Y][0]; + } + + int + catv_trellis_enc_bb_impl::general_work (int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const unsigned char *in = (const unsigned char *) input_items[0]; + unsigned char *out = (unsigned char *) output_items[0]; + + int i = 0, j = 0; + + while (i < noutput_items) { + trellis_code(in + j, out + i); + i += 5; + j += 4; + } + + // Tell runtime system how many input items we consumed on + // each input stream. + consume_each (j); + + // Tell runtime system how many output items we produced. + return noutput_items; + } + + } /* namespace dtv */ +} /* namespace gr */ + diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h new file mode 100644 index 0000000000..aa7874d929 --- /dev/null +++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h @@ -0,0 +1,60 @@ +/* -*- c++ -*- */ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_DTV_CATV_TRELLIS_ENC_BB_IMPL_H +#define INCLUDED_DTV_CATV_TRELLIS_ENC_BB_IMPL_H + +#include <gnuradio/dtv/catv_trellis_enc_bb.h> + +namespace gr { + namespace dtv { + + class catv_trellis_enc_bb_impl : public catv_trellis_enc_bb + { + private: + unsigned char diff_precoder_table[4][16][16][3]; + unsigned char G1table[32]; + unsigned char G2table[32]; + unsigned char trellis_table_x[16][16][6]; + unsigned char trellis_table_y[16][16][6]; + unsigned char Xq, Yq, XYp; + + void diff_precoder(unsigned char W, unsigned char Z, unsigned char *Xp, unsigned char *Yp); + void init_trellis(); + void trellis_code(const unsigned char *rs, unsigned char *qs); + + public: + catv_trellis_enc_bb_impl(); + ~catv_trellis_enc_bb_impl(); + + // Where all the action really happens + void forecast (int noutput_items, gr_vector_int &ninput_items_required); + + int general_work(int noutput_items, + gr_vector_int &ninput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } // namespace dtv +} // namespace gr + +#endif /* INCLUDED_DTV_CATV_TRELLIS_ENC_BB_IMPL_H */ + diff --git a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc index c8579d1c1e..d1f3b4aa27 100644 --- a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc +++ b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2015 Free Software Foundation, Inc. + * Copyright 2015,2016 Free Software Foundation, Inc. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,16 +29,16 @@ namespace gr { namespace dtv { dvbs2_modulator_bc::sptr - dvbs2_modulator_bc::make(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation) + dvbs2_modulator_bc::make(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation, dvbs2_interpolation_t interpolation) { return gnuradio::get_initial_sptr - (new dvbs2_modulator_bc_impl(framesize, rate, constellation)); + (new dvbs2_modulator_bc_impl(framesize, rate, constellation, interpolation)); } /* * The private constructor */ - dvbs2_modulator_bc_impl::dvbs2_modulator_bc_impl(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation) + dvbs2_modulator_bc_impl::dvbs2_modulator_bc_impl(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation, dvbs2_interpolation_t interpolation) : gr::block("dvbs2_modulator_bc", gr::io_signature::make(1, 1, sizeof(unsigned char)), gr::io_signature::make(1, 1, sizeof(gr_complex))) @@ -1660,6 +1660,72 @@ namespace gr { m_256apsk[255] = gr_complex((r6 * cos(43 * M_PI / 32.0)), (r6 * sin(43 * M_PI / 32.0))); } break; + case MOD_64QAM: + m_64apsk[0] = gr_complex( 1.0, 1.0); + m_64apsk[1] = gr_complex( 1.0, -1.0); + m_64apsk[2] = gr_complex( 1.0, -3.0); + m_64apsk[3] = gr_complex( -3.0, -1.0); + m_64apsk[4] = gr_complex( -3.0, 1.0); + m_64apsk[5] = gr_complex( 1.0, 3.0); + m_64apsk[6] = gr_complex( -3.0, -3.0); + m_64apsk[7] = gr_complex( -3.0, 3.0); + m_64apsk[8] = gr_complex( -1.0, 1.0); + m_64apsk[9] = gr_complex( -1.0, -1.0); + m_64apsk[10] = gr_complex( 3.0, 1.0); + m_64apsk[11] = gr_complex(-1.0, 3.0); + m_64apsk[12] = gr_complex(-1.0, -3.0); + m_64apsk[13] = gr_complex( 3.0, -1.0); + m_64apsk[14] = gr_complex( 3.0, -3.0); + m_64apsk[15] = gr_complex( 3.0, 3.0); + m_64apsk[16] = gr_complex( 5.0, 1.0); + m_64apsk[17] = gr_complex( 1.0, -5.0); + m_64apsk[18] = gr_complex( 1.0, -7.0); + m_64apsk[19] = gr_complex(-7.0, -1.0); + m_64apsk[20] = gr_complex(-3.0, 5.0); + m_64apsk[21] = gr_complex( 5.0, 3.0); + m_64apsk[22] = gr_complex(-7.0, -3.0); + m_64apsk[23] = gr_complex(-3.0, 7.0); + m_64apsk[24] = gr_complex(-1.0, 5.0); + m_64apsk[25] = gr_complex(-5.0, -1.0); + m_64apsk[26] = gr_complex( 7.0, 1.0); + m_64apsk[27] = gr_complex(-1.0, 7.0); + m_64apsk[28] = gr_complex(-5.0, -3.0); + m_64apsk[29] = gr_complex( 3.0, -5.0); + m_64apsk[30] = gr_complex( 3.0, -7.0); + m_64apsk[31] = gr_complex( 7.0, 3.0); + m_64apsk[32] = gr_complex( 1.0, 5.0); + m_64apsk[33] = gr_complex( 5.0, -1.0); + m_64apsk[34] = gr_complex( 5.0, -3.0); + m_64apsk[35] = gr_complex(-3.0, -5.0); + m_64apsk[36] = gr_complex(-7.0, 1.0); + m_64apsk[37] = gr_complex( 1.0, 7.0); + m_64apsk[38] = gr_complex(-3.0, -7.0); + m_64apsk[39] = gr_complex(-7.0, 3.0); + m_64apsk[40] = gr_complex(-5.0, 1.0); + m_64apsk[41] = gr_complex(-1.0, -5.0); + m_64apsk[42] = gr_complex( 3.0, 5.0); + m_64apsk[43] = gr_complex(-5.0, 3.0); + m_64apsk[44] = gr_complex(-1.0, -7.0); + m_64apsk[45] = gr_complex( 7.0, -1.0); + m_64apsk[46] = gr_complex( 7.0, -3.0); + m_64apsk[47] = gr_complex( 3.0, 7.0); + m_64apsk[48] = gr_complex( 5.0, 5.0); + m_64apsk[49] = gr_complex( 5.0, -5.0); + m_64apsk[50] = gr_complex( 5.0, -7.0); + m_64apsk[51] = gr_complex(-7.0, -5.0); + m_64apsk[52] = gr_complex(-7.0, 5.0); + m_64apsk[53] = gr_complex( 5.0, 7.0); + m_64apsk[54] = gr_complex(-7.0, -7.0); + m_64apsk[55] = gr_complex(-7.0, 7.0); + m_64apsk[56] = gr_complex(-5.0, 5.0); + m_64apsk[57] = gr_complex(-5.0, -5.0); + m_64apsk[58] = gr_complex( 7.0, 5.0); + m_64apsk[59] = gr_complex(-5.0, 7.0); + m_64apsk[60] = gr_complex(-5.0, -7.0); + m_64apsk[61] = gr_complex( 7.0, -5.0); + m_64apsk[62] = gr_complex( 7.0, -7.0); + m_64apsk[63] = gr_complex( 7.0, 7.0); + break; default: m_qpsk[0] = gr_complex((r1 * cos(M_PI / 4.0)), (r1 * sin(M_PI / 4.0))); m_qpsk[1] = gr_complex((r1 * cos(7 * M_PI / 4.0)), (r1 * sin(7 * M_PI / 4.0))); @@ -1668,6 +1734,7 @@ namespace gr { break; } signal_constellation = constellation; + signal_interpolation = interpolation; set_output_multiple(2); } @@ -1681,7 +1748,12 @@ namespace gr { void dvbs2_modulator_bc_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) { - ninput_items_required[0] = noutput_items; + if (signal_interpolation == INTERPOLATION_OFF) { + ninput_items_required[0] = noutput_items; + } + else { + ninput_items_required[0] = noutput_items / 2; + } } int @@ -1693,67 +1765,145 @@ namespace gr { const unsigned char *in = (const unsigned char *) input_items[0]; gr_complex *out = (gr_complex *) output_items[0]; int index; + gr_complex zero; - switch (signal_constellation) { - case MOD_QPSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_qpsk[index & 0x3]; - } - break; - case MOD_8PSK: - case MOD_8APSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_8psk[index & 0x7]; - } - break; - case MOD_16APSK: - case MOD_8_8APSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_16apsk[index & 0xf]; - } - break; - case MOD_32APSK: - case MOD_4_12_16APSK: - case MOD_4_8_4_16APSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_32apsk[index & 0x1f]; - } - break; - case MOD_64APSK: - case MOD_8_16_20_20APSK: - case MOD_4_12_20_28APSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_64apsk[index & 0x3f]; - } - break; - case MOD_128APSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_128apsk[index & 0x7f]; - } - break; - case MOD_256APSK: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_256apsk[index & 0xff]; - } - break; - default: - for (int i = 0; i < noutput_items; i++) { - index = *in++; - *out++ = m_qpsk[index & 0x3]; - } - break; + zero = gr_complex(0.0, 0.0); + + if (signal_interpolation == INTERPOLATION_OFF) { + switch (signal_constellation) { + case MOD_QPSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_qpsk[index & 0x3]; + } + break; + case MOD_8PSK: + case MOD_8APSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_8psk[index & 0x7]; + } + break; + case MOD_16APSK: + case MOD_8_8APSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_16apsk[index & 0xf]; + } + break; + case MOD_32APSK: + case MOD_4_12_16APSK: + case MOD_4_8_4_16APSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_32apsk[index & 0x1f]; + } + break; + case MOD_64APSK: + case MOD_64QAM: + case MOD_8_16_20_20APSK: + case MOD_4_12_20_28APSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_64apsk[index & 0x3f]; + } + break; + case MOD_128APSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_128apsk[index & 0x7f]; + } + break; + case MOD_256APSK: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_256apsk[index & 0xff]; + } + break; + default: + for (int i = 0; i < noutput_items; i++) { + index = *in++; + *out++ = m_qpsk[index & 0x3]; + } + break; + } + } + else { + switch (signal_constellation) { + case MOD_QPSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_qpsk[index & 0x3]; + *out++ = zero; + } + break; + case MOD_8PSK: + case MOD_8APSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_8psk[index & 0x7]; + *out++ = zero; + } + break; + case MOD_16APSK: + case MOD_8_8APSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_16apsk[index & 0xf]; + *out++ = zero; + } + break; + case MOD_32APSK: + case MOD_4_12_16APSK: + case MOD_4_8_4_16APSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_32apsk[index & 0x1f]; + *out++ = zero; + } + break; + case MOD_64APSK: + case MOD_64QAM: + case MOD_8_16_20_20APSK: + case MOD_4_12_20_28APSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_64apsk[index & 0x3f]; + *out++ = zero; + } + break; + case MOD_128APSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_128apsk[index & 0x7f]; + *out++ = zero; + } + break; + case MOD_256APSK: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_256apsk[index & 0xff]; + *out++ = zero; + } + break; + default: + for (int i = 0; i < noutput_items / 2; i++) { + index = *in++; + *out++ = m_qpsk[index & 0x3]; + *out++ = zero; + } + break; + } } // Tell runtime system how many input items we consumed on // each input stream. - consume_each (noutput_items); + if (signal_interpolation == INTERPOLATION_OFF) { + consume_each (noutput_items); + } + else { + consume_each (noutput_items / 2); + } // Tell runtime system how many output items we produced. return noutput_items; diff --git a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h index 8507878b0e..4fdbb149df 100644 --- a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h +++ b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.h @@ -31,6 +31,7 @@ namespace gr { { private: int signal_constellation; + int signal_interpolation; gr_complex m_qpsk[4]; gr_complex m_8psk[8]; gr_complex m_16apsk[16]; @@ -40,7 +41,7 @@ namespace gr { gr_complex m_256apsk[256]; public: - dvbs2_modulator_bc_impl(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation); + dvbs2_modulator_bc_impl(dvb_framesize_t framesize, dvb_code_rate_t rate, dvb_constellation_t constellation, dvbs2_interpolation_t interpolation); ~dvbs2_modulator_bc_impl(); void forecast (int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc index 84b20f9ad4..abef1d0510 100644 --- a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc @@ -34,12 +34,12 @@ namespace gr { namespace dtv { int - dvbt_ofdm_sym_acquisition_impl::peak_detect_init(float threshold_factor_rise, float threshold_factor_fall, int look_ahead, float alpha) + dvbt_ofdm_sym_acquisition_impl::peak_detect_init(float threshold_factor_rise, float alpha) { d_avg_alpha = alpha; d_threshold_factor_rise = threshold_factor_rise; - d_threshold_factor_fall = threshold_factor_fall; - d_avg = 0; + d_avg_max = - (float)INFINITY; + d_avg_min = (float)INFINITY; return (0); } @@ -47,56 +47,50 @@ namespace gr { int dvbt_ofdm_sym_acquisition_impl::peak_detect_process(const float * datain, const int datain_length, int * peak_pos, int * peak_max) { - int state = 0; - float peak_val = -(float)INFINITY; int peak_index = 0; int peak_pos_length = 0; + unsigned int peak_index = 0; + int peak_pos_length = 0; - int i = 0; + volk_32f_index_max_16u(&peak_index, &datain[0], datain_length); - while(i < datain_length) { - if (state == 0) { - if (datain[i] > d_avg * d_threshold_factor_rise) { - state = 1; - } - else { - d_avg = d_avg_alpha * datain[i] + (1 - d_avg_alpha) * d_avg; - i++; - } + peak_pos_length = 1; + if (datain_length >= d_fft_length) { + float min = datain[(peak_index + d_fft_length / 2) % d_fft_length]; + if (d_avg_min == (float)INFINITY) { + d_avg_min = min; } - else if (state == 1) { - if (datain[i] > peak_val) { - peak_val = datain[i]; - peak_index = i; - d_avg = d_avg_alpha * datain[i] + (1 - d_avg_alpha) * d_avg; - i++; - } - else if (datain[i] > d_avg * d_threshold_factor_fall) { - d_avg = (d_avg_alpha) * datain[i] + (1 - d_avg_alpha) * d_avg; - i++; - } - else { - peak_pos[peak_pos_length] = peak_index; - peak_pos_length++; - state = 0; - peak_val = - (float)INFINITY; - } + else { + d_avg_min = d_avg_alpha * min + (1 - d_avg_alpha) * d_avg_min; } } - // Find peak of peaks - if (peak_pos_length) { - float max = datain[peak_pos[0]]; - int maxi = 0; + if (d_avg_max == -(float)INFINITY) { + // Initialize d_avg_max with the first value. + d_avg_max = datain[peak_index]; + } + else if (datain[peak_index] > d_avg_max - d_threshold_factor_rise * (d_avg_max-d_avg_min)) { + d_avg_max = d_avg_alpha * datain[peak_index] + (1 - d_avg_alpha) * d_avg_max; + } + else { + peak_pos_length = 0; + } - for (int i = 1; i < peak_pos_length; i++) { - if (datain[peak_pos[i]] > max) { - max = datain[peak_pos[i]]; - maxi = i; - } + // We now check whether the peak is in the border of the search interval. This would mean that + // the search interval is not correct, and it should be re-set. This happens for instance when the + // hardware dropped some samples. + // Our definition of "border of the search interval" depends if the search interval is "big" or not. + if (datain_length < d_fft_length) { + if ((peak_index == 0) || (peak_index == (unsigned int)datain_length - 1)) { + peak_pos_length = 0; + } + } + else { + if ((peak_index < 5) || (peak_index > (unsigned int)datain_length - 5)) { + peak_pos_length = 0; } - - *peak_max = maxi; } + peak_pos[0] = peak_index; + *peak_max = 0; return (peak_pos_length); } @@ -119,7 +113,8 @@ namespace gr { volk_32fc_magnitude_squared_32f(&d_norm[low], &in[low], size); // Calculate gamma on each point - low = lookup_stop - d_cp_length + 1; + // TODO check these boundaries!!!!!!! + low = lookup_stop - (d_cp_length - 1); size = lookup_start - low + 1; volk_32fc_x2_multiply_conjugate_32fc(&d_corr[low - d_fft_length], &in[low], &in[low - d_fft_length], size); @@ -220,6 +215,12 @@ namespace gr { this->add_item_tag(0, offset, key, value); } + // Derotates the signal + void dvbt_ofdm_sym_acquisition_impl::derotate(const gr_complex * in, gr_complex * out) + { + volk_32fc_x2_multiply_32fc(&out[0], &d_derot[0], &in[0], d_fft_length); + } + dvbt_ofdm_sym_acquisition::sptr dvbt_ofdm_sym_acquisition::make(int blocks, int fft_length, int occupied_tones, int cp_length, float snr) { @@ -234,11 +235,10 @@ namespace gr { : block("dvbt_ofdm_sym_acquisition", io_signature::make(1, 1, sizeof (gr_complex) * blocks), io_signature::make(1, 1, sizeof (gr_complex) * blocks * fft_length)), - d_blocks(blocks), d_fft_length(fft_length), d_cp_length(cp_length), d_snr(snr), - d_index(0), d_phase(0.0), d_phaseinc(0.0), d_cp_found(0), d_count(0), d_nextphaseinc(0), d_nextpos(0), \ - d_sym_acq_count(0),d_sym_acq_timeout(100), d_initial_acquisition(0), \ - d_freq_correction_count(0), d_freq_correction_timeout(0), d_cp_start(0), \ - d_to_consume(0), d_to_out(0) + d_blocks(blocks), d_fft_length(fft_length), d_cp_length(cp_length), d_snr(snr), \ + d_phase(0.0), d_phaseinc(0.0), d_cp_found(0), d_nextphaseinc(0), d_nextpos(0), \ + d_initial_acquisition(0), d_cp_start(0), \ + d_to_consume(0), d_to_out(0), d_consumed(0), d_out(0) { set_relative_rate(1.0 / (double) (d_cp_length + d_fft_length)); @@ -296,7 +296,7 @@ namespace gr { exit(1); } - peak_detect_init(0.8, 0.9, 30, 0.9); + peak_detect_init(0.3, 0.9); } /* @@ -319,7 +319,7 @@ namespace gr { // make sure we receive at least (symbol_length + fft_length) for (int i = 0; i < ninputs; i++) { - ninput_items_required[i] = (2 * d_fft_length + d_cp_length) * noutput_items; + ninput_items_required[i] = (d_cp_length + d_fft_length) * (noutput_items + 1); } } @@ -336,45 +336,52 @@ namespace gr { { const gr_complex *in = (const gr_complex *) input_items[0]; gr_complex *out = (gr_complex *) output_items[0]; - - int low, size; - - // This is initial acquisition of symbol start - // TODO - make a FSM - if (!d_initial_acquisition) { - d_initial_acquisition = ml_sync(in, 2 * d_fft_length + d_cp_length - 1, d_fft_length + d_cp_length - 1, \ - &d_cp_start, &d_derot[0], &d_to_consume, &d_to_out); - - // Send sync_start downstream - send_sync_start(); - } - - // This is fractional frequency correction (pre FFT) - // It is also called coarse frequency correction - if (d_initial_acquisition) { - d_cp_found = ml_sync(in, d_cp_start + 16, d_cp_start, \ - &d_cp_start, &d_derot[0], &d_to_consume, &d_to_out); + int low; + + d_consumed = 0; + d_out = 0; + + for (int i = 0; i < noutput_items; i++) { + // This is initial acquisition of symbol start + // TODO - make a FSM + if (!d_initial_acquisition) { + d_initial_acquisition = ml_sync(&in[d_consumed], 2 * d_fft_length + d_cp_length - 1, d_fft_length + d_cp_length - 1, \ + &d_cp_start, &d_derot[0], &d_to_consume, &d_to_out); + d_cp_found = d_initial_acquisition; + } + else { + // If we are here it means that in the previous iteration we found the CP. We + // now thus only search near it. + d_cp_found = ml_sync(&in[d_consumed], d_cp_start + 8, std::max(d_cp_start - 8, d_cp_length+d_fft_length - 1), \ + &d_cp_start, &d_derot[0], &d_to_consume, &d_to_out); + if (!d_cp_found) { + // We may have not found the CP because the smaller search range was too small (rare, but possible). + // We re-try with the whole search range. + d_cp_found = ml_sync(&in[d_consumed], 2 * d_fft_length + d_cp_length - 1, d_fft_length + d_cp_length - 1, \ + &d_cp_start, &d_derot[0], &d_to_consume, &d_to_out ); + } + } if (d_cp_found) { - d_freq_correction_count = 0; - - // Derotate the signal and out - low = d_cp_start - d_fft_length + 1; - size = d_cp_start - (d_cp_start - d_fft_length + 1) + 1; - - volk_32fc_x2_multiply_32fc(&out[0], &d_derot[0], &in[low], size); + low = d_consumed + d_cp_start - d_fft_length + 1; + derotate(&in[low], &out[i * d_fft_length]); } else { - // If we have a number of consecutive misses then we restart acquisition - if (++d_freq_correction_count > d_freq_correction_timeout) { - d_initial_acquisition = 0; - d_freq_correction_count = 0; - - // Restart with a half number so that we'll not endup with the same situation - // This will prevent peak_detect to not detect anything - d_to_consume = d_to_consume / 2; - } + // Send sync_start downstream + send_sync_start(); + d_initial_acquisition = 0; + + // Restart wit a half number so that we'll not end up with the same situation + // This will prevent peak_detect to not detect anything + d_to_consume = d_to_consume / 2; + d_consumed += d_to_consume; + consume_each(d_consumed); + + // Tell runtime system how many output items we produced. + return (d_out); } + d_consumed += d_to_consume; + d_out += d_to_out; } // Tell runtime system how many input items we consumed on @@ -386,3 +393,4 @@ namespace gr { } } /* namespace dtv */ } /* namespace gr */ + diff --git a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.h b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.h index e7b92cbd41..0964361b1e 100644 --- a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.h +++ b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.h @@ -35,8 +35,6 @@ namespace gr { float d_snr; float d_rho; - int d_index; - gr_complex * d_conj; float * d_norm; gr_complex * d_corr; @@ -45,37 +43,35 @@ namespace gr { // For peak detector float d_threshold_factor_rise; - float d_threshold_factor_fall; float d_avg_alpha; - float d_avg; + float d_avg_min; + float d_avg_max; float d_phase; double d_phaseinc; int d_cp_found; - int d_count; double d_nextphaseinc; int d_nextpos; - int d_sym_acq_count; - int d_sym_acq_timeout; - int d_initial_acquisition; - int d_freq_correction_count; - int d_freq_correction_timeout; - int d_cp_start; gr_complex * d_derot; int d_to_consume; int d_to_out; + int d_consumed; + int d_out; int ml_sync(const gr_complex * in, int lookup_start, int lookup_stop, int * cp_pos, gr_complex * derot, int * to_consume, int * to_out); - int peak_detect_init(float threshold_factor_rise, float threshold_factor_fall, int look_ahead, float alpha); + int peak_detect_init(float threshold_factor_rise, float alpha); int peak_detect_process(const float * datain, const int datain_length, int * peak_pos, int * peak_max); void send_sync_start(); + + void derotate(const gr_complex * in, gr_complex *out); + public: dvbt_ofdm_sym_acquisition_impl(int blocks, int fft_length, int occupied_tones, int cp_length, float snr); ~dvbt_ofdm_sym_acquisition_impl(); @@ -92,3 +88,4 @@ namespace gr { } // namespace gr #endif /* INCLUDED_DTV_DVBT_OFDM_SYM_ACQUISITION_IMPL_H */ + diff --git a/gr-dtv/swig/dtv_swig.i b/gr-dtv/swig/dtv_swig.i index c2fa312e05..24960bd2be 100644 --- a/gr-dtv/swig/dtv_swig.i +++ b/gr-dtv/swig/dtv_swig.i @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2014,2015 Free Software Foundation, Inc. + * Copyright 2014,2015,2016 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -79,6 +79,11 @@ #include "gnuradio/dtv/dvbt_convolutional_deinterleaver.h" #include "gnuradio/dtv/dvbt_reed_solomon_dec.h" #include "gnuradio/dtv/dvbt_energy_descramble.h" +#include "gnuradio/dtv/catv_transport_framing_enc_bb.h" +#include "gnuradio/dtv/catv_reed_solomon_enc_bb.h" +#include "gnuradio/dtv/catv_randomizer_bb.h" +#include "gnuradio/dtv/catv_frame_sync_enc_bb.h" +#include "gnuradio/dtv/catv_trellis_enc_bb.h" %} %include "gnuradio/dtv/atsc_deinterleaver.h" @@ -132,6 +137,11 @@ %include "gnuradio/dtv/dvbt_convolutional_deinterleaver.h" %include "gnuradio/dtv/dvbt_reed_solomon_dec.h" %include "gnuradio/dtv/dvbt_energy_descramble.h" +%include "gnuradio/dtv/catv_transport_framing_enc_bb.h" +%include "gnuradio/dtv/catv_reed_solomon_enc_bb.h" +%include "gnuradio/dtv/catv_randomizer_bb.h" +%include "gnuradio/dtv/catv_frame_sync_enc_bb.h" +%include "gnuradio/dtv/catv_trellis_enc_bb.h" GR_SWIG_BLOCK_MAGIC2(dtv, atsc_deinterleaver); GR_SWIG_BLOCK_MAGIC2(dtv, atsc_depad); @@ -180,3 +190,8 @@ GR_SWIG_BLOCK_MAGIC2(dtv, dvbt_viterbi_decoder); GR_SWIG_BLOCK_MAGIC2(dtv, dvbt_convolutional_deinterleaver); GR_SWIG_BLOCK_MAGIC2(dtv, dvbt_reed_solomon_dec); GR_SWIG_BLOCK_MAGIC2(dtv, dvbt_energy_descramble); +GR_SWIG_BLOCK_MAGIC2(dtv, catv_transport_framing_enc_bb); +GR_SWIG_BLOCK_MAGIC2(dtv, catv_reed_solomon_enc_bb); +GR_SWIG_BLOCK_MAGIC2(dtv, catv_randomizer_bb); +GR_SWIG_BLOCK_MAGIC2(dtv, catv_frame_sync_enc_bb); +GR_SWIG_BLOCK_MAGIC2(dtv, catv_trellis_enc_bb); diff --git a/gr-uhd/apps/uhd_app.py b/gr-uhd/apps/uhd_app.py index bb4b9a78af..0a2beec21c 100644 --- a/gr-uhd/apps/uhd_app.py +++ b/gr-uhd/apps/uhd_app.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2015 Free Software Foundation, Inc. +# Copyright 2015-2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -141,6 +141,9 @@ class UHDApp(object): if args.spec: for mb_idx in xrange(self.usrp.get_num_mboards()): self.usrp.set_subdev_spec(args.spec, mb_idx) + # Set the clock source: + if args.clock_source is not None: + self.usrp.set_clock_source(args.clock_source) # Sampling rate: self.usrp.set_samp_rate(args.samp_rate) self.samp_rate = self.usrp.get_samp_rate() @@ -295,5 +298,7 @@ class UHDApp(object): help="Show asynchronous message notifications from UHD") group.add_argument("--sync", choices=('default', 'pps', 'auto'), default='auto', help="Set to 'pps' to sync devices to PPS") + group.add_argument("--clock-source", + help="Set the clock source; typically 'internal', 'external' or 'gpsdo'") return parser diff --git a/gr-uhd/include/gnuradio/uhd/usrp_source.h b/gr-uhd/include/gnuradio/uhd/usrp_source.h index 19b3feb61f..19201c031c 100644 --- a/gr-uhd/include/gnuradio/uhd/usrp_source.h +++ b/gr-uhd/include/gnuradio/uhd/usrp_source.h @@ -96,10 +96,13 @@ namespace gr { /*! * \param device_addr the address to identify the hardware * \param stream_args the IO format and channel specification + * \param issue_stream_cmd_on_start enable or disable continuous streaming when flowgraph + * starts (default true) * \return a new USRP source block object */ static sptr make(const ::uhd::device_addr_t &device_addr, - const ::uhd::stream_args_t &stream_args); + const ::uhd::stream_args_t &stream_args, + const bool issue_stream_cmd_on_start = true); /*! * Set the start time for incoming samples. diff --git a/gr-uhd/lib/usrp_sink_impl.cc b/gr-uhd/lib/usrp_sink_impl.cc index 64d25bde30..666f09cbf5 100644 --- a/gr-uhd/lib/usrp_sink_impl.cc +++ b/gr-uhd/lib/usrp_sink_impl.cc @@ -321,7 +321,8 @@ namespace gr { { _update_stream_args(stream_args); #ifdef GR_UHD_USE_STREAM_API - _tx_stream.reset(); + if(_tx_stream) + _tx_stream.reset(); #else throw std::runtime_error("not implemented in this version"); #endif @@ -609,7 +610,8 @@ namespace gr { _nitems_to_send = 0; #ifdef GR_UHD_USE_STREAM_API - _tx_stream->send(gr_vector_const_void_star(_nchan), 0, _metadata, 1.0); + if(_tx_stream) + _tx_stream->send(gr_vector_const_void_star(_nchan), 0, _metadata, 1.0); #else _dev->get_device()->send (gr_vector_const_void_star(_nchan), 0, _metadata, diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc index e174e11334..7ad2280955 100644 --- a/gr-uhd/lib/usrp_source_impl.cc +++ b/gr-uhd/lib/usrp_source_impl.cc @@ -53,20 +53,23 @@ namespace gr { usrp_source::sptr usrp_source::make(const ::uhd::device_addr_t &device_addr, - const ::uhd::stream_args_t &stream_args) + const ::uhd::stream_args_t &stream_args, + const bool issue_stream_cmd_on_start) { check_abi(); return usrp_source::sptr - (new usrp_source_impl(device_addr, stream_args_ensure(stream_args))); + (new usrp_source_impl(device_addr, stream_args_ensure(stream_args), issue_stream_cmd_on_start)); } usrp_source_impl::usrp_source_impl(const ::uhd::device_addr_t &device_addr, - const ::uhd::stream_args_t &stream_args): + const ::uhd::stream_args_t &stream_args, + const bool issue_stream_cmd_on_start): usrp_block("gr uhd usrp source", io_signature::make(0, 0, 0), args_to_io_sig(stream_args)), usrp_block_impl(device_addr, stream_args, ""), - _tag_now(false) + _tag_now(false), + _issue_stream_cmd_on_start(issue_stream_cmd_on_start) { std::stringstream str; str << name() << unique_id(); @@ -348,7 +351,8 @@ namespace gr { { _update_stream_args(stream_args); #ifdef GR_UHD_USE_STREAM_API - _rx_stream.reset(); + if(_rx_stream) + _rx_stream.reset(); #else throw std::runtime_error("not implemented in this version"); #endif @@ -381,18 +385,20 @@ namespace gr { _samps_per_packet = _rx_stream->get_max_num_samps(); } #endif - //setup a stream command that starts streaming slightly in the future - static const double reasonable_delay = 0.1; //order of magnitude over RTT - ::uhd::stream_cmd_t stream_cmd(::uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); - stream_cmd.stream_now = _stream_now; - if(_start_time_set) { - _start_time_set = false; //cleared for next run - stream_cmd.time_spec = _start_time; - } - else { - stream_cmd.time_spec = get_time_now() + ::uhd::time_spec_t(reasonable_delay); + if(_issue_stream_cmd_on_start){ + //setup a stream command that starts streaming slightly in the future + static const double reasonable_delay = 0.1; //order of magnitude over RTT + ::uhd::stream_cmd_t stream_cmd(::uhd::stream_cmd_t::STREAM_MODE_START_CONTINUOUS); + stream_cmd.stream_now = _stream_now; + if(_start_time_set) { + _start_time_set = false; //cleared for next run + stream_cmd.time_spec = _start_time; + } + else { + stream_cmd.time_spec = get_time_now() + ::uhd::time_spec_t(reasonable_delay); + } + this->issue_stream_cmd(stream_cmd); } - this->issue_stream_cmd(stream_cmd); _tag_now = true; return true; } @@ -409,7 +415,12 @@ namespace gr { while(true) { #ifdef GR_UHD_USE_STREAM_API const size_t bpi = ::uhd::convert::get_bytes_per_item(_stream_args.cpu_format); - _rx_stream->recv(outputs, nbytes/bpi, _metadata, 0.0); + if(_rx_stream) + // get the remaining samples out of the buffers + _rx_stream->recv(outputs, nbytes/bpi, _metadata, 0.0); + else + // no rx streamer -- nothing to flush + break; #else _dev->get_device()->recv (outputs, nbytes/_type->size, _metadata, *_type, diff --git a/gr-uhd/lib/usrp_source_impl.h b/gr-uhd/lib/usrp_source_impl.h index 98af816c02..b43df4dab3 100644 --- a/gr-uhd/lib/usrp_source_impl.h +++ b/gr-uhd/lib/usrp_source_impl.h @@ -55,7 +55,8 @@ namespace gr { { public: usrp_source_impl(const ::uhd::device_addr_t &device_addr, - const ::uhd::stream_args_t &stream_args); + const ::uhd::stream_args_t &stream_args, + const bool issue_stream_cmd_on_start = true); ~usrp_source_impl(); // Get Commands @@ -119,6 +120,7 @@ namespace gr { bool _tag_now; ::uhd::rx_metadata_t _metadata; pmt::pmt_t _id; + bool _issue_stream_cmd_on_start; //tag shadows double _samp_rate; diff --git a/grc/gui/ActionHandler.py b/grc/gui/ActionHandler.py index 7766a0a853..0f227d08f5 100644 --- a/grc/gui/ActionHandler.py +++ b/grc/gui/ActionHandler.py @@ -34,7 +34,7 @@ from .ParserErrorsDialog import ParserErrorsDialog from .MainWindow import MainWindow from .PropsDialog import PropsDialog from .FileDialogs import (OpenFlowGraphFileDialog, SaveFlowGraphFileDialog, - SaveReportsFileDialog, SaveImageFileDialog, + SaveReportsFileDialog, SaveScreenShotDialog, OpenQSSFileDialog) from .Constants import DEFAULT_CANVAS_SIZE, IMAGE_FILE_EXTENSION, GR_PREFIX @@ -521,9 +521,9 @@ class ActionHandler: self.main_window.tool_bar.refresh_submenus() self.main_window.menu_bar.refresh_submenus() elif action == Actions.FLOW_GRAPH_SCREEN_CAPTURE: - file_path = SaveImageFileDialog(self.get_page().get_file_path()).run() + file_path, background_transparent = SaveScreenShotDialog(self.get_page().get_file_path()).run() if file_path is not None: - pixbuf = self.get_flow_graph().get_drawing_area().get_pixbuf() + pixbuf = self.get_flow_graph().get_drawing_area().get_screenshot(background_transparent) pixbuf.save(file_path, IMAGE_FILE_EXTENSION[1:]) ################################################## # Gen/Exec/Stop diff --git a/grc/gui/Actions.py b/grc/gui/Actions.py index 9b32b3e601..d53375f291 100644 --- a/grc/gui/Actions.py +++ b/grc/gui/Actions.py @@ -386,7 +386,7 @@ FLOW_GRAPH_KILL = Action( keypresses=(gtk.keysyms.F7, NO_MODS_MASK), ) FLOW_GRAPH_SCREEN_CAPTURE = Action( - label='Sc_reen Capture', + label='Screen Ca_pture', tooltip='Create a screen capture of the flow graph', stock_id=gtk.STOCK_PRINT, keypresses=(gtk.keysyms.Print, NO_MODS_MASK), diff --git a/grc/gui/BlockTreeWindow.py b/grc/gui/BlockTreeWindow.py index 6b3ebf7807..f6968198d2 100644 --- a/grc/gui/BlockTreeWindow.py +++ b/grc/gui/BlockTreeWindow.py @@ -139,7 +139,7 @@ class BlockTreeWindow(gtk.VBox): sub_category = category[:i+1] if sub_category not in categories: iter = treestore.insert_before(categories[sub_category[:-1]], None) - treestore.set_value(iter, NAME_INDEX, '[ %s ]'%cat_name) + treestore.set_value(iter, NAME_INDEX, cat_name) treestore.set_value(iter, KEY_INDEX, '') treestore.set_value(iter, DOC_INDEX, Utils.parse_template(CAT_MARKUP_TMPL, cat=cat_name)) categories[sub_category] = iter diff --git a/grc/gui/Colors.py b/grc/gui/Colors.py index 52c95e8edf..050b363cdd 100644 --- a/grc/gui/Colors.py +++ b/grc/gui/Colors.py @@ -33,8 +33,9 @@ try: PARAM_ENTRY_TEXT_COLOR = get_color('black') ENTRYENUM_CUSTOM_COLOR = get_color('#EEEEEE') #flow graph color constants - FLOWGRAPH_BACKGROUND_COLOR = get_color('#FFF9FF') + FLOWGRAPH_BACKGROUND_COLOR = get_color('#FFFFFF') COMMENT_BACKGROUND_COLOR = get_color('#F3F3F3') + FLOWGRAPH_EDGE_COLOR = COMMENT_BACKGROUND_COLOR #block color constants BLOCK_ENABLED_COLOR = get_color('#F1ECFF') BLOCK_DISABLED_COLOR = get_color('#CCCCCC') diff --git a/grc/gui/DrawingArea.py b/grc/gui/DrawingArea.py index 4412129809..6a1df27a8c 100644 --- a/grc/gui/DrawingArea.py +++ b/grc/gui/DrawingArea.py @@ -20,7 +20,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA import pygtk pygtk.require('2.0') import gtk + from Constants import MIN_WINDOW_WIDTH, MIN_WINDOW_HEIGHT, DND_TARGETS +import Colors + class DrawingArea(gtk.DrawingArea): """ @@ -68,13 +71,21 @@ class DrawingArea(gtk.DrawingArea): self.set_flags(gtk.CAN_FOCUS) # self.set_can_focus(True) self.connect('focus-out-event', self._handle_focus_lost_event) - def new_pixmap(self, width, height): return gtk.gdk.Pixmap(self.window, width, height, -1) - def get_pixbuf(self): - width, height = self._pixmap.get_size() - pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 0, 8, width, height) - pixbuf.get_from_drawable(self._pixmap, self._pixmap.get_colormap(), 0, 0, 0, 0, width, height) + def new_pixmap(self, width, height): + return gtk.gdk.Pixmap(self.window, width, height, -1) + + def get_screenshot(self, transparent_bg=False): + pixmap = self._pixmap + W, H = pixmap.get_size() + pixbuf = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, 0, 8, W, H) + pixbuf.fill(0xFF + Colors.FLOWGRAPH_BACKGROUND_COLOR.pixel << 8) + pixbuf.get_from_drawable(pixmap, pixmap.get_colormap(), 0, 0, 0, 0, W-1, H-1) + if transparent_bg: + bgc = Colors.FLOWGRAPH_BACKGROUND_COLOR + pixbuf = pixbuf.add_alpha(True, bgc.red, bgc.green, bgc.blue) return pixbuf + ########################################################################## ## Handlers ########################################################################## @@ -149,6 +160,12 @@ class DrawingArea(gtk.DrawingArea): gc = self.window.new_gc() self._flow_graph.draw(gc, self._pixmap) self.window.draw_drawable(gc, self._pixmap, 0, 0, 0, 0, -1, -1) + # draw a light grey line on the bottom and right end of the canvas. + # this is useful when the theme uses the same panel bg color as the canvas + W, H = self._pixmap.get_size() + gc.set_foreground(Colors.FLOWGRAPH_EDGE_COLOR) + self.window.draw_line(gc, 0, H-1, W, H-1) + self.window.draw_line(gc, W-1, 0, W-1, H) def _handle_focus_lost_event(self, widget, event): # don't clear selection while context menu is active diff --git a/grc/gui/FileDialogs.py b/grc/gui/FileDialogs.py index 730ac6fba0..4b5770ad21 100644 --- a/grc/gui/FileDialogs.py +++ b/grc/gui/FileDialogs.py @@ -210,3 +210,18 @@ class SaveFlowGraphFileDialog(FileDialog): type = SAVE_FLOW_GRAPH class OpenQSSFileDialog(FileDialog): type = OPEN_QSS_THEME class SaveReportsFileDialog(FileDialog): type = SAVE_REPORTS class SaveImageFileDialog(FileDialog): type = SAVE_IMAGE + + +class SaveScreenShotDialog(SaveImageFileDialog): + + def __init__(self, current_file_path=''): + SaveImageFileDialog.__init__(self, current_file_path) + self._button = button = gtk.CheckButton('_Background transparent') + self._button.set_active(Preferences.screen_shot_background_transparent()) + self.set_extra_widget(button) + + def run(self): + filename = SaveImageFileDialog.run(self) + bg_transparent = self._button.get_active() + Preferences.screen_shot_background_transparent(bg_transparent) + return filename, bg_transparent diff --git a/grc/gui/Preferences.py b/grc/gui/Preferences.py index 3ebee24345..ad2206ca29 100644 --- a/grc/gui/Preferences.py +++ b/grc/gui/Preferences.py @@ -150,3 +150,7 @@ def blocks_window_position(pos=None): def xterm_missing(cmd=None): return entry('xterm_missing', cmd, default='INVALID_XTERM_SETTING') + + +def screen_shot_background_transparent(transparent=None): + return entry('screen_shot_background_transparent', transparent, default=False) |