diff options
177 files changed, 26118 insertions, 11208 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index ba43f97a80..30ca73711d 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 10) -set(VERSION_INFO_MAINT_VERSION 1) +set(VERSION_INFO_MINOR_VERSION 11) +set(VERSION_INFO_MAINT_VERSION git) include(GrVersion) #setup version info # Append -O2 optimization flag for Debug builds (Not on MSVC since conflicts with RTC1 flag) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 5cc9ab3053..8f17d7e86f 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,7 +1,10 @@ -ChangeLog v3.7.10.1 +ChangeLog v3.7.10 ================= -This is the first bug-fix release for v3.7.10 +This significant feature release of the 3.7 API series, and +incorporates all the bug fixes implemented in the 3.7.9.3 maintenance +release. + Contributors ------------ @@ -9,60 +12,201 @@ Contributors The following list of people directly contributed code to this release: - * Artem Pisarenko <ArtemPisarenko@users.noreply.github.com> - * Ben Hilburn <ben.hilburn@ettus.com> - * Christopher Chavez <chrischavez@gmx.us> + * A. Maitland Bottoms <bottoms@debian.org> + * Andrej Rode <mail@andrejro.de> + * Andy Sloane <andy@a1k0n.net> + * Andy Walls <awalls@md.metrocast.net> + * Chris Kuethe <chris.kuethe+github@gmail.com> + * Clayton Smith <argilo@gmail.com> + * Daehyun Yang <daehyun.yang@gmail.com> + * Derek Kozel <derek.kozel@ettus.com> + * Federico La Rocca <flarroca@fing.edu.uy> + * Geof Nieboer <gnieboer@corpcomm.net> + * Glenn Richardson <glenn.richardson@live.com> + * Glenn Richardson <glenn.richardson@live.com> + * Jiřà Pinkava <j-pi@seznam.cz> + * Johannes Schmitz <johannes.schmitz1@gmail.com> * Johnathan Corgan <johnathan@corganlabs.com> - * Jonathan Brucker <jonathan.brucke@gmail.com> - * Nicholas Corgan <n.corgan@gmail.com> - * Nicolas Cuervo <nicolas.cuervo@ettus.com> + * Kevin McQuiggin <mcquiggi@sfu.ca> + * Laur Joost <daremion@gmail.com> + * Marcus Müller <marcus.mueller@ettus.com> + * Martin Braun <martin.braun@ettus.com> + * Matt Hostetter <mhostetter@users.noreply.github.com> + * Michael Dickens <michael.dickens@ettus.com> + * Nathan West <nathan.west@gnuradio.org> + * Paul Cercueil <paul.cercueil@analog.com> + * Paul David <paul.david@ettus.com> + * Philip Balister <philip@balister.org> * Ron Economos <w6rz@comcast.net> + * Sean Nowlan <sean.nowlan@gtri.gatech.edu> * Sebastian Koslowski <koslowski@kit.edu> - * Stephen Larew <stephen@slarew.net> - + * Seth Hitefield <sdh11@vt.edu> + * Stefan Wunsch <stefan.wunsch@student.kit.edu> + * Tim O'Shea <tim.oshea753@gmail.com> + * Tom Rondeau <tom@trondeau.com> + * Tracie Renea <tracie.perez@mavs.uta.edu> ## Major Development Areas -This contains bug fixes primarily for GRC and DTV. +This release sees the integration of a number of long-time development +efforts in various areas of the tree, including GRC, new packet/burst +communications features for gr-digital, new standards implementations +for gr-dtv. In addition, it incorporates all of the bug fixes +released as part of the 3.7.9.3 maintenance release. + ### GRC -Catch more exceptions thrown by ConfigParser when reading corrupted grc.conf files. +The GNU Radio Companion development environment continues to undergo +rapid development and refactoring. The tools and workflow have been +improved in the following ways: + + * Variable explorer panel and option to hide variables from canvas + * Nicer block documentation tool-tip and properties dialog tab + * Screenshots can have transparent background + * Darker color for bypassed blocks + * Select all action + * Block alignment tools + * Added bits (unpacked bytes) as a data type + * Show warning for blocks flagged as deprecated + * Remove [] around categories in the block library + * Separate core and OOT block trees via the category of each block + +The refactor of GRC continues. This should be mostly feature neutral +and make it easier for new contributors to come in and make useful +changes. Part of this is deprecating blks2 and and xmlrpc blocks and +moving them to components where they would be expected to be found +rather than the GRC sub-tree. + +### Packet Communications + +A long-time feature branch developed by Tom Rondeau has been merged +into the tree, implementing new blocks and methods for packet +communications. This is intended to replace much of the older, +overlapping, and Python-only packet-based code that already exists. +As this code matures, we will be marking this older code as deprecated +with the plan to remove it in the new 3.8 API. -Fix the docstring update error for empty categories. +### DTV -Fix grcc to call refactored GRC code. +DTV has new transmitters for DVB-S and ITU-T J.83B 64QAM. New support +for DVB-S2X VL-SNR code rates, modulation, and framing for AMSAT are +also available. -Convert initially opened files to absolute paths to prevent attempting to read from tmp. +A significantly improved OFDM symbol synchronizer was implemented for +the DVB-T receiver (Ron Economos, Federico La Rocca). -Move startup checks back in to gnuradio-companion script from grc/checks.py. +## Other Feature Development +### Runtime -### DTV +Clear tags and reset all item counters when merging connections +between blocks, which prevents bad values from being propagated on +lock/unlock operations. -Fix a segfault that occurs from out-of-bounds access in -dvbt_bit_inner_interleaver forecast by forecasting an enumerated list of all -input streams. +Blocks always set their max_noutput_items before a flowgraph starts if +it hasn't already been set. -Fix VL-SNR framing. +Added some options to gnuradio-config-info that prints information +about the gnuradio prefs file. The old customized preference file +reader is replaced with a boost program options object. -### Digital +### QT GUIs -Enable update rate in block_recovery_mm blocks to keep tags close to the the proper clock-recovered sample time. Tag offsets will still be off between calls to work, but each work call updates the tag rate. +The QT GUI widgets can now toggle axis labels and the frequency sink +has a new feature to set the y-axis label. This could be useful for +changing units on calibrated measurements. -### Analog +The QT GUI Entry widget has a new message port that emits a message +containing the new text whenever editing is finished. -Fix the derivative calculation in fmdet block. +QT widgets recently had an optional message port to plot PDUs. This +release adds a feature to plot the tag metadata contained in the PDU. -### Builds +A new example shows how to build a C++ only QT based application. + +### gr-digital + +New QA for tagged stream correlate access code blocks further cement +how these blocks should be behaving. + +16QAM is now available from the GRC constellation object dialog drop +down menu. + +### gr-analog + +The frequency modulator now has sensitivity exposed through +controlport. + +New FM pre emphasis and de-emphasis filters. The previous filters were +effectively all-pass filters. There is a very nice write up on the new +filters in gr-analog/python/analog/fm_emph.py + +A new message port to sig_source is available that can set signal +frequency with the same convention as gr-uhd usrp_source. + +### gr-filter + +Use the max_noutput_items in start() to allocate FFT buffers for the +PFB decimator rather than always allocating/freeing a buffer in +work(). + +### gr-blocks + +Add a run-time accessor and setter for interpolation of repeat blocks. -Fix linking GSL to gr-fec. +vector_sink.reset() clears tags now -Use gnu99 C standard rather than gnu11 standard to maintain support for GCC 4.6.3. +Add accessors for the vector_source repeat flag so it's settable +outside the ctor. + +Fix tuntap devices MTU size. Previously MTU size argument was used to +allocate correct buffer size, but didn't actually change the MTU of +the underlying device. + +The UDP source block can read gr prefs file for the payload buffer +size or default to the existing value of 50. + +Yet another block making use of VOLK: the divide_cc block is now 10x +faster on some machines. + +### gr-uhd + +New argument in usrp_source initializer to start streaming on the +start of a flowgraph which defaults to true (the existing behavior). + +Add a clock-source argument to uhd_fft. + +A new message command handler for the usrp_source block will trigger a +time and rate tag to be emitted. + +Added support for importing, exporting, and sharing LOs. + +### gr-audio + +Refactor audio sink for windows with multiple buffers to prevent +skipping. + +### modtool + +Add an option to set the copyright field for new files. + +New modules will detect PYBOMBS_PREFIX and install to the defined +location. + +Add versioning support for OOT modules by default. + +### Builds -### Other +Enable controlport for static builds. -Minor spelling and documentation fixes. +Enable GR_GIT_COUNT and GR_GIT_HASH environment variables for extended +versioning number for packagers. -Fix uhd_siggen_gui when using lo_locked. +We explicitly set the C/C++ standards to C++98 and gnu11 rather than +use the compiler defaults since many compilers are moving to C++11 by +default. Incidentally this caused minor breakage with a subtle VOLK +API fix in gr-dtv which was also fixed. +Fixed finding GNU Radio + VOLK in non-standard prefixes when compiling +OOT modules. diff --git a/docs/sphinx/source/blocks_blocks.rst b/docs/sphinx/source/blocks_blocks.rst index 056e9efe9a..f214e01c47 100644 --- a/docs/sphinx/source/blocks_blocks.rst +++ b/docs/sphinx/source/blocks_blocks.rst @@ -185,6 +185,7 @@ gnuradio.blocks .. autoblock:: gnuradio.blocks.tagged_stream_mux .. autoblock:: gnuradio.blocks.tagged_stream_to_pdu .. autoblock:: gnuradio.blocks.tags_strobe +.. autoblock:: gnuradio.blocks.tcp_server_sink .. autoblock:: gnuradio.blocks.threshold_ff .. autoblock:: gnuradio.blocks.throttle .. autoblock:: gnuradio.blocks.transcendental diff --git a/docs/sphinx/source/index.rst b/docs/sphinx/source/index.rst index 7bba2f8e32..5c14d22cce 100644 --- a/docs/sphinx/source/index.rst +++ b/docs/sphinx/source/index.rst @@ -854,6 +854,7 @@ Networking Tools Blocks :nosignatures: gnuradio.blocks.socket_pdu + gnuradio.blocks.tcp_server_sink gnuradio.blocks.udp_sink gnuradio.blocks.udp_source diff --git a/gnuradio-runtime/lib/constants.cc.in b/gnuradio-runtime/lib/constants.cc.in index 516e2f8798..b368e9dc3f 100644 --- a/gnuradio-runtime/lib/constants.cc.in +++ b/gnuradio-runtime/lib/constants.cc.in @@ -24,6 +24,7 @@ #include <config.h> #endif +#include <stdlib.h> #include <gnuradio/constants.h> namespace gr { @@ -31,18 +32,36 @@ namespace gr { const std::string prefix() { + //Use "GR_PREFIX" environment variable when specified + const char *prefix = getenv("GR_PREFIX"); + if (prefix != NULL) return prefix; + return "@prefix@"; } const std::string sysconfdir() { + //Provide the sysconfdir in terms of prefix() + //when the "GR_PREFIX" environment var is specified. + if (getenv("GR_PREFIX") != NULL) + { + return prefix() + "/@GR_CONF_DIR@"; + } + return "@SYSCONFDIR@"; } const std::string prefsdir() { + //Provide the prefsdir in terms of sysconfdir() + //when the "GR_PREFIX" environment var is specified. + if (getenv("GR_PREFIX") != NULL) + { + return sysconfdir() + "/@CMAKE_PROJECT_NAME@/conf.d"; + } + return "@GR_PREFSDIR@"; } diff --git a/gr-analog/grc/analog_block_tree.xml b/gr-analog/grc/analog_block_tree.xml index 64ccbdd855..7337c34c3e 100644 --- a/gr-analog/grc/analog_block_tree.xml +++ b/gr-analog/grc/analog_block_tree.xml @@ -42,7 +42,6 @@ </cat> <cat> <name>Modulators</name> - <block>analog_cpfsk_bc</block> <block>analog_frequency_modulator_fc</block> <block>analog_phase_modulator_fc</block> <block>analog_quadrature_demod_cf</block> diff --git a/gr-analog/grc/analog_cpfsk_bc.xml b/gr-analog/grc/analog_cpfsk_bc.xml index 7eb85a2ecf..5108ff61f9 100644 --- a/gr-analog/grc/analog_cpfsk_bc.xml +++ b/gr-analog/grc/analog_cpfsk_bc.xml @@ -7,6 +7,7 @@ <block> <name>CPFSK</name> <key>analog_cpfsk_bc</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import analog</import> <make>analog.cpfsk_bc($k, $amplitude, $samples_per_symbol)</make> <callback>set_amplitude($amplitude)</callback> diff --git a/gr-analog/include/gnuradio/analog/cpfsk_bc.h b/gr-analog/include/gnuradio/analog/cpfsk_bc.h index 0d889d3e20..fe28c4536a 100644 --- a/gr-analog/include/gnuradio/analog/cpfsk_bc.h +++ b/gr-analog/include/gnuradio/analog/cpfsk_bc.h @@ -31,6 +31,7 @@ namespace gr { * \brief Perform continuous phase 2-level frequency shift keying modulation * on an input stream of unpacked bits. * \ingroup modulators_blk + * \ingroup deprecated_blk */ class ANALOG_API cpfsk_bc : virtual public sync_interpolator { diff --git a/gr-audio/lib/windows/windows_sink.cc b/gr-audio/lib/windows/windows_sink.cc index 4ec798b0ba..52456dbdc4 100644 --- a/gr-audio/lib/windows/windows_sink.cc +++ b/gr-audio/lib/windows/windows_sink.cc @@ -46,10 +46,10 @@ namespace gr { sink::sptr windows_sink_fcn(int sampling_rate, const std::string &device_name, - bool) + bool ok_to_block) { return sink::sptr - (new windows_sink(sampling_rate, device_name)); + (new windows_sink(sampling_rate, device_name, ok_to_block)); } static const double CHUNK_TIME = prefs::singleton()->get_double("audio_windows", "period_time", 0.1); // 100 ms (below 3ms distortion will likely occur regardless of number of buffers, will likely be a higher limit on slower machines) @@ -63,13 +63,13 @@ namespace gr { return (default_device == "default" ? "WAVE_MAPPER" : default_device); } - windows_sink::windows_sink(int sampling_freq, const std::string device_name) + windows_sink::windows_sink(int sampling_freq, const std::string device_name, bool ok_to_block) : sync_block("audio_windows_sink", io_signature::make(1, 2, sizeof(float)), io_signature::make(0, 0, 0)), d_sampling_freq(sampling_freq), d_device_name(device_name.empty() ? default_device_name() : device_name), - d_fd(-1), d_buffers(0), d_chunk_size(0) + d_fd(-1), d_buffers(0), d_chunk_size(0), d_ok_to_block(ok_to_block) { /* Initialize the WAVEFORMATEX for 16-bit, 44KHz, stereo */ wave_format.wFormatTag = WAVE_FORMAT_PCM; @@ -154,10 +154,20 @@ namespace gr { } } if (!chosen_header) { - WaitForSingleObject(d_wave_write_event, 100); - printf("aO"); + if (!d_ok_to_block) + { + // drop the input data, print warning, and return control. + printf("aO"); + return noutput_items; + } + else { + WaitForSingleObject(d_wave_write_event, 100); + } } if (c++ > 10) { + // After waiting for 1 second, then something else is seriously wrong so let's + // just fail and give some debugging information about the status + // of the buffers. for (int i = 0; i < nPeriods; i++) { printf("%d: %d\n", i, d_buffers[i]->dwFlags); } diff --git a/gr-audio/lib/windows/windows_sink.h b/gr-audio/lib/windows/windows_sink.h index 2bfdbd318d..de905c68fd 100644 --- a/gr-audio/lib/windows/windows_sink.h +++ b/gr-audio/lib/windows/windows_sink.h @@ -49,22 +49,24 @@ namespace gr { int d_fd; LPWAVEHDR *d_buffers; DWORD d_chunk_size; - DWORD d_buffer_size; + DWORD d_buffer_size; + bool d_ok_to_block; HWAVEOUT d_h_waveout; HANDLE d_wave_write_event; - WAVEFORMATEX wave_format; + WAVEFORMATEX wave_format; protected: int string_to_int(const std::string & s); int open_waveout_device(void); int write_waveout(LPWAVEHDR lp_wave_hdr); - MMRESULT is_format_supported(LPWAVEFORMATEX pwfx, UINT uDeviceID); - bool is_number(const std::string& s); - UINT find_device(std::string szDeviceName); + MMRESULT is_format_supported(LPWAVEFORMATEX pwfx, UINT uDeviceID); + bool is_number(const std::string& s); + UINT find_device(std::string szDeviceName); public: windows_sink(int sampling_freq, - const std::string device_name = ""); + const std::string device_name, + bool ok_to_block); ~windows_sink(); int work(int noutput_items, diff --git a/gr-audio/lib/windows/windows_source.cc b/gr-audio/lib/windows/windows_source.cc index 02c9311517..f458fa474e 100644 --- a/gr-audio/lib/windows/windows_source.cc +++ b/gr-audio/lib/windows/windows_source.cc @@ -26,9 +26,6 @@ #include "audio_registry.h" #include <windows_source.h> -#include <gnuradio/io_signature.h> -//include <sys/soundcard.h> -//include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> @@ -36,160 +33,306 @@ #include <stdio.h> #include <iostream> #include <stdexcept> +#include <sstream> +#include <gnuradio/io_signature.h> +#include <gnuradio/prefs.h> +#include <gnuradio/logger.h> + +#include "boost/lexical_cast.hpp" + namespace gr { - namespace audio { - - source::sptr - windows_source_fcn(int sampling_rate, - const std::string &device_name, - bool) - { - return source::sptr - (new windows_source(sampling_rate, device_name)); - } - - static const double CHUNK_TIME = 0.005; // 5 ms - - // FIXME these should query some kind of user preference - - static std::string - default_device_name() - { - return "/dev/dsp"; - } - - windows_source::windows_source(int sampling_freq, - const std::string device_name) - : sync_block("audio_windows_source", - io_signature::make(0, 0, 0), - io_signature::make(1, 2, sizeof(float))), - d_sampling_freq(sampling_freq), - d_device_name(device_name.empty() ? default_device_name() : device_name), - d_fd(-1), d_buffer(0), d_chunk_size(0) - { - //FIXME TODO implement me -#if 0 - if((d_fd = open(d_device_name.c_str(), O_RDONLY)) < 0) { - fprintf(stderr, "audio_windows_source: "); - perror(d_device_name.c_str()); - throw std::runtime_error("audio_windows_source"); - } - - d_chunk_size = (int)(d_sampling_freq * CHUNK_TIME); - set_output_multiple(d_chunk_size); - - d_buffer = new short[d_chunk_size * 2]; - - int format = AFMT_S16_NE; - int orig_format = format; - if(ioctl(d_fd, SNDCTL_DSP_SETFMT, &format) < 0) { - std::cerr << "audio_windows_source: " << d_device_name - << " ioctl failed\n"; - perror(d_device_name.c_str()); - throw std::runtime_error("audio_windows_source"); - } - - if(format != orig_format) { - fprintf(stderr, "audio_windows_source: unable to support format %d\n", - orig_format); - fprintf(stderr, " card requested %d instead.\n", format); - } - - // set to stereo no matter what. Some hardware only does stereo - int channels = 2; - if(ioctl(d_fd, SNDCTL_DSP_CHANNELS, &channels) < 0 || channels != 2) { - perror("audio_windows_source: could not set STEREO mode"); - throw std::runtime_error("audio_windows_source"); - } - - // set sampling freq - int sf = sampling_freq; - if(ioctl(d_fd, SNDCTL_DSP_SPEED, &sf) < 0) { - std::cerr << "audio_windows_source: " - << d_device_name << ": invalid sampling_freq " - << sampling_freq << "\n"; - sampling_freq = 8000; - if(ioctl(d_fd, SNDCTL_DSP_SPEED, &sf) < 0) { - std::cerr << "audio_windows_source: failed to set sampling_freq to 8000\n"; - throw std::runtime_error ("audio_windows_source"); - } - } -#endif - } - - windows_source::~windows_source() - { - /*close(d_fd); - delete [] d_buffer; - */ - } - - int - windows_source::work(int noutput_items, - gr_vector_const_void_star & input_items, - gr_vector_void_star & output_items) - { - //FIXME TODO implement me -#if 0 - float *f0 = (float*)output_items[0]; - float *f1 = (float*)output_items[1]; // will be invalid if this is mono output - - const int shorts_per_item = 2; // L + R - const int bytes_per_item = shorts_per_item * sizeof(short); - - // To minimize latency, never return more than CHUNK_TIME - // worth of samples per call to work. - // FIXME, we need an API to set this value - - noutput_items = std::min(noutput_items, d_chunk_size); - - int base = 0; - int ntogo = noutput_items; - - while(ntogo > 0) { - int nbytes = std::min(ntogo, d_chunk_size) * bytes_per_item; - int result_nbytes = read(d_fd, d_buffer, nbytes); - - if(result_nbytes < 0) { - perror("audio_windows_source"); - return -1; // say we're done - } - - if((result_nbytes & (bytes_per_item - 1)) != 0) { - fprintf(stderr, "audio_windows_source: internal error.\n"); - throw std::runtime_error("internal error"); - } - - int result_nitems = result_nbytes / bytes_per_item; - - // now unpack samples into output streams - switch(output_items.size()) { - case 1: // mono output - for(int i = 0; i < result_nitems; i++) { - f0[base + i] = d_buffer[2 * i + 0] * (1.0 / 32767); - } - break; - - case 2: // stereo output - for(int i = 0; i < result_nitems; i++) { - f0[base + i] = d_buffer[2 * i + 0] * (1.0 / 32767); - f1[base + i] = d_buffer[2 * i + 1] * (1.0 / 32767); - } - break; - - default: - assert(0); - } - - ntogo -= result_nitems; - base += result_nitems; - } - - return noutput_items - ntogo; -#endif - return -1; // EOF - } + namespace audio { + + // Currently this audio source will only support a single channel input at 16-bits. So a stereo input will likely be turned into a mono by the wave mapper + + source::sptr + windows_source_fcn(int sampling_rate, + const std::string &device_name, + bool) + { + return source::sptr + (new windows_source(sampling_rate, device_name)); + } + + static const double CHUNK_TIME = prefs::singleton()->get_double("audio_windows", "period_time", 0.1); // 100 ms (below 3ms distortion will likely occur regardless of number of buffers, will likely be a higher limit on slower machines) + static const int nPeriods = prefs::singleton()->get_long("audio_windows", "nperiods", 4); // 4 should be more than enough with a normal chunk time (2 will likely work as well)... at 3ms chunks 10 was enough on a fast machine + static const bool verbose = prefs::singleton()->get_bool("audio_windows", "verbose", false); + static const std::string default_device = prefs::singleton()->get_string("audio_windows", "standard_input_device", "default"); + + static std::string + default_device_name() + { + return (default_device == "default" ? "WAVE_MAPPER" : default_device); + } + + windows_source::windows_source(int sampling_freq, + const std::string device_name) + : sync_block("audio_windows_source", + io_signature::make(0, 0, 0), + io_signature::make(1, 1, sizeof(float))), + d_sampling_freq(sampling_freq), + d_device_name(device_name.empty() ? default_device_name() : device_name), + d_fd(-1), lp_buffers(0), d_chunk_size(0) + { + /* Initialize the WAVEFORMATEX for 16-bit, mono */ + wave_format.wFormatTag = WAVE_FORMAT_PCM; + wave_format.nChannels = 1; // changing this will require adjustments to the work routine. + wave_format.wBitsPerSample = 16; // changing this will necessitate changing buffer type from short. + wave_format.nSamplesPerSec = d_sampling_freq; // defined by flowgraph settings, but note that the microphone will likely have a native sample rate + // that the audio system may upsample to you desired rate, so check where the cutoff ends up or check your control panel + wave_format.nBlockAlign = + wave_format.nChannels * (wave_format.wBitsPerSample / 8); + wave_format.nAvgBytesPerSec = + wave_format.nSamplesPerSec * wave_format.nBlockAlign; + wave_format.cbSize = 0; + + d_chunk_size = (int)(d_sampling_freq * CHUNK_TIME); // Samples per chunk + set_output_multiple(d_chunk_size); + d_buffer_size = d_chunk_size * wave_format.nChannels * (wave_format.wBitsPerSample / 8); // room for 16-bit audio on one channel. + + if (open_wavein_device() < 0) { + perror("audio_windows_source:open_wavein_device() failed\n"); + throw + std::runtime_error("audio_windows_source:open_wavein_device() failed"); + } + else if (verbose) { + GR_LOG_INFO(logger, "Opened windows wavein device"); + } + lp_buffers = new LPWAVEHDR[nPeriods]; + for (int i = 0; i < nPeriods; i++) + { + lp_buffers[i] = new WAVEHDR; + LPWAVEHDR lp_buffer = lp_buffers[i]; + lp_buffer->dwLoops = 0L; + lp_buffer->dwFlags = 0; + lp_buffer->dwBufferLength = d_buffer_size; + lp_buffer->lpData = new CHAR[d_buffer_size]; + MMRESULT w_result = + waveInPrepareHeader(d_h_wavein, lp_buffer, sizeof(WAVEHDR)); + if (w_result != 0) { + perror("audio_windows_source: Failed to waveInPrepareHeader"); + throw + std::runtime_error("audio_windows_source:open_wavein_device() failed"); + } + waveInAddBuffer(d_h_wavein, lp_buffer, sizeof(WAVEHDR)); + } + waveInStart(d_h_wavein); + if (verbose) GR_LOG_INFO(logger, boost::format("Initialized %1% %2%ms audio buffers, total memory used: %3$0.2fkB") % (nPeriods) % (CHUNK_TIME * 1000) % ((d_buffer_size * nPeriods) / 1024.0)); + } + + windows_source::~windows_source() + { + // stop playback and set all buffers to DONE. + waveInReset(d_h_wavein); + // Now we can deallocate the buffers + for (int i = 0; i < nPeriods; i++) + { + if (lp_buffers[i]->dwFlags & (WHDR_DONE | WHDR_PREPARED)) { + waveInUnprepareHeader(d_h_wavein, lp_buffers[i], sizeof(WAVEHDR)); + } + else { + + } + delete lp_buffers[i]->lpData; + } + /* Free the callback Event */ + waveInClose(d_h_wavein); + delete[] lp_buffers; + } + + int + windows_source::work(int noutput_items, + gr_vector_const_void_star & input_items, + gr_vector_void_star & output_items) + { + float *f0, *f1; + DWORD dw_items = 0; + + while (!buffer_queue.empty()) + { + // Pull the next incoming buffer off the queue + LPWAVEHDR next_header = buffer_queue.front(); + + // Convert and calculate the number of samples (might not be full) + short *lp_buffer = (short *)next_header->lpData; + DWORD buffer_length = next_header->dwBytesRecorded / sizeof(short); + + if (buffer_length + dw_items > noutput_items * output_items.size()) { + // There's not enough output buffer space to send the whole input buffer + // so don't try, just leave it in the queue + // or else we'd have to track how much we sent etc + // In theory we should never reach this code because the buffers should all be + // sized the same + return dw_items; + } + else { + switch (output_items.size()) { + case 1: // mono output + f0 = (float*)output_items[0]; + + for (int j = 0; j < buffer_length; j++) { + f0[dw_items + j] = (float)(lp_buffer[j]) / 32767.0; + } + dw_items += buffer_length; + break; + case 2: // stereo output (interleaved in the buffer) + f0 = (float*)output_items[0]; + f1 = (float*)output_items[1]; + + for (int j = 0; j < buffer_length / 2; j++) { + f0[dw_items + j] = (float)(lp_buffer[2 * j + 0]) / 32767.0; + f1[dw_items + j] = (float)(lp_buffer[2 * j + 1]) / 32767.0; + } + dw_items += buffer_length / 2; + } + buffer_queue.pop(); + + // Recycle the buffer + next_header->dwFlags = 0; + waveInPrepareHeader(d_h_wavein, next_header, sizeof(WAVEHDR)); + waveInAddBuffer(d_h_wavein, next_header, sizeof(WAVEHDR)); + } + } + return dw_items; + } + + int + windows_source::string_to_int(const std::string & s) + { + int i; + std::istringstream(s) >> i; + return i; + } + + MMRESULT windows_source::is_format_supported(LPWAVEFORMATEX pwfx, UINT uDeviceID) + { + return (waveInOpen( + NULL, // ptr can be NULL for query + uDeviceID, // the device identifier + pwfx, // defines requested format + NULL, // no callback + NULL, // no instance data + WAVE_FORMAT_QUERY)); // query only, do not open device + } + + bool windows_source::is_number(const std::string& s) + { + std::string::const_iterator it = s.begin(); + while (it != s.end() && std::isdigit(*it)) ++it; + return !s.empty() && it == s.end(); + } + + UINT windows_source::find_device(std::string szDeviceName) + { + UINT result = -1; + UINT num_devices = waveInGetNumDevs(); + if (num_devices > 0) { + // what the device name passed as a number? + if (is_number(szDeviceName)) + { + // a number, so must be referencing a device ID (which incremement from zero) + UINT num = std::stoul(szDeviceName); + if (num < num_devices) { + result = num; + } + else { + GR_LOG_INFO(logger, boost::format("Warning: waveIn deviceID %d was not found, defaulting to WAVE_MAPPER") % num); + result = WAVE_MAPPER; + } + + } + else { + // device name passed as string + for (UINT i = 0; i < num_devices; i++) + { + WAVEINCAPS woc; + if (waveInGetDevCaps(i, &woc, sizeof(woc)) != MMSYSERR_NOERROR) + { + perror("Error: Could not retrieve wave out device capabilities for device"); + return -1; + } + if (woc.szPname == szDeviceName) + { + result = i; + } + if (verbose) GR_LOG_INFO(logger, boost::format("WaveIn Device %d: %s") % i % woc.szPname); + } + if (result == -1) { + GR_LOG_INFO(logger, boost::format("Warning: waveIn device '%s' was not found, defaulting to WAVE_MAPPER") % szDeviceName); + result = WAVE_MAPPER; + } + } + } + else { + perror("Error: No WaveIn devices present or accessible"); + } + return result; + } + + int + windows_source::open_wavein_device(void) + { + UINT u_device_id; + unsigned long result; + + /** Identifier of the waveform-audio output device to open. It + can be either a device identifier or a handle of an open + waveform-audio input device. You can use the following flag + instead of a device identifier. + WAVE_MAPPER The function selects a waveform-audio output + device capable of playing the given format. + */ + if (d_device_name.empty() || default_device_name() == d_device_name) + u_device_id = WAVE_MAPPER; + else + // The below could be uncommented to allow selection of different device handles + // however it is unclear what other devices are out there and how a user + // would know the device ID so at the moment we will ignore that setting + // and stick with WAVE_MAPPER + u_device_id = find_device(d_device_name); + if (verbose) GR_LOG_INFO(logger, boost::format("waveIn Device ID: %1%") % (u_device_id)); + + // Check if the sampling rate/bits/channels are good to go with the device. + MMRESULT supported = is_format_supported(&wave_format, u_device_id); + if (supported != MMSYSERR_NOERROR) { + char err_msg[50]; + waveInGetErrorText(supported, err_msg, 50); + GR_LOG_INFO(logger, boost::format("format error: %s") % err_msg); + perror("audio_windows_source: Requested audio format is not supported by device driver"); + return -1; + } + + // Open a waveform device for output using event callback. + result = waveInOpen(&d_h_wavein, u_device_id, + &wave_format, + (DWORD_PTR)&read_wavein, + (DWORD_PTR)&buffer_queue, CALLBACK_FUNCTION | WAVE_ALLOWSYNC); + + if (result) { + perror("audio_windows_source: Failed to open waveform output device."); + return -1; + } + return 0; + } - } /* namespace audio */ + static void CALLBACK read_wavein( + HWAVEIN hwi, + UINT uMsg, + DWORD_PTR dwInstance, + DWORD_PTR dwParam1, + DWORD_PTR dwParam2 + ) + { + // Ignore WIM_OPEN and WIM_CLOSE messages + if (uMsg == WIM_DATA) { + if (!dwInstance) { + perror("audio_windows_source: callback function missing buffer queue"); + } + LPWAVEHDR lp_wave_hdr = (LPWAVEHDR)dwParam1; // The new audio data + boost::lockfree::spsc_queue<LPWAVEHDR> *q = (boost::lockfree::spsc_queue<LPWAVEHDR> *)dwInstance; // The buffer queue we assigned to the device to track the buffers that need to be sent + q->push(lp_wave_hdr); // Add the buffer to that queue + } + } + } /* namespace audio */ } /* namespace gr */ diff --git a/gr-audio/lib/windows/windows_source.h b/gr-audio/lib/windows/windows_source.h index 9814d12f54..edb89a73ce 100644 --- a/gr-audio/lib/windows/windows_source.h +++ b/gr-audio/lib/windows/windows_source.h @@ -23,9 +23,17 @@ #ifndef INCLUDED_AUDIO_WINDOWS_SOURCE_H #define INCLUDED_AUDIO_WINDOWS_SOURCE_H +#define WIN32_LEAN_AND_MEAN +#define NOMINMAX // stops windef.h defining max/min under cygwin + +#include <windows.h> +#include <mmsystem.h> + #include <gnuradio/audio/source.h> #include <string> +#include <boost/lockfree/spsc_queue.hpp> + namespace gr { namespace audio { @@ -38,11 +46,22 @@ namespace gr { */ class windows_source : public source { - int d_sampling_freq; - std::string d_device_name; - int d_fd; - short *d_buffer; - int d_chunk_size; + int d_sampling_freq; + std::string d_device_name; + int d_fd; + LPWAVEHDR *lp_buffers; + DWORD d_chunk_size; + DWORD d_buffer_size; + HWAVEIN d_h_wavein; + WAVEFORMATEX wave_format; + + protected: + int string_to_int(const std::string & s); + int open_wavein_device(void); + MMRESULT is_format_supported(LPWAVEFORMATEX pwfx, UINT uDeviceID); + bool is_number(const std::string& s); + UINT find_device(std::string szDeviceName); + boost::lockfree::spsc_queue<LPWAVEHDR> buffer_queue{ 100 }; public: windows_source(int sampling_freq, @@ -54,6 +73,14 @@ namespace gr { gr_vector_void_star & output_items); }; + static void CALLBACK read_wavein( + HWAVEIN hwi, + UINT uMsg, + DWORD_PTR dwInstance, + DWORD_PTR dwParam1, + DWORD_PTR dwParam2 + ); + } /* namespace audio */ } /* namespace gr */ diff --git a/gr-blocks/grc/blocks_block_tree.xml b/gr-blocks/grc/blocks_block_tree.xml index c4857f3b3a..cb9ad639c6 100644 --- a/gr-blocks/grc/blocks_block_tree.xml +++ b/gr-blocks/grc/blocks_block_tree.xml @@ -94,6 +94,7 @@ <block>blocks_add_const_vxx</block> <block>blocks_divide_xx</block> <block>blocks_multiply_xx</block> + <block>blocks_multiply_const_xx</block> <block>blocks_multiply_const_vxx</block> <block>blocks_multiply_conjugate_cc</block> <block>blocks_multiply_matrix_xx</block> @@ -121,9 +122,6 @@ </cat> <cat> <name>Message Tools</name> - <block>blocks_message_source</block> - <block>blocks_message_sink</block> - <block>blocks_message_burst_source</block> <block>blocks_message_strobe</block> <block>blocks_message_strobe_random</block> <block>blocks_message_debug</block> @@ -158,6 +156,7 @@ <name>Networking Tools</name> <block>blocks_tuntap_pdu</block> <block>blocks_socket_pdu</block> + <block>blocks_tcp_server_sink</block> <block>blocks_udp_source</block> <block>blocks_udp_sink</block> </cat> diff --git a/gr-blocks/grc/blocks_message_burst_source.xml b/gr-blocks/grc/blocks_message_burst_source.xml index 208955e557..7eaef2c514 100644 --- a/gr-blocks/grc/blocks_message_burst_source.xml +++ b/gr-blocks/grc/blocks_message_burst_source.xml @@ -7,6 +7,7 @@ <block> <name>Message Burst Source</name> <key>blocks_message_burst_source</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import blocks</import> <make>blocks.message_burst_source($type.size*$vlen, $(id)_msgq_in)</make> <param> diff --git a/gr-blocks/grc/blocks_message_sink.xml b/gr-blocks/grc/blocks_message_sink.xml index c1f21f6521..0f6de7b4e5 100644 --- a/gr-blocks/grc/blocks_message_sink.xml +++ b/gr-blocks/grc/blocks_message_sink.xml @@ -7,6 +7,7 @@ <block> <name>Message Sink</name> <key>blocks_message_sink</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import blocks</import> <make>blocks.message_sink($type.size*$vlen, $(id)_msgq_out, $dont_block)</make> <param> diff --git a/gr-blocks/grc/blocks_message_source.xml b/gr-blocks/grc/blocks_message_source.xml index 12c6569606..ecf049b9de 100644 --- a/gr-blocks/grc/blocks_message_source.xml +++ b/gr-blocks/grc/blocks_message_source.xml @@ -7,6 +7,7 @@ <block> <name>Message Source</name> <key>blocks_message_source</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import blocks</import> <make>blocks.message_source($type.size*$vlen, $(id)_msgq_in)</make> <param> diff --git a/gr-blocks/grc/blocks_multiply_const_xx.xml b/gr-blocks/grc/blocks_multiply_const_xx.xml new file mode 100644 index 0000000000..db8b5211e6 --- /dev/null +++ b/gr-blocks/grc/blocks_multiply_const_xx.xml @@ -0,0 +1,62 @@ +<?xml version="1.0"?> +<!-- +################################################### +##Fast Multiply Const Block: +## all types, 1 output, 1 input & const +################################################### + --> +<block> + <name>Fast Multiply Const</name> + <key>blocks_multiply_const_xx</key> + <import>from gnuradio import blocks</import> + <make>blocks.multiply_const_$(type.fcn)($const)</make> + <callback>set_k($const)</callback> + <param> + <name>IO Type</name> + <key>type</key> + <type>enum</type> + <option> + <name>Complex</name> + <key>complex</key> + <opt>fcn:cc</opt> + </option> + <option> + <name>Float</name> + <key>float</key> + <opt>fcn:ff</opt> + </option> + <option> + <name>Int</name> + <key>int</key> + <opt>fcn:ii</opt> + </option> + <option> + <name>Short</name> + <key>short</key> + <opt>fcn:ss</opt> + </option> + </param> + <param> + <name>Constant</name> + <key>const</key> + <value>0</value> + <type>$type</type> + </param> + <param> + <name>Vec Length</name> + <key>vlen</key> + <value>1</value> + <type>int</type> + </param> + <check>$vlen > 0</check> + <sink> + <name>in</name> + <type>$type</type> + <vlen>$vlen</vlen> + </sink> + <source> + <name>out</name> + <type>$type</type> + <vlen>$vlen</vlen> + </source> +</block> diff --git a/gr-blocks/grc/blocks_pdu_filter.xml b/gr-blocks/grc/blocks_pdu_filter.xml index 1fb7209500..0e848963de 100644 --- a/gr-blocks/grc/blocks_pdu_filter.xml +++ b/gr-blocks/grc/blocks_pdu_filter.xml @@ -10,6 +10,9 @@ <import>from gnuradio import blocks</import> <import>import pmt</import> <make>blocks.pdu_filter($k, $v, $invert)</make> + <callback>set_key($k)</callback> + <callback>set_val($v)</callback> + <callback>set_inversion($invert)</callback> <param> <name>Key</name> <key>k</key> @@ -26,7 +29,7 @@ <name>Invert Filter</name> <key>invert</key> <value>False</value> - <type>enum</type> + <type>bool</type> <option> <name>No</name> <key>False</key> diff --git a/gr-blocks/grc/blocks_pdu_remove.xml b/gr-blocks/grc/blocks_pdu_remove.xml index ad99445e1d..c71da32fce 100644 --- a/gr-blocks/grc/blocks_pdu_remove.xml +++ b/gr-blocks/grc/blocks_pdu_remove.xml @@ -10,6 +10,7 @@ <import>from gnuradio import blocks</import> <import>import pmt</import> <make>blocks.pdu_remove($k)</make> + <callback>set_key($k)</callback> <param> <name>Key</name> <key>k</key> diff --git a/gr-blocks/grc/blocks_pdu_set.xml b/gr-blocks/grc/blocks_pdu_set.xml index 1e7157fa8a..b7a9030622 100644 --- a/gr-blocks/grc/blocks_pdu_set.xml +++ b/gr-blocks/grc/blocks_pdu_set.xml @@ -10,6 +10,8 @@ <import>from gnuradio import blocks</import> <import>import pmt</import> <make>blocks.pdu_set($k, $v)</make> + <callback>set_key($k)</callback> + <callback>set_val($v)</callback> <param> <name>Key</name> <key>k</key> diff --git a/gr-blocks/grc/blocks_tcp_server_sink.xml b/gr-blocks/grc/blocks_tcp_server_sink.xml new file mode 100644 index 0000000000..644027da65 --- /dev/null +++ b/gr-blocks/grc/blocks_tcp_server_sink.xml @@ -0,0 +1,77 @@ +<?xml version="1.0"?> +<!-- +################################################### +##TCP Server Sink +################################################### + --> +<block> + <name>TCP Server Sink</name> + <key>blocks_tcp_server_sink</key> + <import>from gnuradio import blocks</import> + <make>blocks.tcp_server_sink($type.size*$vlen, $ipaddr, $port, $noblock)</make> + <param> + <name>Input Type</name> + <key>type</key> + <type>enum</type> + <option> + <name>Complex</name> + <key>complex</key> + <opt>size:gr.sizeof_gr_complex</opt> + </option> + <option> + <name>Float</name> + <key>float</key> + <opt>size:gr.sizeof_float</opt> + </option> + <option> + <name>Int</name> + <key>int</key> + <opt>size:gr.sizeof_int</opt> + </option> + <option> + <name>Short</name> + <key>short</key> + <opt>size:gr.sizeof_short</opt> + </option> + <option> + <name>Byte</name> + <key>byte</key> + <opt>size:gr.sizeof_char</opt> + </option> + </param> + <param> + <name>Destination IP Address</name> + <key>ipaddr</key> + <type>string</type> + </param> + <param> + <name>Destination Port</name> + <key>port</key> + <type>int</type> + </param> + <param> + <name>Nonblocking Mode</name> + <key>noblock</key> + <type>enum</type> + <option> + <name>On</name> + <key>True</key> + </option> + <option> + <name>Off</name> + <key>False</key> + </option> + </param> + <param> + <name>Vec Length</name> + <key>vlen</key> + <value>1</value> + <type>int</type> + </param> + <check>$vlen > 0</check> + <sink> + <name>in</name> + <type>$type</type> + <vlen>$vlen</vlen> + </sink> +</block> diff --git a/gr-blocks/include/gnuradio/blocks/CMakeLists.txt b/gr-blocks/include/gnuradio/blocks/CMakeLists.txt index 38c79d60f3..6b3eca69d3 100644 --- a/gr-blocks/include/gnuradio/blocks/CMakeLists.txt +++ b/gr-blocks/include/gnuradio/blocks/CMakeLists.txt @@ -174,6 +174,7 @@ install(FILES tagged_stream_multiply_length.h tagged_stream_to_pdu.h tags_strobe.h + tcp_server_sink.h test_tag_variable_rate_ff.h threshold_ff.h throttle.h diff --git a/gr-blocks/include/gnuradio/blocks/message_burst_source.h b/gr-blocks/include/gnuradio/blocks/message_burst_source.h index b5c068dcd4..ea2838c7a6 100644 --- a/gr-blocks/include/gnuradio/blocks/message_burst_source.h +++ b/gr-blocks/include/gnuradio/blocks/message_burst_source.h @@ -32,7 +32,7 @@ namespace gr { /*! * \brief Turn received messages into a stream and tag them for UHD to send. - * \ingroup message_tools_blk + * \ingroup deprecated_blk */ class BLOCKS_API message_burst_source : virtual public sync_block { diff --git a/gr-blocks/include/gnuradio/blocks/message_sink.h b/gr-blocks/include/gnuradio/blocks/message_sink.h index 541ad6eaa1..9b61bfa30b 100644 --- a/gr-blocks/include/gnuradio/blocks/message_sink.h +++ b/gr-blocks/include/gnuradio/blocks/message_sink.h @@ -32,7 +32,7 @@ namespace gr { /*! * \brief Gather received items into messages and insert into msgq - * \ingroup message_tools_blk + * \ingroup deprecated_blk */ class BLOCKS_API message_sink : virtual public sync_block { diff --git a/gr-blocks/include/gnuradio/blocks/message_source.h b/gr-blocks/include/gnuradio/blocks/message_source.h index d85c07cf2c..c249fc34d7 100644 --- a/gr-blocks/include/gnuradio/blocks/message_source.h +++ b/gr-blocks/include/gnuradio/blocks/message_source.h @@ -32,7 +32,7 @@ namespace gr { /*! * \brief Turn received messages into a stream - * \ingroup message_tools_blk + * \ingroup deprecated_blk */ class BLOCKS_API message_source : virtual public sync_block { diff --git a/gr-blocks/include/gnuradio/blocks/pdu_filter.h b/gr-blocks/include/gnuradio/blocks/pdu_filter.h index 1483731042..25dd185934 100644 --- a/gr-blocks/include/gnuradio/blocks/pdu_filter.h +++ b/gr-blocks/include/gnuradio/blocks/pdu_filter.h @@ -44,6 +44,9 @@ namespace gr { * \brief Construct a PDU filter */ static sptr make(pmt::pmt_t k, pmt::pmt_t v, bool invert = false); + virtual void set_key(pmt::pmt_t key) = 0; + virtual void set_val(pmt::pmt_t val) = 0; + virtual void set_inversion(bool invert) = 0; }; } /* namespace blocks */ diff --git a/gr-blocks/include/gnuradio/blocks/pdu_remove.h b/gr-blocks/include/gnuradio/blocks/pdu_remove.h index 9b8a087e95..f2ab35f7cf 100644 --- a/gr-blocks/include/gnuradio/blocks/pdu_remove.h +++ b/gr-blocks/include/gnuradio/blocks/pdu_remove.h @@ -44,6 +44,7 @@ namespace gr { * \brief Construct a PDU meta remove block */ static sptr make(pmt::pmt_t k); + virtual void set_key(pmt::pmt_t key) = 0; }; } /* namespace blocks */ diff --git a/gr-blocks/include/gnuradio/blocks/pdu_set.h b/gr-blocks/include/gnuradio/blocks/pdu_set.h index cfafc44bdd..ba96492b61 100644 --- a/gr-blocks/include/gnuradio/blocks/pdu_set.h +++ b/gr-blocks/include/gnuradio/blocks/pdu_set.h @@ -44,6 +44,8 @@ namespace gr { * \brief Construct a PDU meta set block */ static sptr make(pmt::pmt_t k, pmt::pmt_t v); + virtual void set_key(pmt::pmt_t key) = 0; + virtual void set_val(pmt::pmt_t val) = 0; }; } /* namespace blocks */ diff --git a/gr-blocks/include/gnuradio/blocks/tcp_server_sink.h b/gr-blocks/include/gnuradio/blocks/tcp_server_sink.h new file mode 100644 index 0000000000..6d951a8e67 --- /dev/null +++ b/gr-blocks/include/gnuradio/blocks/tcp_server_sink.h @@ -0,0 +1,66 @@ +/* -*- c++ -*- */ +/* + * Copyright 2014 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_BLOCKS_TCP_SERVER_SINK_H +#define INCLUDED_BLOCKS_TCP_SERVER_SINK_H + +#include <gnuradio/blocks/api.h> +#include <gnuradio/sync_block.h> + +namespace gr { + namespace blocks { + + /*! + * \brief Send stream trought an TCP socket. + * \ingroup networking_tools_blk + * + * \details + * Listen for incomming TCP connection(s). Duplicate data for each + * opened connection. Optionaly can wait until first client connects + * before streaming starts. + */ + class BLOCKS_API tcp_server_sink : virtual public gr::sync_block + { + public: + // gr::blocks::tcp_server_sink::sptr + typedef boost::shared_ptr<tcp_server_sink> sptr; + + /*! + * \brief TCP Server Sink Constructor + * + * \param itemsize The size (in bytes) of the item datatype + * \param host The name or IP address of interface to bind to. + * \param port Port where to listen. + * \param noblock If false, wait until first client connects before + * streaming starts. In non blocking mode + * (noblock=true), drop data onto floor if no client + * is connected. + */ + static sptr make(size_t itemsize, + const std::string &host, int port, + bool noblock = false); + }; + + } /* namespace blocks */ +} /* namespace gr */ + +#endif /* INCLUDED_BLOCKS_TCP_SERVER_SINK_H */ diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt index 643190c2ee..1d69f27a1d 100644 --- a/gr-blocks/lib/CMakeLists.txt +++ b/gr-blocks/lib/CMakeLists.txt @@ -199,6 +199,7 @@ list(APPEND gr_blocks_sources throttle_impl.cc transcendental_impl.cc tcp_connection.cc + tcp_server_sink_impl.cc tuntap_pdu_impl.cc tag_gate_impl.cc tagged_stream_align_impl.cc diff --git a/gr-blocks/lib/pdu_filter_impl.h b/gr-blocks/lib/pdu_filter_impl.h index 66440ee421..e54b50427c 100644 --- a/gr-blocks/lib/pdu_filter_impl.h +++ b/gr-blocks/lib/pdu_filter_impl.h @@ -38,6 +38,9 @@ namespace gr { public: pdu_filter_impl(pmt::pmt_t k, pmt::pmt_t v, bool invert); void handle_msg(pmt::pmt_t msg); + void set_key(pmt::pmt_t key) { d_k = key; }; + void set_val(pmt::pmt_t val) { d_v = val; }; + void set_inversion(bool invert) { d_invert = invert; }; }; } /* namespace blocks */ diff --git a/gr-blocks/lib/pdu_remove_impl.h b/gr-blocks/lib/pdu_remove_impl.h index 4492e4b6d9..6f1a7f1b90 100644 --- a/gr-blocks/lib/pdu_remove_impl.h +++ b/gr-blocks/lib/pdu_remove_impl.h @@ -36,6 +36,7 @@ namespace gr { public: pdu_remove_impl(pmt::pmt_t k); void handle_msg(pmt::pmt_t msg); + void set_key(pmt::pmt_t key) { d_k = key; }; }; } /* namespace blocks */ diff --git a/gr-blocks/lib/pdu_set_impl.h b/gr-blocks/lib/pdu_set_impl.h index b27315ef4d..3529195aaf 100644 --- a/gr-blocks/lib/pdu_set_impl.h +++ b/gr-blocks/lib/pdu_set_impl.h @@ -37,6 +37,8 @@ namespace gr { public: pdu_set_impl(pmt::pmt_t k, pmt::pmt_t v); void handle_msg(pmt::pmt_t msg); + void set_key(pmt::pmt_t key) { d_k = key; }; + void set_val(pmt::pmt_t val) { d_v = val; }; }; } /* namespace blocks */ diff --git a/gr-blocks/lib/tcp_server_sink_impl.cc b/gr-blocks/lib/tcp_server_sink_impl.cc new file mode 100644 index 0000000000..44f0765cb2 --- /dev/null +++ b/gr-blocks/lib/tcp_server_sink_impl.cc @@ -0,0 +1,161 @@ +/* -*- c++ -*- */ +/* + * Copyright 2007-2010,2013 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; 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 "tcp_server_sink_impl.h" +#include <gnuradio/io_signature.h> +#include <algorithm> +#include <boost/array.hpp> +#include <boost/asio.hpp> +#include <boost/format.hpp> +#include <gnuradio/thread/thread.h> +#include <stdexcept> +#include <stdio.h> +#include <string.h> + +namespace gr { + namespace blocks { + + tcp_server_sink::sptr + tcp_server_sink::make(size_t itemsize, + const std::string &host, int port, + bool noblock) + { + return gnuradio::get_initial_sptr + (new tcp_server_sink_impl(itemsize, host, port, noblock)); + } + + tcp_server_sink_impl::tcp_server_sink_impl(size_t itemsize, + const std::string &host, int port, + bool noblock) + : sync_block("tcp_server_sink", + io_signature::make(1, 1, itemsize), + io_signature::make(0, 0, 0)), + d_itemsize(itemsize), + d_acceptor(d_io_service), + d_buf(new uint8_t[BUF_SIZE]), + d_writing(0) + { + std::string s__port = (boost::format("%d") % port).str(); + std::string s__host = host.empty() ? std::string("localhost") : host; + boost::asio::ip::tcp::resolver resolver(d_io_service); + boost::asio::ip::tcp::resolver::query query(s__host, s__port, + boost::asio::ip::resolver_query_base::passive); + d_endpoint = *resolver.resolve(query); + + d_acceptor.open(d_endpoint.protocol()); + d_acceptor.set_option(boost::asio::ip::tcp::acceptor::reuse_address(true)); + d_acceptor.bind(d_endpoint); + d_acceptor.listen(); + + if (!noblock) { + d_socket.reset(new boost::asio::ip::tcp::socket(d_io_service)); + d_acceptor.accept(*d_socket, d_endpoint); + d_sockets.insert(d_socket.release()); + } + + d_socket.reset(new boost::asio::ip::tcp::socket(d_io_service)); + d_acceptor.async_accept(*d_socket, boost::bind(&tcp_server_sink_impl::do_accept, + this, boost::asio::placeholders::error)); + d_io_serv_thread = boost::thread( + boost::bind(&boost::asio::io_service::run, &d_io_service)); + } + + void + tcp_server_sink_impl::do_accept(const boost::system::error_code& error) + { + if (!error) { + gr::thread::scoped_lock guard(d_writing_mut); + d_sockets.insert(d_socket.release()); + d_socket.reset(new boost::asio::ip::tcp::socket(d_io_service)); + d_acceptor.async_accept(*d_socket, boost::bind(&tcp_server_sink_impl::do_accept, + this, boost::asio::placeholders::error)); + } + } + + void + tcp_server_sink_impl::do_write(const boost::system::error_code& error, + size_t len, std::set<boost::asio::ip::tcp::socket *>::iterator i) + { + { + gr::thread::scoped_lock guard(d_writing_mut); + --d_writing; + if (error) { + delete *i; + d_sockets.erase(i); + } + } + d_writing_cond.notify_one(); + } + + tcp_server_sink_impl::~tcp_server_sink_impl() + { + gr::thread::scoped_lock guard(d_writing_mut); + while (d_writing) { + d_writing_cond.wait(guard); + } + + for (std::set<boost::asio::ip::tcp::socket *>::iterator i = d_sockets.begin(); + i != d_sockets.end(); ++i ) { + delete *i; + } + d_sockets.clear(); + + d_io_service.reset(); + d_io_service.stop(); + d_io_serv_thread.join(); + } + + int + tcp_server_sink_impl::work (int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items) + { + const char *in = (const char *) input_items[0]; + + gr::thread::scoped_lock guard(d_writing_mut); + while (d_writing) { + d_writing_cond.wait(guard); + } + + size_t data_len = std::min(size_t(BUF_SIZE), noutput_items * d_itemsize); + data_len -= data_len % d_itemsize; + memcpy(d_buf.get(), in, data_len); + for (std::set<boost::asio::ip::tcp::socket *>::iterator i = d_sockets.begin(); + i != d_sockets.end(); ++i ) { + boost::asio::async_write(**i, boost::asio::buffer(d_buf.get(), data_len), + boost::bind(&tcp_server_sink_impl::do_write, this, + boost::asio::placeholders::error, + boost::asio::placeholders::bytes_transferred, + i)); + } + d_writing = d_sockets.size(); + + return data_len / d_itemsize; + } + + } /* namespace blocks */ +} /* namespace gr */ + diff --git a/gr-blocks/lib/tcp_server_sink_impl.h b/gr-blocks/lib/tcp_server_sink_impl.h new file mode 100644 index 0000000000..d10f3b95b8 --- /dev/null +++ b/gr-blocks/lib/tcp_server_sink_impl.h @@ -0,0 +1,73 @@ +/* -*- c++ -*- */ +/* + * Copyright 2014 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef INCLUDED_GR_TCP_SERVER_SINK_IMPL_H +#define INCLUDED_GR_TCP_SERVER_SINK_IMPL_H + +#include <gnuradio/blocks/tcp_server_sink.h> +#include <boost/asio.hpp> +#include <set> +#include <boost/ptr_container/ptr_vector.hpp> + +namespace gr { + namespace blocks { + + class tcp_server_sink_impl : public tcp_server_sink + { + private: + size_t d_itemsize; + + boost::asio::io_service d_io_service; + gr::thread::thread d_io_serv_thread; + boost::asio::ip::tcp::endpoint d_endpoint; + std::auto_ptr<boost::asio::ip::tcp::socket> d_socket; + std::set<boost::asio::ip::tcp::socket *> d_sockets; + boost::asio::ip::tcp::acceptor d_acceptor; + + boost::shared_ptr<uint8_t> d_buf; + enum { + BUF_SIZE = 256 * 1024, + }; + + int d_writing; + boost::condition_variable d_writing_cond; + boost::mutex d_writing_mut; + + void do_accept(const boost::system::error_code& error); + void do_write(const boost::system::error_code& error, std::size_t len, + std::set<boost::asio::ip::tcp::socket *>::iterator); + + public: + tcp_server_sink_impl(size_t itemsize, + const std::string &host, int port, + bool noblock); + ~tcp_server_sink_impl(); + + int work(int noutput_items, + gr_vector_const_void_star &input_items, + gr_vector_void_star &output_items); + }; + + } /* namespace blocks */ +} /* namespace gr */ + +#endif /* INCLUDED_GR_TCP_SERVER_SINK_IMPL_H */ diff --git a/gr-blocks/python/blocks/qa_tcp_server_sink.py b/gr-blocks/python/blocks/qa_tcp_server_sink.py new file mode 100644 index 0000000000..f7d3a0af92 --- /dev/null +++ b/gr-blocks/python/blocks/qa_tcp_server_sink.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# +# Copyright 2014 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio 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. +# +# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from gnuradio import gr, gr_unittest, blocks +import os +import socket +from time import sleep + +from threading import Timer +from multiprocessing import Process + +class test_tcp_sink(gr_unittest.TestCase): + + def setUp(self): + os.environ['GR_CONF_CONTROLPORT_ON'] = 'False' + self.tb_snd = gr.top_block() + self.tb_rcv = gr.top_block() + + def tearDown(self): + self.tb_rcv = None + self.tb_snd = None + + def _tcp_client(self): + dst = blocks.vector_sink_s() + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + for t in (0, 0.2): +# wait until server listens + sleep(t) + try: + sock.connect((self.addr, self.port)) + except socket.error as e: + if e.errno != 111: + raise + continue + break + fd = os.dup(sock.fileno()) + self.tb_rcv.connect(blocks.file_descriptor_source(self.itemsize, fd), dst) + self.tb_rcv.run() + self.assertEqual(self.data, dst.data()) + + def test_001(self): + self.addr = '127.0.0.1' + self.port = 65510 + self.itemsize = gr.sizeof_short + n_data = 16 + self.data = tuple([x for x in range(n_data)]) + +# tcp_server_sink blocks until client does not connect, start client process first + p = Process(target=self._tcp_client) + p.start() + + src = blocks.vector_source_s(self.data, False) + tcp_snd = blocks.tcp_server_sink(self.itemsize, self.addr, self.port, False) + self.tb_snd.connect(src, tcp_snd) + + self.tb_snd.run() + del tcp_snd + self.tb_snd = None + p.join() + + def stop_rcv(self): + self.timeout = True + self.tb_rcv.stop() + #print "tb_rcv stopped by Timer" + +if __name__ == '__main__': + gr_unittest.run(test_tcp_sink, "test_tcp_server_sink.xml") + diff --git a/gr-blocks/python/grc_gnuradio/blks2/error_rate.py b/gr-blocks/python/grc_gnuradio/blks2/error_rate.py index 9bf387030a..df03f551b3 100644 --- a/gr-blocks/python/grc_gnuradio/blks2/error_rate.py +++ b/gr-blocks/python/grc_gnuradio/blks2/error_rate.py @@ -75,6 +75,9 @@ class error_rate(gr.hier_block2): gr.io_signature(2, 2, gr.sizeof_char), gr.io_signature(1, 1, gr.sizeof_float), ) + + print "Warning: the blks2.error_rate is deprecated." + assert type in ('BER', 'SER') self._max_samples = win_size self._bits_per_symbol = bits_per_symbol diff --git a/gr-blocks/python/grc_gnuradio/blks2/selector.py b/gr-blocks/python/grc_gnuradio/blks2/selector.py index 24e3844658..0a74309688 100644 --- a/gr-blocks/python/grc_gnuradio/blks2/selector.py +++ b/gr-blocks/python/grc_gnuradio/blks2/selector.py @@ -40,6 +40,9 @@ class selector(gr.hier_block2): gr.io_signature(num_inputs, num_inputs, item_size), gr.io_signature(num_outputs, num_outputs, item_size), ) + + print "Warning: the blks2.selector block is deprecated." + #terminator blocks for unused inputs and outputs self.input_terminators = [blocks.null_sink(item_size) for i in range(num_inputs)] self.output_terminators = [blocks.head(item_size, 0) for i in range(num_outputs)] @@ -130,6 +133,8 @@ class valve(selector): else: output_index = 0 selector.__init__(self, item_size, 1, 1, 0, output_index) + print "Warning: the blks2.valve block is deprecated." + def set_open(self, open): """ Callback to set open state. diff --git a/gr-blocks/python/grc_gnuradio/blks2/tcp.py b/gr-blocks/python/grc_gnuradio/blks2/tcp.py index aee90fad2c..6ae24d3a7b 100644 --- a/gr-blocks/python/grc_gnuradio/blks2/tcp.py +++ b/gr-blocks/python/grc_gnuradio/blks2/tcp.py @@ -58,6 +58,8 @@ class tcp_source(gr.hier_block2): fd = _get_sock_fd(addr, port, server) self.connect(blocks.file_descriptor_source(itemsize, fd), self) + print "Warning: the blks2.tcp_source block is deprecated." + class tcp_sink(gr.hier_block2): def __init__(self, itemsize, addr, port, server=False): #init hier block @@ -68,3 +70,5 @@ class tcp_sink(gr.hier_block2): ) fd = _get_sock_fd(addr, port, server) self.connect(self, blocks.file_descriptor_sink(itemsize, fd)) + + print "Warning: the blks2.tcp_sink block is deprecated." diff --git a/gr-blocks/swig/blocks_swig5.i b/gr-blocks/swig/blocks_swig5.i index 51601a8c30..761b0a855a 100644 --- a/gr-blocks/swig/blocks_swig5.i +++ b/gr-blocks/swig/blocks_swig5.i @@ -56,6 +56,7 @@ #include "gnuradio/blocks/tagged_stream_multiply_length.h" #include "gnuradio/blocks/tagged_stream_to_pdu.h" #include "gnuradio/blocks/tags_strobe.h" +#include "gnuradio/blocks/tcp_server_sink.h" #include "gnuradio/blocks/test_tag_variable_rate_ff.h" #include "gnuradio/blocks/threshold_ff.h" #include "gnuradio/blocks/transcendental.h" @@ -100,6 +101,7 @@ %include "gnuradio/blocks/tagged_stream_multiply_length.h" %include "gnuradio/blocks/tagged_stream_to_pdu.h" %include "gnuradio/blocks/tags_strobe.h" +%include "gnuradio/blocks/tcp_server_sink.h" %include "gnuradio/blocks/test_tag_variable_rate_ff.h" %include "gnuradio/blocks/threshold_ff.h" %include "gnuradio/blocks/transcendental.h" @@ -143,6 +145,7 @@ GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_mux); GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_multiply_length); GR_SWIG_BLOCK_MAGIC2(blocks, tagged_stream_to_pdu); GR_SWIG_BLOCK_MAGIC2(blocks, tags_strobe); +GR_SWIG_BLOCK_MAGIC2(blocks, tcp_server_sink); GR_SWIG_BLOCK_MAGIC2(blocks, test_tag_variable_rate_ff); GR_SWIG_BLOCK_MAGIC2(blocks, threshold_ff); GR_SWIG_BLOCK_MAGIC2(blocks, transcendental); diff --git a/gr-digital/grc/digital_block_tree.xml b/gr-digital/grc/digital_block_tree.xml index 5e6e742868..f11f27e5c3 100644 --- a/gr-digital/grc/digital_block_tree.xml +++ b/gr-digital/grc/digital_block_tree.xml @@ -48,17 +48,11 @@ <cat> <name>Modulators</name> <block>digital_cpmmod_bc</block> - <block>digital_dxpsk_mod</block> - <block>digital_dxpsk_demod</block> <block>digital_gfsk_mod</block> <block>digital_gfsk_demod</block> <block>digital_gmskmod_bc</block> <block>digital_gmsk_mod</block> <block>digital_gmsk_demod</block> - <block>digital_psk_mod</block> - <block>digital_psk_demod</block> - <block>digital_qam_mod</block> - <block>digital_qam_demod</block> <block>digital_constellation_modulator</block> <block>digital_constellation_receiver_cb</block> <block>variable_constellation</block> @@ -126,7 +120,6 @@ <block>digital_pfb_clock_sync_xxx</block> <block>digital_pn_correlator_cc</block> <block>digital_corr_est_cc</block> - <block>digital_correlate_and_sync_cc</block> </cat> <cat> <name>Waveform Generators</name> diff --git a/gr-digital/grc/digital_correlate_and_sync_cc.xml b/gr-digital/grc/digital_correlate_and_sync_cc.xml index e684965c5d..fffdcd23d7 100644 --- a/gr-digital/grc/digital_correlate_and_sync_cc.xml +++ b/gr-digital/grc/digital_correlate_and_sync_cc.xml @@ -2,6 +2,7 @@ <block> <name>Correlate and Sync</name> <key>digital_correlate_and_sync_cc</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.correlate_and_sync_cc($symbols, $filter, $sps)</make> <param> diff --git a/gr-digital/grc/digital_dxpsk_demod.xml b/gr-digital/grc/digital_dxpsk_demod.xml index 5b26d5b8ec..12089ad771 100644 --- a/gr-digital/grc/digital_dxpsk_demod.xml +++ b/gr-digital/grc/digital_dxpsk_demod.xml @@ -29,6 +29,7 @@ <block> <name>DPSK Demod</name> <key>digital_dxpsk_demod</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.$(type)_demod( samples_per_symbol=$samples_per_symbol, diff --git a/gr-digital/grc/digital_dxpsk_mod.xml b/gr-digital/grc/digital_dxpsk_mod.xml index 02da10028e..4198b8805c 100644 --- a/gr-digital/grc/digital_dxpsk_mod.xml +++ b/gr-digital/grc/digital_dxpsk_mod.xml @@ -29,6 +29,7 @@ <block> <name>DPSK Mod</name> <key>digital_dxpsk_mod</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.$(type)_mod( samples_per_symbol=$samples_per_symbol, diff --git a/gr-digital/grc/digital_mpsk_receiver_cc.xml b/gr-digital/grc/digital_mpsk_receiver_cc.xml index a9b66b7a19..76f0ccd5ea 100644 --- a/gr-digital/grc/digital_mpsk_receiver_cc.xml +++ b/gr-digital/grc/digital_mpsk_receiver_cc.xml @@ -7,6 +7,7 @@ <block> <name>MPSK Receiver</name> <key>digital_mpsk_receiver_cc</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital;import cmath</import> <make>digital.mpsk_receiver_cc($M, $theta, $w, $fmin, $fmax, $mu, $gain_mu, $omega, $gain_omega, $omega_relative_limit)</make> <callback>set_loop_bandwidth($w)</callback> diff --git a/gr-digital/grc/digital_ofdm_demod.xml b/gr-digital/grc/digital_ofdm_demod.xml index 9f3a837157..1a7ce24e18 100644 --- a/gr-digital/grc/digital_ofdm_demod.xml +++ b/gr-digital/grc/digital_ofdm_demod.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Demod</name> <key>digital_ofdm_demod</key> + <category>[Core]/Deprecated</category> <import>from grc_gnuradio import blks2 as grc_blks2</import> <import>from gnuradio import digital</import> <make>grc_blks2.packet_demod_$(type.fcn)(digital.ofdm_demod( diff --git a/gr-digital/grc/digital_ofdm_frame_acquisition.xml b/gr-digital/grc/digital_ofdm_frame_acquisition.xml index 2545f18e66..f3fb8d63e4 100644 --- a/gr-digital/grc/digital_ofdm_frame_acquisition.xml +++ b/gr-digital/grc/digital_ofdm_frame_acquisition.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Frame Acquisition</name> <key>digital_ofdm_frame_acquisition</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.ofdm_frame_acquisition($occupied_carriers, $fft_length, $cplen, $known_symbol, $max_fft_shift_len)</make> <param> diff --git a/gr-digital/grc/digital_ofdm_frame_sink.xml b/gr-digital/grc/digital_ofdm_frame_sink.xml index 64c69ec0ad..b7cc47b97f 100644 --- a/gr-digital/grc/digital_ofdm_frame_sink.xml +++ b/gr-digital/grc/digital_ofdm_frame_sink.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Frame Sink</name> <key>digital_ofdm_frame_sink</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.ofdm_frame_sink($syms, $vals, $queue, $occ_tones, $ph_gain, $frq_gain)</make> <param> diff --git a/gr-digital/grc/digital_ofdm_insert_preamble.xml b/gr-digital/grc/digital_ofdm_insert_preamble.xml index 9ad8fa793b..593fdbd9b4 100644 --- a/gr-digital/grc/digital_ofdm_insert_preamble.xml +++ b/gr-digital/grc/digital_ofdm_insert_preamble.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Insert Preamble</name> <key>digital_ofdm_insert_preamble</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.ofdm_insert_preamble($fft_length, $preamble)</make> <param> diff --git a/gr-digital/grc/digital_ofdm_mod.xml b/gr-digital/grc/digital_ofdm_mod.xml index 24cb2aa33c..066f52f2a9 100644 --- a/gr-digital/grc/digital_ofdm_mod.xml +++ b/gr-digital/grc/digital_ofdm_mod.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Mod</name> <key>digital_ofdm_mod</key> + <category>[Core]/Deprecated</category> <import>from grc_gnuradio import blks2 as grc_blks2</import> <import>from gnuradio import digital</import> <make>grc_blks2.packet_mod_$(type.fcn)(digital.ofdm_mod( diff --git a/gr-digital/grc/digital_ofdm_sampler.xml b/gr-digital/grc/digital_ofdm_sampler.xml index f3d5c85f39..09a070562b 100644 --- a/gr-digital/grc/digital_ofdm_sampler.xml +++ b/gr-digital/grc/digital_ofdm_sampler.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Sampler</name> <key>digital_ofdm_sampler</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.ofdm_sampler($fft_length, $symbol_length, $timeout)</make> <param> diff --git a/gr-digital/grc/digital_ofdm_sync_pn.xml b/gr-digital/grc/digital_ofdm_sync_pn.xml index 7a05f394d4..819996cd07 100644 --- a/gr-digital/grc/digital_ofdm_sync_pn.xml +++ b/gr-digital/grc/digital_ofdm_sync_pn.xml @@ -28,6 +28,7 @@ <block> <name>OFDM Sync PN</name> <key>digital_ofdm_sync_pn</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.ofdm_sync_pn($fft_length, $cp_length, $logging)</make> <param> diff --git a/gr-digital/grc/digital_psk_demod.xml b/gr-digital/grc/digital_psk_demod.xml index 36e803ae73..02beed01ac 100644 --- a/gr-digital/grc/digital_psk_demod.xml +++ b/gr-digital/grc/digital_psk_demod.xml @@ -29,6 +29,7 @@ <block> <name>PSK Demod</name> <key>digital_psk_demod</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.psk.psk_demod( constellation_points=$constellation_points, diff --git a/gr-digital/grc/digital_psk_mod.xml b/gr-digital/grc/digital_psk_mod.xml index e7788842a8..43e60562ee 100644 --- a/gr-digital/grc/digital_psk_mod.xml +++ b/gr-digital/grc/digital_psk_mod.xml @@ -29,6 +29,7 @@ <block> <name>PSK Mod</name> <key>digital_psk_mod</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.psk.psk_mod( constellation_points=$constellation_points, diff --git a/gr-digital/grc/digital_qam_demod.xml b/gr-digital/grc/digital_qam_demod.xml index 21ccba856b..c9a6c6aa4b 100644 --- a/gr-digital/grc/digital_qam_demod.xml +++ b/gr-digital/grc/digital_qam_demod.xml @@ -29,6 +29,7 @@ <block> <name>QAM Demod</name> <key>digital_qam_demod</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.qam.qam_demod( constellation_points=$constellation_points, diff --git a/gr-digital/grc/digital_qam_mod.xml b/gr-digital/grc/digital_qam_mod.xml index 435ca7058e..5c3d5139d2 100644 --- a/gr-digital/grc/digital_qam_mod.xml +++ b/gr-digital/grc/digital_qam_mod.xml @@ -29,6 +29,7 @@ <block> <name>QAM Mod</name> <key>digital_qam_mod</key> + <category>[Core]/Deprecated</category> <import>from gnuradio import digital</import> <make>digital.qam.qam_mod( constellation_points=$constellation_points, diff --git a/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h b/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h index 704b86662a..c0a9b8c579 100644 --- a/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h +++ b/gr-digital/include/gnuradio/digital/correlate_and_sync_cc.h @@ -32,7 +32,7 @@ namespace gr { /*! * \brief Correlate to a preamble and send time/phase sync info - * \ingroup synchronizers_blk + * \ingroup deprecated_blk * * \details * Input: diff --git a/gr-digital/include/gnuradio/digital/mpsk_receiver_cc.h b/gr-digital/include/gnuradio/digital/mpsk_receiver_cc.h index 618d192771..0cb1a8ba7b 100644 --- a/gr-digital/include/gnuradio/digital/mpsk_receiver_cc.h +++ b/gr-digital/include/gnuradio/digital/mpsk_receiver_cc.h @@ -34,6 +34,7 @@ namespace gr { * \brief This block takes care of receiving M-PSK modulated * signals through phase, frequency, and symbol synchronization. * \ingroup synchronizers_blk + * \ingroup deprecated_blk * * \details * It performs carrier frequency and phase locking as well as diff --git a/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h b/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h index a398e18454..164070e8ca 100644 --- a/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h +++ b/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h @@ -34,6 +34,7 @@ namespace gr { * \brief take a vector of complex constellation points in from an * FFT and performs a correlation and equalization. * \ingroup ofdm_blk + * \ingroup deprecated_blk * * \details * This block takes the output of an FFT of a received OFDM symbol diff --git a/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h b/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h index 439e1ca135..52839b2acc 100644 --- a/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h +++ b/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h @@ -35,6 +35,7 @@ namespace gr { * 1's, packs them into packets, and sends to to a message queue * sink. * \ingroup ofdm_blk + * \ingroup deprecated_blk * * \details * NOTE: The mod input parameter simply chooses a pre-defined diff --git a/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h b/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h index a98e7cf814..c811c9c88a 100644 --- a/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h +++ b/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h @@ -33,6 +33,7 @@ namespace gr { * \brief insert "pre-modulated" preamble symbols before each payload. * \ingroup ofdm_blk * \ingroup synchronizers_blk + * \ingroup deprecated_blk * * \details * <pre> diff --git a/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h b/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h index cdd4a60bc2..392b7730a8 100644 --- a/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h +++ b/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h @@ -35,6 +35,7 @@ namespace gr { * constellation points suitable for IFFT input to be used in an * ofdm modulator. * \ingroup ofdm_blk + * \ingroup deprecated_blk * * \details * Abstract class must be subclassed with specific mapping. diff --git a/gr-digital/include/gnuradio/digital/ofdm_sampler.h b/gr-digital/include/gnuradio/digital/ofdm_sampler.h index 59bc36a7c2..da4410478b 100644 --- a/gr-digital/include/gnuradio/digital/ofdm_sampler.h +++ b/gr-digital/include/gnuradio/digital/ofdm_sampler.h @@ -32,6 +32,7 @@ namespace gr { /*! * \brief does the rest of the OFDM stuff * \ingroup ofdm_blk + * \ingroup deprecated_blk */ class DIGITAL_API ofdm_sampler : virtual public block { diff --git a/gr-digital/lib/mpsk_receiver_cc_impl.cc b/gr-digital/lib/mpsk_receiver_cc_impl.cc index d6c2ae6fa3..68aae2cd91 100644 --- a/gr-digital/lib/mpsk_receiver_cc_impl.cc +++ b/gr-digital/lib/mpsk_receiver_cc_impl.cc @@ -69,6 +69,8 @@ namespace gr { d_omega_rel(omega_rel), d_max_omega(0), d_min_omega(0), d_p_2T(0), d_p_1T(0), d_p_0T(0), d_c_2T(0), d_c_1T(0), d_c_0T(0) { + GR_LOG_WARN(d_logger, "The gr::digital::mpsk_receiver_cc block is deprecated."); + d_interp = new gr::filter::mmse_fir_interpolator_cc(); d_dl_idx = 0; diff --git a/gr-digital/lib/ofdm_frame_acquisition_impl.cc b/gr-digital/lib/ofdm_frame_acquisition_impl.cc index 2c2d6eff7a..02b587c1de 100644 --- a/gr-digital/lib/ofdm_frame_acquisition_impl.cc +++ b/gr-digital/lib/ofdm_frame_acquisition_impl.cc @@ -1,19 +1,19 @@ /* -*- c++ -*- */ /* * Copyright 2006-2008,2010,2011 Free Software Foundation, Inc. - * + * * This file is part of GNU Radio - * + * * GNU Radio 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. - * + * * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, @@ -32,14 +32,14 @@ namespace gr { namespace digital { - + #define VERBOSE 0 #define M_TWOPI (2*M_PI) #define MAX_NUM_SYMBOLS 1000 ofdm_frame_acquisition::sptr ofdm_frame_acquisition::make(unsigned int occupied_carriers, - unsigned int fft_length, + unsigned int fft_length, unsigned int cplen, const std::vector<gr_complex> &known_symbol, unsigned int max_fft_shift_len) @@ -50,7 +50,7 @@ namespace gr { } ofdm_frame_acquisition_impl::ofdm_frame_acquisition_impl(unsigned occupied_carriers, - unsigned int fft_length, + unsigned int fft_length, unsigned int cplen, const std::vector<gr_complex> &known_symbol, unsigned int max_fft_shift_len) @@ -65,6 +65,8 @@ namespace gr { d_coarse_freq(0), d_phase_count(0) { + GR_LOG_WARN(d_logger, "The gr::digital::ofdm_frame_acquisition block has been deprecated."); + d_symbol_phase_diff.resize(d_fft_length); d_known_phase_diff.resize(d_occupied_carriers); d_hestimate.resize(d_occupied_carriers); @@ -75,7 +77,7 @@ namespace gr { for(i = 0; i < d_known_symbol.size()-2; i+=2) { d_known_phase_diff[i] = norm(d_known_symbol[i] - d_known_symbol[i+2]); } - + d_phase_lut = new gr_complex[(2*d_freq_shift_len+1) * MAX_NUM_SYMBOLS]; for(i = 0; i <= 2*d_freq_shift_len; i++) { for(j = 0; j < MAX_NUM_SYMBOLS; j++) { @@ -112,7 +114,7 @@ namespace gr { ofdm_frame_acquisition_impl::correlate(const gr_complex *symbol, int zeros_on_left) { unsigned int i,j; - + std::fill(d_symbol_phase_diff.begin(), d_symbol_phase_diff.end(), 0); for(i = 0; i < d_fft_length-2; i++) { d_symbol_phase_diff[i] = norm(symbol[i] - symbol[i+2]); @@ -142,16 +144,16 @@ namespace gr { unsigned int i=0; // Set first tap of equalizer - d_hestimate[0] = d_known_symbol[0] / + d_hestimate[0] = d_known_symbol[0] / (coarse_freq_comp(d_coarse_freq,1)*symbol[zeros_on_left+d_coarse_freq]); // set every even tap based on known symbol // linearly interpolate between set carriers to set zero-filled carriers // FIXME: is this the best way to set this? for(i = 2; i < d_occupied_carriers; i+=2) { - d_hestimate[i] = d_known_symbol[i] / + d_hestimate[i] = d_known_symbol[i] / (coarse_freq_comp(d_coarse_freq,1)*(symbol[i+zeros_on_left+d_coarse_freq])); - d_hestimate[i-1] = (d_hestimate[i] + d_hestimate[i-2]) / gr_complex(2.0, 0.0); + d_hestimate[i-1] = (d_hestimate[i] + d_hestimate[i-2]) / gr_complex(2.0, 0.0); } // with even number of carriers; last equalizer tap is wrong @@ -164,7 +166,7 @@ namespace gr { for(i = 0; i < d_occupied_carriers; i++) { gr_complex sym = coarse_freq_comp(d_coarse_freq,1)*symbol[i+zeros_on_left+d_coarse_freq]; gr_complex output = sym * d_hestimate[i]; - fprintf(stderr, "sym: %+.4f + j%+.4f ks: %+.4f + j%+.4f eq: %+.4f + j%+.4f ==> %+.4f + j%+.4f\n", + fprintf(stderr, "sym: %+.4f + j%+.4f ks: %+.4f + j%+.4f eq: %+.4f + j%+.4f ==> %+.4f + j%+.4f\n", sym .real(), sym.imag(), d_known_symbol[i].real(), d_known_symbol[i].imag(), d_hestimate[i].real(), d_hestimate[i].imag(), @@ -185,7 +187,7 @@ namespace gr { gr_complex *out = (gr_complex *) output_items[0]; char *signal_out = (char *) output_items[1]; - + int unoccupied_carriers = d_fft_length - d_occupied_carriers; int zeros_on_left = (int)ceil(unoccupied_carriers/2.0); @@ -203,7 +205,7 @@ namespace gr { out[i] = d_hestimate[i]*coarse_freq_comp(d_coarse_freq,d_phase_count) *symbol[i+zeros_on_left+d_coarse_freq]; } - + d_phase_count++; if(d_phase_count == MAX_NUM_SYMBOLS) { d_phase_count = 1; diff --git a/gr-digital/lib/ofdm_frame_sink_impl.cc b/gr-digital/lib/ofdm_frame_sink_impl.cc index b2e4f44ec9..2493667255 100644 --- a/gr-digital/lib/ofdm_frame_sink_impl.cc +++ b/gr-digital/lib/ofdm_frame_sink_impl.cc @@ -1,19 +1,19 @@ /* -*- c++ -*- */ /* * Copyright 2007,2008,2010-2012 Free Software Foundation, Inc. - * + * * This file is part of GNU Radio - * + * * GNU Radio 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. - * + * * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, @@ -47,7 +47,7 @@ namespace gr { d_state = STATE_SYNC_SEARCH; } - + inline void ofdm_frame_sink_impl::enter_have_sync() { @@ -82,7 +82,7 @@ namespace gr { d_packetlen_cnt = 0; if(VERBOSE) - fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", + fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", d_packetlen, d_packet_whitener_offset); } @@ -93,7 +93,7 @@ namespace gr { unsigned int min_index = 0; float min_euclid_dist = norm(x - d_sym_position[0]); float euclid_dist = 0; - + for(unsigned int j = 1; j < table_size; j++){ euclid_dist = norm(x - d_sym_position[j]); if(euclid_dist < min_euclid_dist){ @@ -121,26 +121,26 @@ namespace gr { d_nresid = 0; d_resid = 0; } - + //while((d_byte_offset < 8) && (i < d_occupied_carriers)) { while((d_byte_offset < 8) && (i < d_subcarrier_map.size())) { //gr_complex sigrot = in[i]*carrier*d_dfe[i]; gr_complex sigrot = in[d_subcarrier_map[i]]*carrier*d_dfe[i]; - + if(d_derotated_output != NULL){ d_derotated_output[i] = sigrot; } - + char bits = slicer(sigrot); gr_complex closest_sym = d_sym_position[bits]; - + accum_error += sigrot * conj(closest_sym); // FIX THE FOLLOWING STATEMENT if(norm(sigrot)> 0.001) d_dfe[i] += d_eq_gain*(closest_sym/sigrot-d_dfe[i]); - + i++; if((8 - d_byte_offset) >= d_nbits) { @@ -154,7 +154,7 @@ namespace gr { d_resid = bits >> (8-d_byte_offset); d_byte_offset += (d_nbits - d_nresid); } - //printf("demod symbol: %.4f + j%.4f bits: %x partial_byte: %x byte_offset: %d resid: %x nresid: %d\n", + //printf("demod symbol: %.4f + j%.4f bits: %x partial_byte: %x byte_offset: %d resid: %x nresid: %d\n", // in[i-1].real(), in[i-1].imag(), bits, d_partial_byte, d_byte_offset, d_resid, d_nresid); } @@ -175,16 +175,16 @@ namespace gr { d_phase -= 2*M_PI; if(d_phase <0) d_phase += 2*M_PI; - + //if(VERBOSE) // std::cerr << angle << "\t" << d_freq << "\t" << d_phase << "\t" << std::endl; - + return bytes_produced; } ofdm_frame_sink::sptr - ofdm_frame_sink::make(const std::vector<gr_complex> &sym_position, + ofdm_frame_sink::make(const std::vector<gr_complex> &sym_position, const std::vector<char> &sym_value_out, msg_queue::sptr target_queue, int occupied_carriers, @@ -196,7 +196,7 @@ namespace gr { phase_gain, freq_gain)); } - ofdm_frame_sink_impl::ofdm_frame_sink_impl(const std::vector<gr_complex> &sym_position, + ofdm_frame_sink_impl::ofdm_frame_sink_impl(const std::vector<gr_complex> &sym_position, const std::vector<char> &sym_value_out, msg_queue::sptr target_queue, int occupied_carriers, @@ -204,22 +204,24 @@ namespace gr { : sync_block("ofdm_frame_sink", io_signature::make2(2, 2, sizeof(gr_complex)*occupied_carriers, sizeof(char)), io_signature::make(1, 1, sizeof(gr_complex)*occupied_carriers)), - d_target_queue(target_queue), d_occupied_carriers(occupied_carriers), + d_target_queue(target_queue), d_occupied_carriers(occupied_carriers), d_byte_offset(0), d_partial_byte(0), d_resid(0), d_nresid(0),d_phase(0),d_freq(0), d_phase_gain(phase_gain),d_freq_gain(freq_gain), d_eq_gain(0.05) { + GR_LOG_WARN(d_logger, "The gr::digital::ofdm_frame_sync block has been deprecated."); + std::string carriers = "FE7F"; // A bit hacky to fill out carriers to occupied_carriers length - int diff = (d_occupied_carriers - 4*carriers.length()); + int diff = (d_occupied_carriers - 4*carriers.length()); while(diff > 7) { carriers.insert(0, "f"); carriers.insert(carriers.length(), "f"); diff -= 8; } - + // if there's extras left to be processed // divide remaining to put on either side of current map // all of this is done to stick with the concept of a carrier map string that @@ -229,7 +231,7 @@ namespace gr { int diff_right=0; // dictionary to convert from integers to ascii hex representation - char abc[16] = {'0', '1', '2', '3', '4', '5', '6', '7', + char abc[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; if(diff > 0) { char c[2] = {0,0}; @@ -237,7 +239,7 @@ namespace gr { diff_left = (int)ceil((float)diff/2.0f); // number of carriers to put on the left side c[0] = abc[(1 << diff_left) - 1]; // convert to bits and move to ASCI integer carriers.insert(0, c); - + diff_right = diff - diff_left; // number of carriers to put on the right side c[0] = abc[0xF^((1 << diff_right) - 1)]; // convert to bits and move to ASCI integer carriers.insert(carriers.length(), c); @@ -258,7 +260,7 @@ namespace gr { } } } - + // make sure we stay in the limit currently imposed by the occupied_carriers if(d_subcarrier_map.size() > (size_t)d_occupied_carriers) { throw std::invalid_argument("ofdm_frame_sink_impl: subcarriers allocated exceeds size of occupied carriers"); @@ -269,7 +271,7 @@ namespace gr { fill(d_dfe.begin(), d_dfe.end(), gr_complex(1.0,0.0)); set_sym_value_out(sym_position, sym_value_out); - + enter_search(); } @@ -279,7 +281,7 @@ namespace gr { } bool - ofdm_frame_sink_impl::set_sym_value_out(const std::vector<gr_complex> &sym_position, + ofdm_frame_sink_impl::set_sym_value_out(const std::vector<gr_complex> &sym_position, const std::vector<char> &sym_value_out) { if(sym_position.size() != sym_value_out.size()) @@ -310,7 +312,7 @@ namespace gr { d_derotated_output = (gr_complex *)output_items[0]; else d_derotated_output = NULL; - + if(VERBOSE) fprintf(stderr,">>> Entering state machine\n"); @@ -318,17 +320,17 @@ namespace gr { case STATE_SYNC_SEARCH: // Look for flag indicating beginning of pkt if(VERBOSE) fprintf(stderr,"SYNC Search, noutput=%d\n", noutput_items); - + if(sig[0]) { // Found it, set up for header decode enter_have_sync(); } break; case STATE_HAVE_SYNC: - // only demod after getting the preamble signal; otherwise, the + // only demod after getting the preamble signal; otherwise, the // equalizer taps will screw with the PLL performance bytes = demapper(&in[0], d_bytes_out); - + if(VERBOSE) { if(sig[0]) printf("ERROR -- Found SYNC in HAVE_SYNC\n"); @@ -340,29 +342,29 @@ namespace gr { while(j < bytes) { d_header = (d_header << 8) | (d_bytes_out[j] & 0xFF); j++; - + if(++d_headerbytelen_cnt == HEADERBYTELEN) { if(VERBOSE) fprintf(stderr, "got header: 0x%08x\n", d_header); - + // we have a full header, check to see if it has been received properly if(header_ok()) { enter_have_header(); - + if(VERBOSE) printf("\nPacket Length: %d\n", d_packetlen); - + while((j < bytes) && (d_packetlen_cnt < d_packetlen)) { d_packet[d_packetlen_cnt++] = d_bytes_out[j++]; } - + if(d_packetlen_cnt == d_packetlen) { message::sptr msg = message::make(0, d_packet_whitener_offset, 0, d_packetlen); memcpy(msg->msg(), d_packet, d_packetlen_cnt); d_target_queue->insert_tail(msg); // send it msg.reset(); // free it up - + enter_search(); } } @@ -372,7 +374,7 @@ namespace gr { } } break; - + case STATE_HAVE_HEADER: bytes = demapper(&in[0], d_bytes_out); @@ -381,27 +383,27 @@ namespace gr { printf("ERROR -- Found SYNC in HAVE_HEADER at %d, length of %d\n", d_packetlen_cnt, d_packetlen); fprintf(stderr,"Packet Build\n"); } - + j = 0; while(j < bytes) { d_packet[d_packetlen_cnt++] = d_bytes_out[j++]; - + if (d_packetlen_cnt == d_packetlen){ // packet is filled // build a message // NOTE: passing header field as arg1 is not scalable message::sptr msg = message::make(0, d_packet_whitener_offset, 0, d_packetlen_cnt); memcpy(msg->msg(), d_packet, d_packetlen_cnt); - + d_target_queue->insert_tail(msg); // send it msg.reset(); // free it up - + enter_search(); break; } } break; - + default: assert(0); } // switch diff --git a/gr-digital/lib/ofdm_insert_preamble_impl.cc b/gr-digital/lib/ofdm_insert_preamble_impl.cc index dcc3a900a4..4a617cecb2 100644 --- a/gr-digital/lib/ofdm_insert_preamble_impl.cc +++ b/gr-digital/lib/ofdm_insert_preamble_impl.cc @@ -1,19 +1,19 @@ /* -*- c++ -*- */ /* * Copyright 2007,2010-2012 Free Software Foundation, Inc. - * + * * This file is part of GNU Radio - * + * * GNU Radio 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. - * + * * GNU Radio 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; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. @@ -31,7 +31,7 @@ namespace gr { namespace digital { - + ofdm_insert_preamble::sptr ofdm_insert_preamble::make(int fft_length, const std::vector<std::vector<gr_complex> > &preamble) @@ -55,6 +55,8 @@ namespace gr { d_pending_flag(0), d_preamble(preamble) { + GR_LOG_WARN(d_logger, "The gr::digital::ofdm_insert_preamble block has been deprecated."); + // sanity check preamble symbols for(size_t i = 0; i < d_preamble.size(); i++) { if(d_preamble[i].size() != (size_t) d_fft_length) @@ -113,7 +115,7 @@ namespace gr { else ni++; // eat one input symbol break; - + case ST_PREAMBLE: assert(!in_flag || in_flag[ni] & 0x1); if(d_nsymbols_output >= (int) d_preamble.size()) { @@ -130,7 +132,7 @@ namespace gr { d_nsymbols_output++; } break; - + case ST_FIRST_PAYLOAD: // copy first payload symbol from input to output memcpy(&out_sym[no * d_fft_length], @@ -142,7 +144,7 @@ namespace gr { ni++; enter_payload(); break; - + case ST_PAYLOAD: if(in_flag && in_flag[ni] & 0x1) { // this is first symbol of a new payload enter_preamble(); diff --git a/gr-digital/lib/ofdm_mapper_bcv_impl.cc b/gr-digital/lib/ofdm_mapper_bcv_impl.cc index b241a3be71..c763d2f71b 100644 --- a/gr-digital/lib/ofdm_mapper_bcv_impl.cc +++ b/gr-digital/lib/ofdm_mapper_bcv_impl.cc @@ -1,19 +1,19 @@ /* -*- c++ -*- */ /* * Copyright 2006-2008,2010-2012 Free Software Foundation, Inc. - * + * * This file is part of GNU Radio - * + * * GNU Radio 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. - * + * * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, @@ -34,19 +34,19 @@ namespace gr { ofdm_mapper_bcv::sptr ofdm_mapper_bcv::make(const std::vector<gr_complex> &constellation, - unsigned int msgq_limit, + unsigned int msgq_limit, unsigned int occupied_carriers, unsigned int fft_length) { return gnuradio::get_initial_sptr - (new ofdm_mapper_bcv_impl(constellation, msgq_limit, + (new ofdm_mapper_bcv_impl(constellation, msgq_limit, occupied_carriers, fft_length)); } // Consumes 1 packet and produces as many OFDM symbols of // fft_length to hold the full packet ofdm_mapper_bcv_impl::ofdm_mapper_bcv_impl(const std::vector<gr_complex> &constellation, - unsigned int msgq_limit, + unsigned int msgq_limit, unsigned int occupied_carriers, unsigned int fft_length) : sync_block("ofdm_mapper_bcv", @@ -61,6 +61,8 @@ namespace gr { d_resid(0), d_nresid(0) { + GR_LOG_WARN(d_logger, "The gr::digital::ofdm_mapper_bcv block has been deprecated."); + if(!(d_occupied_carriers <= d_fft_length)) throw std::invalid_argument("ofdm_mapper_bcv_impl: occupied carriers must be <= fft_length"); @@ -72,7 +74,7 @@ namespace gr { std::string carriers = "FE7F"; // A bit hacky to fill out carriers to occupied_carriers length - int diff = (d_occupied_carriers - 4*carriers.length()); + int diff = (d_occupied_carriers - 4*carriers.length()); while(diff > 7) { carriers.insert(0, "f"); carriers.insert(carriers.length(), "f"); @@ -88,7 +90,7 @@ namespace gr { int diff_right=0; // dictionary to convert from integers to ascii hex representation - char abc[16] = {'0', '1', '2', '3', '4', '5', '6', '7', + char abc[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; if(diff > 0) { char c[2] = {0,0}; @@ -96,23 +98,23 @@ namespace gr { diff_left = (int)ceil((float)diff/2.0f); // number of carriers to put on the left side c[0] = abc[(1 << diff_left) - 1]; // convert to bits and move to ASCI integer carriers.insert(0, c); - + diff_right = diff - diff_left; // number of carriers to put on the right side c[0] = abc[0xF^((1 << diff_right) - 1)]; // convert to bits and move to ASCI integer carriers.insert(carriers.length(), c); } - + // find out how many zeros to pad on the sides; the difference between the fft length and the subcarrier - // mapping size in chunks of four. This is the number to pack on the left and this number plus any - // residual nulls (if odd) will be packed on the right. - diff = (d_fft_length/4 - carriers.length())/2; + // mapping size in chunks of four. This is the number to pack on the left and this number plus any + // residual nulls (if odd) will be packed on the right. + diff = (d_fft_length/4 - carriers.length())/2; unsigned int i,j,k; for(i = 0; i < carriers.length(); i++) { char c = carriers[i]; // get the current hex character from the string for(j = 0; j < 4; j++) { // walk through all four bits k = (strtol(&c, NULL, 16) >> (3-j)) & 0x1; // convert to int and extract next bit - if(k) { // if bit is a 1, + if(k) { // if bit is a 1, d_subcarrier_map.push_back(4*(i+diff) + j); // use this subcarrier } } @@ -122,7 +124,7 @@ namespace gr { if(d_subcarrier_map.size() > d_occupied_carriers) { throw std::invalid_argument("ofdm_mapper_bcv_impl: subcarriers allocated exceeds size of occupied carriers"); } - + d_nbits = (unsigned long)ceil(log10(float(d_constellation.size())) / log10(2.0)); } @@ -141,7 +143,7 @@ namespace gr { gr_vector_void_star &output_items) { gr_complex *out = (gr_complex *)output_items[0]; - + unsigned int i=0; //printf("OFDM BPSK Mapper: ninput_items: %d noutput_items: %d\n", ninput_items[0], noutput_items); @@ -149,13 +151,13 @@ namespace gr { if(d_eof) { return -1; } - + if(!d_msg) { d_msg = d_msgq->delete_head(); // block, waiting for a message d_msg_offset = 0; d_bit_offset = 0; d_pending_flag = 1; // new packet, write start of packet flag - + if((d_msg->length() == 0) && (d_msg->type() == 1)) { d_msg.reset(); return -1; // We're done; no more messages coming. @@ -165,12 +167,12 @@ namespace gr { char *out_flag = 0; if(output_items.size() == 2) out_flag = (char *) output_items[1]; - + // Build a single symbol: // Initialize all bins to 0 to set unused carriers memset(out, 0, d_fft_length*sizeof(gr_complex)); - + i = 0; unsigned char bits = 0; //while((d_msg_offset < d_msg->length()) && (i < d_occupied_carriers)) { @@ -193,7 +195,7 @@ namespace gr { d_bit_offset += d_nresid; d_nresid = 0; d_resid = 0; - //printf("mod bit(r): %x resid: %x nresid: %d bit_offset: %d\n", + //printf("mod bit(r): %x resid: %x nresid: %d bit_offset: %d\n", // bits, d_resid, d_nresid, d_bit_offset); } else { @@ -201,11 +203,11 @@ namespace gr { // take the nbits number of bits at a time from the byte to add to the symbol bits = ((1 << d_nbits)-1) & (d_msgbytes >> d_bit_offset); d_bit_offset += d_nbits; - + out[d_subcarrier_map[i]] = d_constellation[bits]; i++; } - else { // if we can't fit nbits, store them for the next + else { // if we can't fit nbits, store them for the next // saves d_nresid bits of this message where d_nresid < d_nbits unsigned int extra = 8-d_bit_offset; d_resid = ((1 << extra)-1) & (d_msgbytes >> d_bit_offset); @@ -213,7 +215,7 @@ namespace gr { d_nresid = d_nbits - extra; } } - + if(d_bit_offset == 8) { d_bit_offset = 0; d_msg_offset++; diff --git a/gr-digital/lib/ofdm_sampler_impl.cc b/gr-digital/lib/ofdm_sampler_impl.cc index dd6197dfc7..01fa24d9a9 100644 --- a/gr-digital/lib/ofdm_sampler_impl.cc +++ b/gr-digital/lib/ofdm_sampler_impl.cc @@ -1,19 +1,19 @@ /* -*- c++ -*- */ /* * Copyright 2007,2008,2010-2012 Free Software Foundation, Inc. - * + * * This file is part of GNU Radio - * + * * GNU Radio 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. - * + * * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, @@ -31,9 +31,9 @@ namespace gr { namespace digital { - + ofdm_sampler::sptr - ofdm_sampler::make(unsigned int fft_length, + ofdm_sampler::make(unsigned int fft_length, unsigned int symbol_length, unsigned int timeout) { @@ -41,7 +41,7 @@ namespace gr { (new ofdm_sampler_impl(fft_length, symbol_length, timeout)); } - ofdm_sampler_impl::ofdm_sampler_impl(unsigned int fft_length, + ofdm_sampler_impl::ofdm_sampler_impl(unsigned int fft_length, unsigned int symbol_length, unsigned int timeout) : block("ofdm_sampler", @@ -50,6 +50,8 @@ namespace gr { d_state(STATE_NO_SIG), d_timeout_max(timeout), d_fft_length(fft_length), d_symbol_length(symbol_length) { + GR_LOG_WARN(d_logger, "The gr::digital::ofdm_sampler block has been deprecated."); + set_relative_rate(1.0/(double) fft_length); // buffer allocator hint } @@ -80,7 +82,7 @@ namespace gr { gr_complex *optr = (gr_complex*)output_items[0]; char *outsig = (char*)output_items[1]; - //FIXME: we only process a single OFDM symbol at a time; after the preamble, we can + //FIXME: we only process a single OFDM symbol at a time; after the preamble, we can // process a few at a time as long as we always look out for the next preamble. unsigned int index = d_fft_length; // start one fft length into the input so we can always look back this far @@ -96,7 +98,7 @@ namespace gr { else index++; } - + unsigned int i, pos, ret; switch(d_state) { case(STATE_PREAMBLE): @@ -104,13 +106,13 @@ namespace gr { for(i = (index - d_fft_length + 1); i <= index; i++) { *optr++ = iptr[i]; } - + d_timeout = d_timeout_max; // tell the system to expect at least this many symbols for a frame d_state = STATE_FRAME; consume_each(index - d_fft_length + 1); // consume up to one fft_length away to keep the history ret = 1; break; - + case(STATE_FRAME): // use this state when we have processed a preamble and are getting the rest of the frames //FIXME: we could also have a power squelch system here to enter STATE_NO_SIG if no power is received diff --git a/gr-digital/python/grc_gnuradio/blks2/packet.py b/gr-digital/python/grc_gnuradio/blks2/packet.py index ef79afde64..dc06544c19 100644 --- a/gr-digital/python/grc_gnuradio/blks2/packet.py +++ b/gr-digital/python/grc_gnuradio/blks2/packet.py @@ -107,6 +107,8 @@ class packet_encoder(gr.hier_block2): #connect self.connect(msg_source, self) + print "Warning: the blks2.packet_encoder block is deprecated." + def send_pkt(self, payload): """ Wrap the payload in a packet and push onto the message queue. @@ -184,6 +186,8 @@ class packet_decoder(gr.hier_block2): #start thread _packet_decoder_thread(msgq, callback) + print "Warning: the blks2.packet_decoder block is deprecated." + ################################################## ## Packet Mod for OFDM Mod and Packet Encoder ################################################## diff --git a/gr-digital/swig/CMakeLists.txt b/gr-digital/swig/CMakeLists.txt index 2f00dc14a3..fb13d3e402 100644 --- a/gr-digital/swig/CMakeLists.txt +++ b/gr-digital/swig/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2011,2012 Free Software Foundation, Inc. +# Copyright 2011-2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -24,47 +24,72 @@ include(GrPython) include(GrSwig) set(GR_SWIG_INCLUDE_DIRS - ${GR_DIGITAL_INCLUDE_DIRS} - ${GR_BLOCKS_INCLUDE_DIRS} - ${GR_ANALOG_INCLUDE_DIRS} - ${GR_FFT_INCLUDE_DIRS} - ${GR_FILTER_INCLUDE_DIRS} - ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} - ${VOLK_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} + ${GR_DIGITAL_INCLUDE_DIRS} + ${GR_BLOCKS_INCLUDE_DIRS} + ${GR_ANALOG_INCLUDE_DIRS} + ${GR_FFT_INCLUDE_DIRS} + ${GR_FILTER_INCLUDE_DIRS} + ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} + ${VOLK_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} ) if(ENABLE_GR_CTRLPORT) list(APPEND GR_SWIG_FLAGS "-DGR_CTRLPORT") endif(ENABLE_GR_CTRLPORT) -# Setup swig docs to depend on includes and pull in from build directory -set(GR_SWIG_TARGET_DEPS digital_generated_includes) -set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/digital_swig_doc.i) -set(GR_SWIG_DOC_DIRS +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/digital_swig.py.in + ${CMAKE_CURRENT_BINARY_DIR}/digital_swig.py +@ONLY) + +# We split up the swig files into multiple sections to minimize the +# memory overhead. If a .i file grows too large, create a new file +# named 'digital_swigN.i' and add it to this list. +# +# Also add the line "from swig_blocksN import *" line to +# digital_swig.py.in. +set(GR_SWIG_BLOCK_IFILES + digital_swig0 + digital_swig1 + digital_swig2 +) + +foreach(swigfile ${GR_SWIG_BLOCK_IFILES}) + set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/${swigfile}_doc.i) + set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/digital ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/digital -) -set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc) + ) + set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc) + set(GR_SWIG_TARGET_DEPS digital_generated_includes) + set(GR_SWIG_LIBRARIES gnuradio-digital + gnuradio-filter gnuradio-analog gnuradio-blocks) + GR_SWIG_MAKE(${swigfile} ${swigfile}.i) -set(GR_SWIG_LIBRARIES gnuradio-digital - gnuradio-filter gnuradio-analog gnuradio-blocks) + GR_SWIG_INSTALL( + TARGETS ${swigfile} + DESTINATION ${GR_PYTHON_DIR}/gnuradio/digital + COMPONENT "digital_python") -GR_SWIG_MAKE(digital_swig digital_swig.i) + list(APPEND SWIGFILES ${swigfile}.i) + list(APPEND SWIGDOCFILES ${CMAKE_CURRENT_BINARY_DIR}/${swigfile}_doc.i) +endforeach(swigfile) -GR_SWIG_INSTALL( - TARGETS digital_swig - DESTINATION ${GR_PYTHON_DIR}/gnuradio/digital - COMPONENT "digital_python" +install( + FILES + ${SWIGFILES} + constellation.i + ofdm_equalizer.i + packet_header.i + ${SWIGDOCFILES} + DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig + COMPONENT "digital_swig" ) -install( - FILES - digital_swig.i - constellation.i - ofdm_equalizer.i - packet_header.i - ${CMAKE_CURRENT_BINARY_DIR}/digital_swig_doc.i - DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig - COMPONENT "digital_swig" +# Install the Python file that pulls in the swig built files. +GR_PYTHON_INSTALL( + FILES ${CMAKE_CURRENT_BINARY_DIR}/digital_swig.py + DESTINATION ${GR_PYTHON_DIR}/gnuradio/digital + COMPONENT "digital_python" ) diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i deleted file mode 100644 index 8a38d65b82..0000000000 --- a/gr-digital/swig/digital_swig.i +++ /dev/null @@ -1,288 +0,0 @@ -/* - * Copyright 2011-2016 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio 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. - * - * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#define DIGITAL_API -#define ANALOG_API -#define BLOCKS_API - -%include "gnuradio.i" -%include "stdint.i" - -//load generated python docstrings -%include "digital_swig_doc.i" - -%include "gnuradio/analog/cpm.h" - -%{ -#include <gnuradio/blocks/control_loop.h> -%} -%include <gnuradio/blocks/control_loop.h> - -%{ -#include "gnuradio/digital/additive_scrambler_bb.h" -#include "gnuradio/digital/binary_slicer_fb.h" -#include "gnuradio/digital/burst_shaper_cc.h" -#include "gnuradio/digital/burst_shaper_ff.h" -#include "gnuradio/digital/chunks_to_symbols_bc.h" -#include "gnuradio/digital/chunks_to_symbols_bf.h" -#include "gnuradio/digital/chunks_to_symbols_ic.h" -#include "gnuradio/digital/chunks_to_symbols_if.h" -#include "gnuradio/digital/chunks_to_symbols_sc.h" -#include "gnuradio/digital/chunks_to_symbols_sf.h" -#include "gnuradio/digital/clock_recovery_mm_cc.h" -#include "gnuradio/digital/clock_recovery_mm_ff.h" -#include "gnuradio/digital/cma_equalizer_cc.h" -#include "gnuradio/digital/constellation.h" -#include "gnuradio/digital/constellation_decoder_cb.h" -#include "gnuradio/digital/constellation_receiver_cb.h" -#include "gnuradio/digital/constellation_soft_decoder_cf.h" -#include "gnuradio/digital/corr_est_cc.h" -#include "gnuradio/digital/correlate_access_code_bb.h" -#include "gnuradio/digital/correlate_access_code_tag_bb.h" -#include "gnuradio/digital/correlate_access_code_bb_ts.h" -#include "gnuradio/digital/correlate_access_code_ff_ts.h" -#include "gnuradio/digital/correlate_and_sync_cc.h" -#include "gnuradio/digital/costas_loop_cc.h" -#include "gnuradio/digital/cpmmod_bc.h" -#include "gnuradio/digital/crc32.h" -#include "gnuradio/digital/crc32_bb.h" -#include "gnuradio/digital/crc32_async_bb.h" -#include "gnuradio/digital/descrambler_bb.h" -#include "gnuradio/digital/diff_decoder_bb.h" -#include "gnuradio/digital/diff_encoder_bb.h" -#include "gnuradio/digital/diff_phasor_cc.h" -#include "gnuradio/digital/fll_band_edge_cc.h" -#include "gnuradio/digital/framer_sink_1.h" -#include "gnuradio/digital/glfsr_source_b.h" -#include "gnuradio/digital/glfsr_source_f.h" -#include "gnuradio/digital/hdlc_deframer_bp.h" -#include "gnuradio/digital/hdlc_framer_pb.h" -#include "gnuradio/digital/header_payload_demux.h" -#include "gnuradio/digital/kurtotic_equalizer_cc.h" -#include "gnuradio/digital/lfsr.h" -#include "gnuradio/digital/lms_dd_equalizer_cc.h" -#include "gnuradio/digital/map_bb.h" -#include "gnuradio/digital/metric_type.h" -#include "gnuradio/digital/modulate_vector.h" -#include "gnuradio/digital/mpsk_receiver_cc.h" -#include "gnuradio/digital/mpsk_snr_est.h" -#include "gnuradio/digital/mpsk_snr_est_cc.h" -#include "gnuradio/digital/msk_timing_recovery_cc.h" -#include "gnuradio/digital/ofdm_carrier_allocator_cvc.h" -#include "gnuradio/digital/ofdm_chanest_vcvc.h" -#include "gnuradio/digital/ofdm_cyclic_prefixer.h" -#include "gnuradio/digital/ofdm_equalizer_base.h" -#include "gnuradio/digital/ofdm_equalizer_simpledfe.h" -#include "gnuradio/digital/ofdm_equalizer_static.h" -#include "gnuradio/digital/ofdm_frame_acquisition.h" -#include "gnuradio/digital/ofdm_frame_equalizer_vcvc.h" -#include "gnuradio/digital/ofdm_frame_sink.h" -#include "gnuradio/digital/ofdm_insert_preamble.h" -#include "gnuradio/digital/ofdm_mapper_bcv.h" -#include "gnuradio/digital/ofdm_sampler.h" -#include "gnuradio/digital/ofdm_serializer_vcc.h" -#include "gnuradio/digital/ofdm_sync_sc_cfb.h" -#include "gnuradio/digital/header_format_base.h" -#include "gnuradio/digital/header_format_default.h" -#include "gnuradio/digital/header_format_counter.h" -#include "gnuradio/digital/header_format_crc.h" -#include "gnuradio/digital/header_format_ofdm.h" -#include "gnuradio/digital/protocol_formatter_async.h" -#include "gnuradio/digital/protocol_formatter_bb.h" -#include "gnuradio/digital/protocol_parser_b.h" -#include "gnuradio/digital/packet_header_default.h" -#include "gnuradio/digital/packet_header_ofdm.h" -#include "gnuradio/digital/packet_headergenerator_bb.h" -#include "gnuradio/digital/packet_headerparser_b.h" -#include "gnuradio/digital/packet_sink.h" -#include "gnuradio/digital/pfb_clock_sync_ccf.h" -#include "gnuradio/digital/pfb_clock_sync_fff.h" -#include "gnuradio/digital/pn_correlator_cc.h" -#include "gnuradio/digital/probe_density_b.h" -#include "gnuradio/digital/probe_mpsk_snr_est_c.h" -#include "gnuradio/digital/scrambler_bb.h" -#include "gnuradio/digital/simple_correlator.h" -#include "gnuradio/digital/simple_framer.h" -#include "gnuradio/digital/ofdm_serializer_vcc.h" -#include "gnuradio/digital/packet_headerparser_b.h" -#include "gnuradio/digital/header_payload_demux.h" -%} - -%include "gnuradio/digital/additive_scrambler_bb.h" -%include "gnuradio/digital/binary_slicer_fb.h" -%include "gnuradio/digital/burst_shaper_cc.h" -%include "gnuradio/digital/burst_shaper_ff.h" -%include "gnuradio/digital/chunks_to_symbols_bc.h" -%include "gnuradio/digital/chunks_to_symbols_bf.h" -%include "gnuradio/digital/chunks_to_symbols_ic.h" -%include "gnuradio/digital/chunks_to_symbols_if.h" -%include "gnuradio/digital/chunks_to_symbols_sc.h" -%include "gnuradio/digital/chunks_to_symbols_sf.h" -%include "gnuradio/digital/clock_recovery_mm_cc.h" -%include "gnuradio/digital/clock_recovery_mm_ff.h" -%include "gnuradio/digital/cma_equalizer_cc.h" -%include "gnuradio/digital/constellation.h" -%include "gnuradio/digital/constellation_decoder_cb.h" -%include "gnuradio/digital/constellation_receiver_cb.h" -%include "gnuradio/digital/constellation_soft_decoder_cf.h" -%include "gnuradio/digital/corr_est_cc.h" -%include "gnuradio/digital/correlate_access_code_bb.h" -%include "gnuradio/digital/correlate_access_code_tag_bb.h" -%include "gnuradio/digital/correlate_access_code_bb_ts.h" -%include "gnuradio/digital/correlate_access_code_ff_ts.h" -%include "gnuradio/digital/correlate_and_sync_cc.h" -%include "gnuradio/digital/costas_loop_cc.h" -%include "gnuradio/digital/cpmmod_bc.h" -%include "gnuradio/digital/crc32.h" -%include "gnuradio/digital/crc32_bb.h" -%include "gnuradio/digital/crc32_async_bb.h" -%include "gnuradio/digital/descrambler_bb.h" -%include "gnuradio/digital/diff_decoder_bb.h" -%include "gnuradio/digital/diff_encoder_bb.h" -%include "gnuradio/digital/diff_phasor_cc.h" -%include "gnuradio/digital/fll_band_edge_cc.h" -%include "gnuradio/digital/framer_sink_1.h" -%include "gnuradio/digital/glfsr_source_b.h" -%include "gnuradio/digital/glfsr_source_f.h" -%include "gnuradio/digital/hdlc_deframer_bp.h" -%include "gnuradio/digital/hdlc_framer_pb.h" -%include "gnuradio/digital/header_payload_demux.h" -%include "gnuradio/digital/kurtotic_equalizer_cc.h" -%include "gnuradio/digital/lfsr.h" -%include "gnuradio/digital/lms_dd_equalizer_cc.h" -%include "gnuradio/digital/map_bb.h" -%include "gnuradio/digital/metric_type.h" -%include "gnuradio/digital/modulate_vector.h" -%include "gnuradio/digital/mpsk_receiver_cc.h" -%include "gnuradio/digital/mpsk_snr_est.h" -%include "gnuradio/digital/mpsk_snr_est_cc.h" -%include "gnuradio/digital/msk_timing_recovery_cc.h" -%include "gnuradio/digital/ofdm_carrier_allocator_cvc.h" -%include "gnuradio/digital/ofdm_chanest_vcvc.h" -%include "gnuradio/digital/ofdm_cyclic_prefixer.h" -%include "gnuradio/digital/ofdm_equalizer_base.h" -%include "gnuradio/digital/ofdm_equalizer_simpledfe.h" -%include "gnuradio/digital/ofdm_equalizer_static.h" -%include "gnuradio/digital/ofdm_frame_acquisition.h" -%include "gnuradio/digital/ofdm_frame_equalizer_vcvc.h" -%include "gnuradio/digital/ofdm_frame_sink.h" -%include "gnuradio/digital/ofdm_insert_preamble.h" -%include "gnuradio/digital/ofdm_mapper_bcv.h" -%include "gnuradio/digital/ofdm_sampler.h" -%include "gnuradio/digital/ofdm_serializer_vcc.h" -%include "gnuradio/digital/ofdm_sync_sc_cfb.h" -%include "gnuradio/digital/header_format_base.h" -%include "gnuradio/digital/header_format_default.h" -%include "gnuradio/digital/header_format_counter.h" -%include "gnuradio/digital/header_format_crc.h" -%include "gnuradio/digital/header_format_ofdm.h" -%include "gnuradio/digital/protocol_formatter_async.h" -%include "gnuradio/digital/protocol_formatter_bb.h" -%include "gnuradio/digital/protocol_parser_b.h" -%include "gnuradio/digital/packet_header_default.h" -%include "gnuradio/digital/packet_header_ofdm.h" -%include "gnuradio/digital/packet_headergenerator_bb.h" -%include "gnuradio/digital/packet_headerparser_b.h" -%include "gnuradio/digital/packet_sink.h" -%include "gnuradio/digital/pfb_clock_sync_ccf.h" -%include "gnuradio/digital/pfb_clock_sync_fff.h" -%include "gnuradio/digital/pn_correlator_cc.h" -%include "gnuradio/digital/probe_density_b.h" -%include "gnuradio/digital/probe_mpsk_snr_est_c.h" -%include "gnuradio/digital/scrambler_bb.h" -%include "gnuradio/digital/simple_correlator.h" -%include "gnuradio/digital/simple_framer.h" - -GR_SWIG_BLOCK_MAGIC2(digital, additive_scrambler_bb); -GR_SWIG_BLOCK_MAGIC2(digital, binary_slicer_fb); -GR_SWIG_BLOCK_MAGIC2(digital, burst_shaper_cc); -GR_SWIG_BLOCK_MAGIC2(digital, burst_shaper_ff); -GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_bc); -GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_bf); -GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_ic); -GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_if); -GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_sc); -GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_sf); -GR_SWIG_BLOCK_MAGIC2(digital, clock_recovery_mm_cc); -GR_SWIG_BLOCK_MAGIC2(digital, clock_recovery_mm_ff); -GR_SWIG_BLOCK_MAGIC2(digital, cma_equalizer_cc); -GR_SWIG_BLOCK_MAGIC2(digital, constellation_decoder_cb); -GR_SWIG_BLOCK_MAGIC2(digital, constellation_receiver_cb); -GR_SWIG_BLOCK_MAGIC2(digital, constellation_soft_decoder_cf); -GR_SWIG_BLOCK_MAGIC2(digital, corr_est_cc); -GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_bb); -GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_tag_bb); -GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_bb_ts); -GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_ff_ts); -GR_SWIG_BLOCK_MAGIC2(digital, correlate_and_sync_cc); -GR_SWIG_BLOCK_MAGIC2(digital, costas_loop_cc); -GR_SWIG_BLOCK_MAGIC2(digital, crc32_bb); -GR_SWIG_BLOCK_MAGIC2(digital, crc32_async_bb); -GR_SWIG_BLOCK_MAGIC2(digital, cpmmod_bc); -GR_SWIG_BLOCK_MAGIC2(digital, descrambler_bb); -GR_SWIG_BLOCK_MAGIC2(digital, diff_decoder_bb); -GR_SWIG_BLOCK_MAGIC2(digital, diff_encoder_bb); -GR_SWIG_BLOCK_MAGIC2(digital, diff_phasor_cc); -GR_SWIG_BLOCK_MAGIC2(digital, fll_band_edge_cc); -GR_SWIG_BLOCK_MAGIC2(digital, framer_sink_1); -GR_SWIG_BLOCK_MAGIC2(digital, glfsr_source_b); -GR_SWIG_BLOCK_MAGIC2(digital, glfsr_source_f); -GR_SWIG_BLOCK_MAGIC2(digital, hdlc_deframer_bp); -GR_SWIG_BLOCK_MAGIC2(digital, hdlc_framer_pb); -GR_SWIG_BLOCK_MAGIC2(digital, header_payload_demux); -GR_SWIG_BLOCK_MAGIC2(digital, kurtotic_equalizer_cc); -GR_SWIG_BLOCK_MAGIC2(digital, lms_dd_equalizer_cc); -GR_SWIG_BLOCK_MAGIC2(digital, map_bb); -GR_SWIG_BLOCK_MAGIC2(digital, mpsk_receiver_cc); -GR_SWIG_BLOCK_MAGIC2(digital, mpsk_snr_est_cc); -GR_SWIG_BLOCK_MAGIC2(digital, msk_timing_recovery_cc); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_carrier_allocator_cvc); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_chanest_vcvc); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_cyclic_prefixer); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_frame_acquisition); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_frame_equalizer_vcvc); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_frame_sink); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_insert_preamble); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_mapper_bcv); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_sampler); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_serializer_vcc); -GR_SWIG_BLOCK_MAGIC2(digital, ofdm_sync_sc_cfb); -GR_SWIG_BLOCK_MAGIC2(digital, protocol_formatter_async); -GR_SWIG_BLOCK_MAGIC2(digital, protocol_formatter_bb); -GR_SWIG_BLOCK_MAGIC2(digital, protocol_parser_b); -GR_SWIG_BLOCK_MAGIC2(digital, packet_headergenerator_bb); -GR_SWIG_BLOCK_MAGIC2(digital, packet_headerparser_b); -GR_SWIG_BLOCK_MAGIC2(digital, packet_sink); -GR_SWIG_BLOCK_MAGIC2(digital, pfb_clock_sync_ccf); -GR_SWIG_BLOCK_MAGIC2(digital, pfb_clock_sync_fff); -GR_SWIG_BLOCK_MAGIC2(digital, pn_correlator_cc); -GR_SWIG_BLOCK_MAGIC2(digital, probe_density_b); -GR_SWIG_BLOCK_MAGIC2(digital, probe_mpsk_snr_est_c); -GR_SWIG_BLOCK_MAGIC2(digital, scrambler_bb); -GR_SWIG_BLOCK_MAGIC2(digital, simple_correlator); -GR_SWIG_BLOCK_MAGIC2(digital, simple_framer); - -GR_SWIG_BLOCK_MAGIC_FACTORY(digital, cpmmod_bc, gmskmod_bc); - -// Properly package up non-block objects -%include "constellation.i" -%include "packet_header.i" -%include "ofdm_equalizer.i" diff --git a/gr-digital/swig/digital_swig.py.in b/gr-digital/swig/digital_swig.py.in new file mode 100644 index 0000000000..d5d55a0f4e --- /dev/null +++ b/gr-digital/swig/digital_swig.py.in @@ -0,0 +1,24 @@ +# +# Copyright 2016 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio 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. +# +# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from digital_swig0 import * +from digital_swig1 import * +from digital_swig2 import * diff --git a/gr-digital/swig/digital_swig0.i b/gr-digital/swig/digital_swig0.i new file mode 100644 index 0000000000..753d0267b9 --- /dev/null +++ b/gr-digital/swig/digital_swig0.i @@ -0,0 +1,142 @@ +/* + * Copyright 2011-2016 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#define DIGITAL_API +#define ANALOG_API +#define BLOCKS_API + +%include "gnuradio.i" +%include "stdint.i" + +//load generated python docstrings +%include "digital_swig0_doc.i" + +%include "gnuradio/analog/cpm.h" + +%{ +#include <gnuradio/blocks/control_loop.h> +%} +%include <gnuradio/blocks/control_loop.h> + +%{ +#include "gnuradio/digital/binary_slicer_fb.h" +#include "gnuradio/digital/cma_equalizer_cc.h" +#include "gnuradio/digital/constellation.h" +#include "gnuradio/digital/constellation_decoder_cb.h" +#include "gnuradio/digital/constellation_receiver_cb.h" +#include "gnuradio/digital/constellation_soft_decoder_cf.h" +#include "gnuradio/digital/corr_est_cc.h" +#include "gnuradio/digital/correlate_access_code_bb.h" +#include "gnuradio/digital/correlate_access_code_tag_bb.h" +#include "gnuradio/digital/correlate_access_code_bb_ts.h" +#include "gnuradio/digital/correlate_access_code_ff_ts.h" +#include "gnuradio/digital/correlate_and_sync_cc.h" +#include "gnuradio/digital/costas_loop_cc.h" +#include "gnuradio/digital/cpmmod_bc.h" +#include "gnuradio/digital/crc32.h" +#include "gnuradio/digital/crc32_bb.h" +#include "gnuradio/digital/crc32_async_bb.h" +#include "gnuradio/digital/descrambler_bb.h" +#include "gnuradio/digital/lms_dd_equalizer_cc.h" +#include "gnuradio/digital/ofdm_carrier_allocator_cvc.h" +#include "gnuradio/digital/ofdm_chanest_vcvc.h" +#include "gnuradio/digital/ofdm_cyclic_prefixer.h" +#include "gnuradio/digital/ofdm_equalizer_base.h" +#include "gnuradio/digital/ofdm_equalizer_simpledfe.h" +#include "gnuradio/digital/ofdm_equalizer_static.h" +#include "gnuradio/digital/ofdm_frame_acquisition.h" +#include "gnuradio/digital/ofdm_frame_equalizer_vcvc.h" +#include "gnuradio/digital/ofdm_frame_sink.h" +#include "gnuradio/digital/ofdm_insert_preamble.h" +#include "gnuradio/digital/ofdm_mapper_bcv.h" +#include "gnuradio/digital/ofdm_sampler.h" +#include "gnuradio/digital/ofdm_serializer_vcc.h" +#include "gnuradio/digital/ofdm_sync_sc_cfb.h" +%} + +%include "gnuradio/digital/binary_slicer_fb.h" +%include "gnuradio/digital/cma_equalizer_cc.h" +%include "gnuradio/digital/constellation.h" +%include "gnuradio/digital/constellation_decoder_cb.h" +%include "gnuradio/digital/constellation_receiver_cb.h" +%include "gnuradio/digital/constellation_soft_decoder_cf.h" +%include "gnuradio/digital/corr_est_cc.h" +%include "gnuradio/digital/correlate_access_code_bb.h" +%include "gnuradio/digital/correlate_access_code_tag_bb.h" +%include "gnuradio/digital/correlate_access_code_bb_ts.h" +%include "gnuradio/digital/correlate_access_code_ff_ts.h" +%include "gnuradio/digital/correlate_and_sync_cc.h" +%include "gnuradio/digital/costas_loop_cc.h" +%include "gnuradio/digital/cpmmod_bc.h" +%include "gnuradio/digital/crc32.h" +%include "gnuradio/digital/crc32_bb.h" +%include "gnuradio/digital/crc32_async_bb.h" +%include "gnuradio/digital/descrambler_bb.h" +%include "gnuradio/digital/lms_dd_equalizer_cc.h" +%include "gnuradio/digital/ofdm_carrier_allocator_cvc.h" +%include "gnuradio/digital/ofdm_chanest_vcvc.h" +%include "gnuradio/digital/ofdm_cyclic_prefixer.h" +%include "gnuradio/digital/ofdm_equalizer_base.h" +%include "gnuradio/digital/ofdm_equalizer_simpledfe.h" +%include "gnuradio/digital/ofdm_equalizer_static.h" +%include "gnuradio/digital/ofdm_frame_acquisition.h" +%include "gnuradio/digital/ofdm_frame_equalizer_vcvc.h" +%include "gnuradio/digital/ofdm_frame_sink.h" +%include "gnuradio/digital/ofdm_insert_preamble.h" +%include "gnuradio/digital/ofdm_mapper_bcv.h" +%include "gnuradio/digital/ofdm_sampler.h" +%include "gnuradio/digital/ofdm_serializer_vcc.h" +%include "gnuradio/digital/ofdm_sync_sc_cfb.h" + +GR_SWIG_BLOCK_MAGIC2(digital, binary_slicer_fb); +GR_SWIG_BLOCK_MAGIC2(digital, cma_equalizer_cc); +GR_SWIG_BLOCK_MAGIC2(digital, constellation_decoder_cb); +GR_SWIG_BLOCK_MAGIC2(digital, constellation_receiver_cb); +GR_SWIG_BLOCK_MAGIC2(digital, constellation_soft_decoder_cf); +GR_SWIG_BLOCK_MAGIC2(digital, corr_est_cc); +GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_bb); +GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_tag_bb); +GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_bb_ts); +GR_SWIG_BLOCK_MAGIC2(digital, correlate_access_code_ff_ts); +GR_SWIG_BLOCK_MAGIC2(digital, correlate_and_sync_cc); +GR_SWIG_BLOCK_MAGIC2(digital, costas_loop_cc); +GR_SWIG_BLOCK_MAGIC2(digital, crc32_bb); +GR_SWIG_BLOCK_MAGIC2(digital, crc32_async_bb); +GR_SWIG_BLOCK_MAGIC2(digital, cpmmod_bc); +GR_SWIG_BLOCK_MAGIC2(digital, descrambler_bb); +GR_SWIG_BLOCK_MAGIC2(digital, lms_dd_equalizer_cc); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_carrier_allocator_cvc); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_chanest_vcvc); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_cyclic_prefixer); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_frame_acquisition); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_frame_equalizer_vcvc); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_frame_sink); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_insert_preamble); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_mapper_bcv); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_sampler); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_serializer_vcc); +GR_SWIG_BLOCK_MAGIC2(digital, ofdm_sync_sc_cfb); + +GR_SWIG_BLOCK_MAGIC_FACTORY(digital, cpmmod_bc, gmskmod_bc); + +// Properly package up non-block objects +%include "constellation.i" +%include "ofdm_equalizer.i" diff --git a/gr-digital/swig/digital_swig1.i b/gr-digital/swig/digital_swig1.i new file mode 100644 index 0000000000..972ddf5cb2 --- /dev/null +++ b/gr-digital/swig/digital_swig1.i @@ -0,0 +1,120 @@ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#define DIGITAL_API +#define ANALOG_API +#define BLOCKS_API + +%include "gnuradio.i" +%include "stdint.i" + +//load generated python docstrings +%include "digital_swig1_doc.i" + + //%include "gnuradio/analog/cpm.h" + +%{ +#include <gnuradio/blocks/control_loop.h> +%} +%include <gnuradio/blocks/control_loop.h> + +%{ +#include "gnuradio/digital/additive_scrambler_bb.h" +#include "gnuradio/digital/burst_shaper_cc.h" +#include "gnuradio/digital/burst_shaper_ff.h" +#include "gnuradio/digital/chunks_to_symbols_bc.h" +#include "gnuradio/digital/chunks_to_symbols_bf.h" +#include "gnuradio/digital/chunks_to_symbols_ic.h" +#include "gnuradio/digital/chunks_to_symbols_if.h" +#include "gnuradio/digital/chunks_to_symbols_sc.h" +#include "gnuradio/digital/chunks_to_symbols_sf.h" +#include "gnuradio/digital/clock_recovery_mm_cc.h" +#include "gnuradio/digital/clock_recovery_mm_ff.h" +#include "gnuradio/digital/diff_decoder_bb.h" +#include "gnuradio/digital/diff_encoder_bb.h" +#include "gnuradio/digital/diff_phasor_cc.h" +#include "gnuradio/digital/fll_band_edge_cc.h" +#include "gnuradio/digital/framer_sink_1.h" +#include "gnuradio/digital/glfsr_source_b.h" +#include "gnuradio/digital/glfsr_source_f.h" +#include "gnuradio/digital/hdlc_deframer_bp.h" +#include "gnuradio/digital/hdlc_framer_pb.h" +#include "gnuradio/digital/header_payload_demux.h" +#include "gnuradio/digital/kurtotic_equalizer_cc.h" +#include "gnuradio/digital/lfsr.h" +#include "gnuradio/digital/map_bb.h" +#include "gnuradio/digital/metric_type.h" +#include "gnuradio/digital/modulate_vector.h" +#include "gnuradio/digital/msk_timing_recovery_cc.h" +%} + +%include "gnuradio/digital/additive_scrambler_bb.h" +%include "gnuradio/digital/burst_shaper_cc.h" +%include "gnuradio/digital/burst_shaper_ff.h" +%include "gnuradio/digital/chunks_to_symbols_bc.h" +%include "gnuradio/digital/chunks_to_symbols_bf.h" +%include "gnuradio/digital/chunks_to_symbols_ic.h" +%include "gnuradio/digital/chunks_to_symbols_if.h" +%include "gnuradio/digital/chunks_to_symbols_sc.h" +%include "gnuradio/digital/chunks_to_symbols_sf.h" +%include "gnuradio/digital/clock_recovery_mm_cc.h" +%include "gnuradio/digital/clock_recovery_mm_ff.h" +%include "gnuradio/digital/diff_decoder_bb.h" +%include "gnuradio/digital/diff_encoder_bb.h" +%include "gnuradio/digital/diff_phasor_cc.h" +%include "gnuradio/digital/fll_band_edge_cc.h" +%include "gnuradio/digital/framer_sink_1.h" +%include "gnuradio/digital/glfsr_source_b.h" +%include "gnuradio/digital/glfsr_source_f.h" +%include "gnuradio/digital/hdlc_deframer_bp.h" +%include "gnuradio/digital/hdlc_framer_pb.h" +%include "gnuradio/digital/header_payload_demux.h" +%include "gnuradio/digital/kurtotic_equalizer_cc.h" +%include "gnuradio/digital/lfsr.h" +%include "gnuradio/digital/map_bb.h" +%include "gnuradio/digital/metric_type.h" +%include "gnuradio/digital/modulate_vector.h" +%include "gnuradio/digital/msk_timing_recovery_cc.h" + +GR_SWIG_BLOCK_MAGIC2(digital, additive_scrambler_bb); +GR_SWIG_BLOCK_MAGIC2(digital, burst_shaper_cc); +GR_SWIG_BLOCK_MAGIC2(digital, burst_shaper_ff); +GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_bc); +GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_bf); +GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_ic); +GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_if); +GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_sc); +GR_SWIG_BLOCK_MAGIC2(digital, chunks_to_symbols_sf); +GR_SWIG_BLOCK_MAGIC2(digital, clock_recovery_mm_cc); +GR_SWIG_BLOCK_MAGIC2(digital, clock_recovery_mm_ff); +GR_SWIG_BLOCK_MAGIC2(digital, diff_decoder_bb); +GR_SWIG_BLOCK_MAGIC2(digital, diff_encoder_bb); +GR_SWIG_BLOCK_MAGIC2(digital, diff_phasor_cc); +GR_SWIG_BLOCK_MAGIC2(digital, fll_band_edge_cc); +GR_SWIG_BLOCK_MAGIC2(digital, framer_sink_1); +GR_SWIG_BLOCK_MAGIC2(digital, glfsr_source_b); +GR_SWIG_BLOCK_MAGIC2(digital, glfsr_source_f); +GR_SWIG_BLOCK_MAGIC2(digital, hdlc_deframer_bp); +GR_SWIG_BLOCK_MAGIC2(digital, hdlc_framer_pb); +GR_SWIG_BLOCK_MAGIC2(digital, header_payload_demux); +GR_SWIG_BLOCK_MAGIC2(digital, kurtotic_equalizer_cc); +GR_SWIG_BLOCK_MAGIC2(digital, map_bb); +GR_SWIG_BLOCK_MAGIC2(digital, msk_timing_recovery_cc); diff --git a/gr-digital/swig/digital_swig2.i b/gr-digital/swig/digital_swig2.i new file mode 100644 index 0000000000..c16cc6aafb --- /dev/null +++ b/gr-digital/swig/digital_swig2.i @@ -0,0 +1,112 @@ +/* + * Copyright 2016 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#define DIGITAL_API +#define ANALOG_API +#define BLOCKS_API + +%include "gnuradio.i" +%include "stdint.i" + +//load generated python docstrings +%include "digital_swig2_doc.i" + +// %include "gnuradio/analog/cpm.h" + +%{ +#include <gnuradio/blocks/control_loop.h> +%} +%include <gnuradio/blocks/control_loop.h> + +%{ +#include "gnuradio/digital/mpsk_receiver_cc.h" +#include "gnuradio/digital/mpsk_snr_est.h" +#include "gnuradio/digital/mpsk_snr_est_cc.h" +#include "gnuradio/digital/header_format_base.h" +#include "gnuradio/digital/header_format_default.h" +#include "gnuradio/digital/header_format_counter.h" +#include "gnuradio/digital/header_format_crc.h" +#include "gnuradio/digital/header_format_ofdm.h" +#include "gnuradio/digital/protocol_formatter_async.h" +#include "gnuradio/digital/protocol_formatter_bb.h" +#include "gnuradio/digital/protocol_parser_b.h" +#include "gnuradio/digital/packet_header_default.h" +#include "gnuradio/digital/packet_header_ofdm.h" +#include "gnuradio/digital/packet_headergenerator_bb.h" +#include "gnuradio/digital/packet_headerparser_b.h" +#include "gnuradio/digital/packet_sink.h" +#include "gnuradio/digital/pfb_clock_sync_ccf.h" +#include "gnuradio/digital/pfb_clock_sync_fff.h" +#include "gnuradio/digital/pn_correlator_cc.h" +#include "gnuradio/digital/probe_density_b.h" +#include "gnuradio/digital/probe_mpsk_snr_est_c.h" +#include "gnuradio/digital/scrambler_bb.h" +#include "gnuradio/digital/simple_correlator.h" +#include "gnuradio/digital/simple_framer.h" +#include "gnuradio/digital/ofdm_serializer_vcc.h" +#include "gnuradio/digital/packet_headerparser_b.h" +#include "gnuradio/digital/header_payload_demux.h" +%} + +%include "gnuradio/digital/mpsk_receiver_cc.h" +%include "gnuradio/digital/mpsk_snr_est.h" +%include "gnuradio/digital/mpsk_snr_est_cc.h" +%include "gnuradio/digital/header_format_base.h" +%include "gnuradio/digital/header_format_default.h" +%include "gnuradio/digital/header_format_counter.h" +%include "gnuradio/digital/header_format_crc.h" +%include "gnuradio/digital/header_format_ofdm.h" +%include "gnuradio/digital/protocol_formatter_async.h" +%include "gnuradio/digital/protocol_formatter_bb.h" +%include "gnuradio/digital/protocol_parser_b.h" +%include "gnuradio/digital/packet_header_default.h" +%include "gnuradio/digital/packet_header_ofdm.h" +%include "gnuradio/digital/packet_headergenerator_bb.h" +%include "gnuradio/digital/packet_headerparser_b.h" +%include "gnuradio/digital/packet_sink.h" +%include "gnuradio/digital/pfb_clock_sync_ccf.h" +%include "gnuradio/digital/pfb_clock_sync_fff.h" +%include "gnuradio/digital/pn_correlator_cc.h" +%include "gnuradio/digital/probe_density_b.h" +%include "gnuradio/digital/probe_mpsk_snr_est_c.h" +%include "gnuradio/digital/scrambler_bb.h" +%include "gnuradio/digital/simple_correlator.h" +%include "gnuradio/digital/simple_framer.h" + +GR_SWIG_BLOCK_MAGIC2(digital, mpsk_receiver_cc); +GR_SWIG_BLOCK_MAGIC2(digital, mpsk_snr_est_cc); +GR_SWIG_BLOCK_MAGIC2(digital, protocol_formatter_async); +GR_SWIG_BLOCK_MAGIC2(digital, protocol_formatter_bb); +GR_SWIG_BLOCK_MAGIC2(digital, protocol_parser_b); +GR_SWIG_BLOCK_MAGIC2(digital, packet_headergenerator_bb); +GR_SWIG_BLOCK_MAGIC2(digital, packet_headerparser_b); +GR_SWIG_BLOCK_MAGIC2(digital, packet_sink); +GR_SWIG_BLOCK_MAGIC2(digital, pfb_clock_sync_ccf); +GR_SWIG_BLOCK_MAGIC2(digital, pfb_clock_sync_fff); +GR_SWIG_BLOCK_MAGIC2(digital, pn_correlator_cc); +GR_SWIG_BLOCK_MAGIC2(digital, probe_density_b); +GR_SWIG_BLOCK_MAGIC2(digital, probe_mpsk_snr_est_c); +GR_SWIG_BLOCK_MAGIC2(digital, scrambler_bb); +GR_SWIG_BLOCK_MAGIC2(digital, simple_correlator); +GR_SWIG_BLOCK_MAGIC2(digital, simple_framer); + +// Properly package up non-block objects +%include "packet_header.i" diff --git a/gr-dtv/examples/README.atsc b/gr-dtv/examples/README.atsc new file mode 100644 index 0000000000..29f5abeccb --- /dev/null +++ b/gr-dtv/examples/README.atsc @@ -0,0 +1,7 @@ +A test Transport Stream (19.392658 Mbps) for the example transmit +flow graphs is available here: + +http://www.w6rz.net/advatsc.ts + +It is 256,952,572 bytes. + diff --git a/gr-dtv/examples/README.dvbs b/gr-dtv/examples/README.dvbs index d9097c4876..b9bab2999a 100644 --- a/gr-dtv/examples/README.dvbs +++ b/gr-dtv/examples/README.dvbs @@ -1,11 +1,3 @@ -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: diff --git a/gr-dtv/examples/catv_tx_64qam.grc b/gr-dtv/examples/catv_tx_64qam.grc index 964ef8470f..0a59580479 100644 --- a/gr-dtv/examples/catv_tx_64qam.grc +++ b/gr-dtv/examples/catv_tx_64qam.grc @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<?grc format='1' created='3.7.10'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Thu Feb 20 21:02:41 2014</timestamp> <block> @@ -30,7 +30,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 11)</value> + <value>(8, 12)</value> </param> <param> <key>_rotation</key> @@ -38,7 +38,7 @@ </param> <param> <key>generate_options</key> - <value>wx_gui</value> + <value>qt_gui</value> </param> <param> <key>hier_block_src_path</key> @@ -93,7 +93,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 299)</value> + <value>(8, 268)</value> </param> <param> <key>_rotation</key> @@ -120,7 +120,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 371)</value> + <value>(8, 332)</value> </param> <param> <key>_rotation</key> @@ -147,7 +147,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 443)</value> + <value>(8, 396)</value> </param> <param> <key>_rotation</key> @@ -174,7 +174,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 155)</value> + <value>(8, 140)</value> </param> <param> <key>_rotation</key> @@ -186,7 +186,7 @@ </param> <param> <key>value</key> - <value>429000000</value> + <value>429e6</value> </param> </block> <block> @@ -201,7 +201,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 227)</value> + <value>(8, 204)</value> </param> <param> <key>_rotation</key> @@ -228,7 +228,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 83)</value> + <value>(8, 76)</value> </param> <param> <key>_rotation</key> @@ -244,93 +244,156 @@ </param> </block> <block> - <key>variable_slider</key> + <key>variable_qtgui_range</key> <param> <key>comment</key> <value></value> </param> <param> - <key>converver</key> - <value>int_converter</value> - </param> - <param> <key>value</key> - <value>-8</value> + <value>50</value> </param> <param> <key>_enabled</key> - <value>1</value> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(312, 11)</value> + <value>(544, 16)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> - <key>grid_pos</key> + <key>id</key> + <value>tx_gain</value> + </param> + <param> + <key>label</key> <value></value> </param> <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>89</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>-8</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(296, 16)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> <key>id</key> <value>vga1_gain</value> </param> <param> <key>label</key> - <value>VGA1 Gain</value> + <value></value> </param> <param> - <key>max</key> - <value>-4</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>min</key> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> <value>-35</value> </param> <param> - <key>notebook</key> - <value></value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>-4</value> </param> <param> - <key>num_steps</key> - <value>31</value> + <key>rangeType</key> + <value>int</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> - <key>variable_slider</key> + <key>variable_qtgui_range</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> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(448, 11)</value> + <value>(416, 16)</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>gui_hint</key> + <value></value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> <key>id</key> @@ -338,27 +401,35 @@ </param> <param> <key>label</key> - <value>VGA2 Gain</value> + <value></value> </param> <param> - <key>max</key> - <value>25</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>min</key> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> <value>0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>step</key> + <value>1</value> </param> <param> - <key>num_steps</key> + <key>stop</key> <value>25</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> @@ -385,7 +456,7 @@ </param> <param> <key>_coordinate</key> - <value>(128, 163)</value> + <value>(144, 148)</value> </param> <param> <key>_rotation</key> @@ -444,7 +515,7 @@ </param> <param> <key>_coordinate</key> - <value>(624, 163)</value> + <value>(640, 148)</value> </param> <param> <key>_rotation</key> @@ -491,7 +562,7 @@ </param> <param> <key>_coordinate</key> - <value>(536, 251)</value> + <value>(536, 244)</value> </param> <param> <key>_rotation</key> @@ -546,7 +617,7 @@ </param> <param> <key>_coordinate</key> - <value>(584, 347)</value> + <value>(624, 340)</value> </param> <param> <key>_rotation</key> @@ -585,7 +656,7 @@ </param> <param> <key>_coordinate</key> - <value>(424, 353)</value> + <value>(440, 344)</value> </param> <param> <key>_rotation</key> @@ -624,7 +695,7 @@ </param> <param> <key>_coordinate</key> - <value>(848, 177)</value> + <value>(880, 160)</value> </param> <param> <key>_rotation</key> @@ -663,7 +734,7 @@ </param> <param> <key>_coordinate</key> - <value>(360, 177)</value> + <value>(376, 160)</value> </param> <param> <key>_rotation</key> @@ -702,7 +773,7 @@ </param> <param> <key>_coordinate</key> - <value>(800, 353)</value> + <value>(176, 504)</value> </param> <param> <key>_rotation</key> @@ -732,8 +803,16 @@ <value></value> </param> <param> - <key>rate</key> - <value>C_OTHER</value> + <key>rate1</key> + <value>C1_4</value> + </param> + <param> + <key>rate2</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate3</key> + <value>C1_4</value> </param> <param> <key>comment</key> @@ -757,7 +836,7 @@ </param> <param> <key>_coordinate</key> - <value>(400, 499)</value> + <value>(376, 492)</value> </param> <param> <key>_rotation</key> @@ -804,7 +883,7 @@ </param> <param> <key>_coordinate</key> - <value>(168, 339)</value> + <value>(176, 332)</value> </param> <param> <key>_rotation</key> @@ -851,7 +930,7 @@ </param> <param> <key>_coordinate</key> - <value>(712, 507)</value> + <value>(664, 484)</value> </param> <param> <key>_rotation</key> @@ -1802,11 +1881,11 @@ </param> <param> <key>_enabled</key> - <value>True</value> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(1056, 467)</value> + <value>(1072, 452)</value> </param> <param> <key>_rotation</key> @@ -1902,107 +1981,1126 @@ </param> </block> <block> - <key>wxgui_fftsink2</key> + <key>qtgui_freq_sink_x</key> <param> - <key>avg_alpha</key> - <value>0.1333</value> + <key>autoscale</key> + <value>False</value> </param> <param> <key>average</key> + <value>0.2</value> + </param> + <param> + <key>axislabels</key> <value>True</value> </param> <param> - <key>baseband_freq</key> - <value>center_freq</value> + <key>bw</key> + <value>samp_rate</value> </param> <param> <key>alias</key> <value></value> </param> <param> + <key>fc</key> + <value>center_freq</value> + </param> + <param> <key>comment</key> <value></value> </param> <param> + <key>ctrlpanel</key> + <value>False</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> - <value>1</value> + <value>True</value> </param> <param> - <key>fft_size</key> + <key>fftsize</key> <value>1024</value> </param> <param> - <key>freqvar</key> - <value>None</value> + <key>_coordinate</key> + <value>(880, 284)</value> </param> <param> - <key>_coordinate</key> - <value>(1056, 203)</value> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>grid</key> + <value>True</value> </param> <param> <key>id</key> - <value>wxgui_fftsink2_0_0</value> + <value>qtgui_freq_sink_x_0</value> + </param> + <param> + <key>legend</key> + <value>True</value> </param> <param> - <key>notebook</key> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> <value></value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>width1</key> + <value>1</value> </param> <param> - <key>ref_level</key> - <value>-10</value> + <key>alpha10</key> + <value>1.0</value> </param> <param> - <key>ref_scale</key> - <value>2.0</value> + <key>color10</key> + <value>"dark blue"</value> </param> <param> - <key>fft_rate</key> - <value>15</value> + <key>label10</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>width10</key> + <value>1</value> </param> <param> - <key>title</key> - <value>FFT Plot</value> + <key>alpha2</key> + <value>1.0</value> + </param> + <param> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> + <value></value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>label3</key> + <value></value> + </param> + <param> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>"black"</value> + </param> + <param> + <key>label4</key> + <value></value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>"cyan"</value> + </param> + <param> + <key>label5</key> + <value></value> + </param> + <param> + <key>width5</key> + <value>1</value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>"yellow"</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> </param> <param> <key>type</key> <value>complex</value> </param> <param> - <key>win_size</key> - <value>640,480</value> + <key>update_time</key> + <value>0.10</value> </param> <param> - <key>win</key> - <value>None</value> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> </param> <param> - <key>y_divs</key> - <value>10</value> + <key>label</key> + <value>Relative Gain</value> </param> <param> - <key>y_per_div</key> + <key>ymax</key> <value>10</value> </param> + <param> + <key>ymin</key> + <value>-140</value> + </param> + <param> + <key>units</key> + <value>dB</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>center_freq</value> + </param> + <param> + <key>norm_gain0</key> + <value>False</value> + </param> + <param> + <key>gain0</key> + <value>tx_gain</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=128,master_clock_rate=" + str(samp_rate*4)</value> + </param> + <param> + <key>dev_args</key> + <value>""</value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(1072, 336)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>uhd_usrp_sink_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>hide_lo_controls</key> + <value>True</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> <connection> <source_block_id>blocks_file_source_0</source_block_id> @@ -2072,7 +3170,13 @@ </connection> <connection> <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>wxgui_fftsink2_0_0</sink_block_id> + <sink_block_id>qtgui_freq_sink_x_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</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/dvbs2_tx.grc b/gr-dtv/examples/dvbs2_tx.grc index 99c797d066..a26981a0dc 100644 --- a/gr-dtv/examples/dvbs2_tx.grc +++ b/gr-dtv/examples/dvbs2_tx.grc @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<?grc format='1' created='3.7.10'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Wed Sep 3 03:03:39 2014</timestamp> <block> @@ -38,7 +38,7 @@ </param> <param> <key>generate_options</key> - <value>wx_gui</value> + <value>qt_gui</value> </param> <param> <key>hier_block_src_path</key> @@ -101,7 +101,7 @@ </param> <param> <key>id</key> - <value>frequency</value> + <value>center_freq</value> </param> <param> <key>value</key> @@ -217,6 +217,195 @@ </param> </block> <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>50</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(240, 480)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>tx_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>89</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>-8</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 480)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>vga1_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>-35</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>-4</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>10</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(120, 480)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>vga2_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>25</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> <key>blocks_file_sink</key> <param> <key>append</key> @@ -244,7 +433,7 @@ </param> <param> <key>_coordinate</key> - <value>(776, 548)</value> + <value>(776, 508)</value> </param> <param> <key>_rotation</key> @@ -670,7 +859,7 @@ </param> <param> <key>_coordinate</key> - <value>(184, 220)</value> + <value>(184, 172)</value> </param> <param> <key>_rotation</key> @@ -733,7 +922,7 @@ </param> <param> <key>_coordinate</key> - <value>(448, 216)</value> + <value>(448, 168)</value> </param> <param> <key>_rotation</key> @@ -792,7 +981,7 @@ </param> <param> <key>_coordinate</key> - <value>(184, 432)</value> + <value>(184, 320)</value> </param> <param> <key>_rotation</key> @@ -843,7 +1032,7 @@ </param> <param> <key>_coordinate</key> - <value>(464, 444)</value> + <value>(464, 332)</value> </param> <param> <key>_rotation</key> @@ -890,7 +1079,7 @@ </param> <param> <key>bb_gain0</key> - <value>-10</value> + <value>vga1_gain</value> </param> <param> <key>bw0</key> @@ -902,7 +1091,7 @@ </param> <param> <key>freq0</key> - <value>frequency</value> + <value>center_freq</value> </param> <param> <key>if_gain0</key> @@ -910,7 +1099,7 @@ </param> <param> <key>gain0</key> - <value>15</value> + <value>vga2_gain</value> </param> <param> <key>ant10</key> @@ -1794,7 +1983,7 @@ </param> <param> <key>_enabled</key> - <value>0</value> + <value>1</value> </param> <param> <key>_coordinate</key> @@ -1894,6 +2083,305 @@ </param> </block> <block> + <key>qtgui_freq_sink_x</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>0.2</value> + </param> + <param> + <key>axislabels</key> + <value>True</value> + </param> + <param> + <key>bw</key> + <value>samp_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>fc</key> + <value>center_freq</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>ctrlpanel</key> + <value>False</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fftsize</key> + <value>1024</value> + </param> + <param> + <key>_coordinate</key> + <value>(776, 204)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid</key> + <value>True</value> + </param> + <param> + <key>id</key> + <value>qtgui_freq_sink_x_0</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>alpha10</key> + <value>1.0</value> + </param> + <param> + <key>color10</key> + <value>"dark blue"</value> + </param> + <param> + <key>label10</key> + <value></value> + </param> + <param> + <key>width10</key> + <value>1</value> + </param> + <param> + <key>alpha2</key> + <value>1.0</value> + </param> + <param> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> + <value></value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>label3</key> + <value></value> + </param> + <param> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>"black"</value> + </param> + <param> + <key>label4</key> + <value></value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>"cyan"</value> + </param> + <param> + <key>label5</key> + <value></value> + </param> + <param> + <key>width5</key> + <value>1</value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>"yellow"</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + <param> + <key>label</key> + <value>Relative Gain</value> + </param> + <param> + <key>ymax</key> + <value>10</value> + </param> + <param> + <key>ymin</key> + <value>-140</value> + </param> + <param> + <key>units</key> + <value>dB</value> + </param> + </block> + <block> <key>uhd_usrp_sink</key> <param> <key>alias</key> @@ -1909,7 +2397,7 @@ </param> <param> <key>center_freq0</key> - <value>uhd.tune_request(frequency, ((symbol_rate * (1 + rolloff)) / 2 ) + 1e5)</value> + <value>uhd.tune_request(center_freq, ((symbol_rate * (1 + rolloff)) / 2 ) + 1e5)</value> </param> <param> <key>norm_gain0</key> @@ -1917,7 +2405,7 @@ </param> <param> <key>gain0</key> - <value>60</value> + <value>tx_gain</value> </param> <param> <key>ant10</key> @@ -2553,7 +3041,7 @@ </param> <param> <key>dev_addr</key> - <value>"send_frame_size=65536,num_send_frames=256,master_clock_rate=" + str(samp_rate*2)</value> + <value>"send_frame_size=65536,num_send_frames=256,master_clock_rate=" + str(samp_rate*4)</value> </param> <param> <key>dev_args</key> @@ -2561,11 +3049,11 @@ </param> <param> <key>_enabled</key> - <value>1</value> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(1048, 416)</value> + <value>(1048, 408)</value> </param> <param> <key>_rotation</key> @@ -2716,109 +3204,6 @@ <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>(776, 196)</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>-20</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>800,600</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_dvb_bbheader_bb_0</sink_block_id> @@ -2881,13 +3266,13 @@ </connection> <connection> <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>uhd_usrp_sink_0_0</sink_block_id> + <sink_block_id>qtgui_freq_sink_x_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> + <sink_block_id>uhd_usrp_sink_0_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 index c9dd98a0b9..b5e94b55ed 100644 --- a/gr-dtv/examples/dvbs_tx.grc +++ b/gr-dtv/examples/dvbs_tx.grc @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<?grc format='1' created='3.7.10'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Wed Jun 18 01:23:58 2014</timestamp> <block> @@ -30,7 +30,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 11)</value> + <value>(8, 12)</value> </param> <param> <key>_rotation</key> @@ -38,7 +38,7 @@ </param> <param> <key>generate_options</key> - <value>wx_gui</value> + <value>qt_gui</value> </param> <param> <key>hier_block_src_path</key> @@ -93,7 +93,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 203)</value> + <value>(8, 204)</value> </param> <param> <key>_rotation</key> @@ -101,7 +101,7 @@ </param> <param> <key>id</key> - <value>frequency</value> + <value>center_freq</value> </param> <param> <key>value</key> @@ -120,7 +120,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 267)</value> + <value>(8, 268)</value> </param> <param> <key>_rotation</key> @@ -147,7 +147,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 75)</value> + <value>(8, 76)</value> </param> <param> <key>_rotation</key> @@ -174,7 +174,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 139)</value> + <value>(8, 140)</value> </param> <param> <key>_rotation</key> @@ -190,34 +190,89 @@ </param> </block> <block> - <key>blocks_file_sink</key> + <key>variable_qtgui_range</key> <param> - <key>append</key> - <value>False</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>value</key> + <value>50</value> </param> <param> - <key>comment</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(240, 480)</value> + </param> + <param> + <key>gui_hint</key> <value></value> </param> <param> - <key>affinity</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>tx_gain</value> + </param> + <param> + <key>label</key> <value></value> </param> <param> - <key>_enabled</key> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> <value>0</value> </param> <param> - <key>file</key> - <value>adv.bin</value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>89</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>-8</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(848, 507)</value> + <value>(8, 480)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> @@ -225,46 +280,62 @@ </param> <param> <key>id</key> - <value>blocks_file_sink_0</value> + <value>vga1_gain</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>label</key> + <value></value> </param> <param> - <key>unbuffered</key> - <value>False</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>vlen</key> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>-35</value> + </param> + <param> + <key>step</key> <value>1</value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> - <key>alias</key> - <value></value> + <key>stop</key> + <value>-4</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> </param> <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>value</key> + <value>10</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>file</key> - <value>/run/shm/advdvbs78.ts</value> + <key>_coordinate</key> + <value>(120, 480)</value> </param> <param> - <key>_coordinate</key> - <value>(184, 59)</value> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> @@ -272,31 +343,47 @@ </param> <param> <key>id</key> - <value>blocks_file_source_0</value> + <value>vga2_gain</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>label</key> + <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>start</key> + <value>0</value> </param> <param> - <key>vlen</key> + <key>step</key> <value>1</value> </param> + <param> + <key>stop</key> + <value>25</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> </block> <block> - <key>blocks_pack_k_bits_bb</key> + <key>blocks_file_sink</key> + <param> + <key>append</key> + <value>False</value> + </param> <param> <key>alias</key> <value></value> @@ -311,11 +398,15 @@ </param> <param> <key>_enabled</key> - <value>1</value> + <value>0</value> + </param> + <param> + <key>file</key> + <value>adv.cfile</value> </param> <param> <key>_coordinate</key> - <value>(176, 451)</value> + <value>(864, 484)</value> </param> <param> <key>_rotation</key> @@ -323,27 +414,23 @@ </param> <param> <key>id</key> - <value>blocks_pack_k_bits_bb_0</value> + <value>blocks_file_sink_0</value> </param> <param> - <key>k</key> - <value>2</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>unbuffered</key> + <value>False</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>blocks_packed_to_unpacked_xx</key> - <param> - <key>bits_per_chunk</key> - <value>1</value> - </param> + <key>blocks_file_source</key> <param> <key>alias</key> <value></value> @@ -358,15 +445,15 @@ </param> <param> <key>_enabled</key> - <value>1</value> + <value>True</value> </param> <param> - <key>endianness</key> - <value>gr.GR_MSB_FIRST</value> + <key>file</key> + <value>/run/shm/advdvbs78.ts</value> </param> <param> <key>_coordinate</key> - <value>(1080, 59)</value> + <value>(208, 52)</value> </param> <param> <key>_rotation</key> @@ -374,7 +461,7 @@ </param> <param> <key>id</key> - <value>blocks_packed_to_unpacked_xx_0</value> + <value>blocks_file_source_0</value> </param> <param> <key>maxoutbuf</key> @@ -385,16 +472,20 @@ <value>0</value> </param> <param> - <key>num_ports</key> - <value>1</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_unpack_k_bits_bb</key> + <key>blocks_vector_to_stream</key> <param> <key>alias</key> <value></value> @@ -409,11 +500,11 @@ </param> <param> <key>_enabled</key> - <value>1</value> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(408, 235)</value> + <value>(568, 228)</value> </param> <param> <key>_rotation</key> @@ -421,11 +512,11 @@ </param> <param> <key>id</key> - <value>blocks_unpack_k_bits_bb_0</value> + <value>blocks_vector_to_stream_0</value> </param> <param> - <key>k</key> - <value>2</value> + <key>type</key> + <value>byte</value> </param> <param> <key>maxoutbuf</key> @@ -435,6 +526,14 @@ <key>minoutbuf</key> <value>0</value> </param> + <param> + <key>num_items</key> + <value>1512</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> </block> <block> <key>dtv_dvbs2_modulator_bc</key> @@ -447,8 +546,16 @@ <value></value> </param> <param> - <key>rate</key> - <value>C_OTHER</value> + <key>rate1</key> + <value>C1_4</value> + </param> + <param> + <key>rate2</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate3</key> + <value>C1_4</value> </param> <param> <key>comment</key> @@ -472,7 +579,7 @@ </param> <param> <key>_coordinate</key> - <value>(352, 427)</value> + <value>(248, 376)</value> </param> <param> <key>_rotation</key> @@ -519,7 +626,7 @@ </param> <param> <key>_coordinate</key> - <value>(832, 51)</value> + <value>(952, 44)</value> </param> <param> <key>_rotation</key> @@ -566,7 +673,7 @@ </param> <param> <key>_coordinate</key> - <value>(408, 73)</value> + <value>(456, 64)</value> </param> <param> <key>_rotation</key> @@ -586,46 +693,50 @@ </param> </block> <block> - <key>dtv_dvbt_reed_solomon_enc</key> + <key>dtv_dvbt_inner_coder</key> <param> <key>alias</key> <value></value> </param> <param> - <key>blocks</key> - <value>8</value> + <key>code_rate</key> + <value>C7_8</value> </param> <param> <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>qpsk</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> - <value>1</value> - </param> - <param> - <key>gfpoly</key> - <value>0x11d</value> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(600, 19)</value> + <value>(248, 208)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> + <key>hierarchy</key> + <value>nh</value> + </param> + <param> <key>id</key> - <value>dtv_dvbt_reed_solomon_enc_0</value> + <value>dtv_dvbt_inner_coder_0</value> </param> <param> - <key>k</key> - <value>239</value> + <key>ninput</key> + <value>1</value> </param> <param> <key>maxoutbuf</key> @@ -636,33 +747,21 @@ <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> + <key>noutput</key> + <value>1512</value> </param> </block> <block> - <key>fec_puncture_xx</key> + <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> @@ -671,16 +770,16 @@ <value></value> </param> <param> - <key>delay</key> - <value>0</value> - </param> - <param> <key>_enabled</key> <value>1</value> </param> <param> + <key>gfpoly</key> + <value>0x11d</value> + </param> + <param> <key>_coordinate</key> - <value>(600, 219)</value> + <value>(680, 16)</value> </param> <param> <key>_rotation</key> @@ -688,7 +787,11 @@ </param> <param> <key>id</key> - <value>fec_puncture_xx_0</value> + <value>dtv_dvbt_reed_solomon_enc_0</value> + </param> + <param> + <key>k</key> + <value>239</value> </param> <param> <key>maxoutbuf</key> @@ -699,16 +802,24 @@ <value>0</value> </param> <param> - <key>puncpat</key> - <value>0b11010101100110</value> + <key>n</key> + <value>255</value> </param> <param> - <key>puncsize</key> - <value>14</value> + <key>s</key> + <value>51</value> </param> <param> - <key>type</key> - <value>byte</value> + <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> @@ -731,11 +842,11 @@ </param> <param> <key>_enabled</key> - <value>True</value> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(584, 435)</value> + <value>(496, 380)</value> </param> <param> <key>_rotation</key> @@ -782,7 +893,7 @@ </param> <param> <key>bb_gain0</key> - <value>-10</value> + <value>vga1_gain</value> </param> <param> <key>bw0</key> @@ -794,7 +905,7 @@ </param> <param> <key>freq0</key> - <value>frequency</value> + <value>center_freq</value> </param> <param> <key>if_gain0</key> @@ -802,7 +913,7 @@ </param> <param> <key>gain0</key> - <value>15</value> + <value>vga2_gain</value> </param> <param> <key>ant10</key> @@ -1686,11 +1797,11 @@ </param> <param> <key>_enabled</key> - <value>0</value> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(1064, 211)</value> + <value>(1056, 228)</value> </param> <param> <key>_rotation</key> @@ -1786,50 +1897,234 @@ </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>qtgui_freq_sink_x</key> <param> - <key>alias</key> - <value></value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>blocklength</key> - <value>0</value> + <key>average</key> + <value>0.2</value> </param> <param> - <key>blockwise</key> - <value>False</value> + <key>axislabels</key> + <value>True</value> + </param> + <param> + <key>bw</key> + <value>samp_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>fc</key> + <value>center_freq</value> </param> <param> <key>comment</key> <value></value> </param> <param> + <key>ctrlpanel</key> + <value>False</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> <key>_enabled</key> - <value>1</value> + <value>True</value> </param> <param> - <key>fsm_args</key> - <value>1, 2, (0171, 0133)</value> + <key>fftsize</key> + <value>1024</value> </param> <param> <key>_coordinate</key> - <value>(176, 227)</value> + <value>(864, 188)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> <param> + <key>grid</key> + <value>True</value> + </param> + <param> <key>id</key> - <value>trellis_encoder_xx_0</value> + <value>qtgui_freq_sink_x_0</value> </param> <param> - <key>init_state</key> - <value>0</value> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>alpha10</key> + <value>1.0</value> + </param> + <param> + <key>color10</key> + <value>"dark blue"</value> + </param> + <param> + <key>label10</key> + <value></value> + </param> + <param> + <key>width10</key> + <value>1</value> + </param> + <param> + <key>alpha2</key> + <value>1.0</value> + </param> + <param> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> + <value></value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>label3</key> + <value></value> + </param> + <param> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>"black"</value> + </param> + <param> + <key>label4</key> + <value></value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>"cyan"</value> + </param> + <param> + <key>label5</key> + <value></value> + </param> + <param> + <key>width5</key> + <value>1</value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>"yellow"</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>width9</key> + <value>1</value> </param> <param> <key>maxoutbuf</key> @@ -1840,8 +2135,64 @@ <value>0</value> </param> <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> <key>type</key> - <value>bb</value> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + <param> + <key>label</key> + <value>Relative Gain</value> + </param> + <param> + <key>ymax</key> + <value>10</value> + </param> + <param> + <key>ymin</key> + <value>-140</value> + </param> + <param> + <key>units</key> + <value>dB</value> </param> </block> <block> @@ -1860,7 +2211,7 @@ </param> <param> <key>center_freq0</key> - <value>uhd.tune_request(frequency, ((symbol_rate * 1.35) / 2 ) + 1e5)</value> + <value>uhd.tune_request(center_freq, ((symbol_rate * 1.35) / 2 ) + 1e5)</value> </param> <param> <key>norm_gain0</key> @@ -1868,7 +2219,7 @@ </param> <param> <key>gain0</key> - <value>60</value> + <value>tx_gain</value> </param> <param> <key>ant10</key> @@ -2512,11 +2863,11 @@ </param> <param> <key>_enabled</key> - <value>1</value> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(1064, 403)</value> + <value>(1064, 392)</value> </param> <param> <key>_rotation</key> @@ -2643,6 +2994,10 @@ <value>False</value> </param> <param> + <key>hide_lo_controls</key> + <value>True</value> + </param> + <param> <key>stream_args</key> <value></value> </param> @@ -2663,109 +3018,6 @@ <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> @@ -2773,24 +3025,12 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_pack_k_bits_bb_0</source_block_id> + <source_block_id>blocks_vector_to_stream_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> @@ -2798,7 +3038,7 @@ </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> + <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2809,14 +3049,14 @@ <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_block_id>dtv_dvbt_inner_coder_0</source_block_id> + <sink_block_id>blocks_vector_to_stream_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_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> @@ -2834,19 +3074,13 @@ </connection> <connection> <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>uhd_usrp_sink_0_0</sink_block_id> + <sink_block_id>qtgui_freq_sink_x_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> + <sink_block_id>uhd_usrp_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/dvbt_rx_8k.grc b/gr-dtv/examples/dvbt_rx_8k.grc index b1a88a6d3a..7db1aac0a5 100644 --- a/gr-dtv/examples/dvbt_rx_8k.grc +++ b/gr-dtv/examples/dvbt_rx_8k.grc @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='utf-8'?> -<?grc format='1' created='3.7.9'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Thu Feb 13 17:44:54 2014</timestamp> <block> @@ -9,10 +9,6 @@ <value></value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>window_size</key> <value>1280, 1024</value> </param> @@ -45,6 +41,10 @@ <value>qt_gui</value> </param> <param> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> <key>id</key> <value>dvbt_rx_demo_8k</value> </param> @@ -53,10 +53,18 @@ <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> @@ -85,6 +93,33 @@ </param> <param> <key>_coordinate</key> + <value>(176, 12)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>center_freq</value> + </param> + <param> + <key>value</key> + <value>429e6</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> @@ -128,7 +163,7 @@ </param> <param> <key>_coordinate</key> - <value>(1072, 499)</value> + <value>(1080, 484)</value> </param> <param> <key>_rotation</key> @@ -175,7 +210,7 @@ </param> <param> <key>_coordinate</key> - <value>(112, 75)</value> + <value>(128, 76)</value> </param> <param> <key>_rotation</key> @@ -281,7 +316,7 @@ </param> <param> <key>_coordinate</key> - <value>(968, 275)</value> + <value>(968, 284)</value> </param> <param> <key>_rotation</key> @@ -383,7 +418,7 @@ </param> <param> <key>_coordinate</key> - <value>(112, 371)</value> + <value>(144, 372)</value> </param> <param> <key>_rotation</key> @@ -438,7 +473,7 @@ </param> <param> <key>_coordinate</key> - <value>(360, 363)</value> + <value>(376, 364)</value> </param> <param> <key>_rotation</key> @@ -493,7 +528,7 @@ </param> <param> <key>_coordinate</key> - <value>(360, 499)</value> + <value>(360, 484)</value> </param> <param> <key>_rotation</key> @@ -540,7 +575,7 @@ </param> <param> <key>_coordinate</key> - <value>(920, 347)</value> + <value>(928, 352)</value> </param> <param> <key>_rotation</key> @@ -607,7 +642,7 @@ </param> <param> <key>_coordinate</key> - <value>(880, 19)</value> + <value>(896, 12)</value> </param> <param> <key>_rotation</key> @@ -670,7 +705,7 @@ </param> <param> <key>_coordinate</key> - <value>(864, 515)</value> + <value>(872, 500)</value> </param> <param> <key>_rotation</key> @@ -717,7 +752,7 @@ </param> <param> <key>_coordinate</key> - <value>(368, 59)</value> + <value>(368, 48)</value> </param> <param> <key>_rotation</key> @@ -776,7 +811,7 @@ </param> <param> <key>_coordinate</key> - <value>(632, 467)</value> + <value>(632, 456)</value> </param> <param> <key>_rotation</key> @@ -843,7 +878,7 @@ </param> <param> <key>_coordinate</key> - <value>(632, 363)</value> + <value>(640, 364)</value> </param> <param> <key>_rotation</key> @@ -898,7 +933,7 @@ </param> <param> <key>_coordinate</key> - <value>(80, 491)</value> + <value>(80, 480)</value> </param> <param> <key>_rotation</key> @@ -953,7 +988,7 @@ </param> <param> <key>_coordinate</key> - <value>(624, 51)</value> + <value>(640, 40)</value> </param> <param> <key>_rotation</key> @@ -995,6 +1030,10 @@ <value>True</value> </param> <param> + <key>axislabels</key> + <value>True</value> + </param> + <param> <key>alias</key> <value></value> </param> @@ -1012,7 +1051,7 @@ </param> <param> <key>_coordinate</key> - <value>(680, 267)</value> + <value>(688, 276)</value> </param> <param> <key>gui_hint</key> @@ -1338,6 +1377,10 @@ <value>True</value> </param> <param> + <key>axislabels</key> + <value>True</value> + </param> + <param> <key>alias</key> <value></value> </param> @@ -1682,7 +1725,11 @@ </param> <param> <key>average</key> - <value>1.0</value> + <value>0.2</value> + </param> + <param> + <key>axislabels</key> + <value>True</value> </param> <param> <key>bw</key> @@ -1694,7 +1741,7 @@ </param> <param> <key>fc</key> - <value>429000000</value> + <value>center_freq</value> </param> <param> <key>comment</key> @@ -1730,7 +1777,7 @@ </param> <param> <key>grid</key> - <value>False</value> + <value>True</value> </param> <param> <key>id</key> @@ -1953,6 +2000,10 @@ <value>firdes.WIN_BLACKMAN_hARRIS</value> </param> <param> + <key>label</key> + <value>Relative Gain</value> + </param> + <param> <key>ymax</key> <value>-10</value> </param> @@ -1960,6 +2011,10 @@ <key>ymin</key> <value>-170</value> </param> + <param> + <key>units</key> + <value>dB</value> + </param> </block> <block> <key>uhd_usrp_source</key> @@ -1977,7 +2032,15 @@ </param> <param> <key>center_freq0</key> - <value>429000000</value> + <value>center_freq</value> + </param> + <param> + <key>dc_offs_enb0</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb0</key> + <value>""</value> </param> <param> <key>norm_gain0</key> @@ -1988,6 +2051,14 @@ <value>30</value> </param> <param> + <key>lo_export0</key> + <value>False</value> + </param> + <param> + <key>lo_source0</key> + <value>internal</value> + </param> + <param> <key>ant10</key> <value></value> </param> @@ -2000,6 +2071,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb10</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb10</key> + <value>""</value> + </param> + <param> <key>norm_gain10</key> <value>False</value> </param> @@ -2008,6 +2087,14 @@ <value>0</value> </param> <param> + <key>lo_export10</key> + <value>False</value> + </param> + <param> + <key>lo_source10</key> + <value>internal</value> + </param> + <param> <key>ant11</key> <value></value> </param> @@ -2020,6 +2107,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb11</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb11</key> + <value>""</value> + </param> + <param> <key>norm_gain11</key> <value>False</value> </param> @@ -2028,6 +2123,14 @@ <value>0</value> </param> <param> + <key>lo_export11</key> + <value>False</value> + </param> + <param> + <key>lo_source11</key> + <value>internal</value> + </param> + <param> <key>ant12</key> <value></value> </param> @@ -2040,6 +2143,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb12</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb12</key> + <value>""</value> + </param> + <param> <key>norm_gain12</key> <value>False</value> </param> @@ -2048,6 +2159,14 @@ <value>0</value> </param> <param> + <key>lo_export12</key> + <value>False</value> + </param> + <param> + <key>lo_source12</key> + <value>internal</value> + </param> + <param> <key>ant13</key> <value></value> </param> @@ -2060,6 +2179,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb13</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb13</key> + <value>""</value> + </param> + <param> <key>norm_gain13</key> <value>False</value> </param> @@ -2068,6 +2195,14 @@ <value>0</value> </param> <param> + <key>lo_export13</key> + <value>False</value> + </param> + <param> + <key>lo_source13</key> + <value>internal</value> + </param> + <param> <key>ant14</key> <value></value> </param> @@ -2080,6 +2215,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb14</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb14</key> + <value>""</value> + </param> + <param> <key>norm_gain14</key> <value>False</value> </param> @@ -2088,6 +2231,14 @@ <value>0</value> </param> <param> + <key>lo_export14</key> + <value>False</value> + </param> + <param> + <key>lo_source14</key> + <value>internal</value> + </param> + <param> <key>ant15</key> <value></value> </param> @@ -2100,6 +2251,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb15</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb15</key> + <value>""</value> + </param> + <param> <key>norm_gain15</key> <value>False</value> </param> @@ -2108,6 +2267,14 @@ <value>0</value> </param> <param> + <key>lo_export15</key> + <value>False</value> + </param> + <param> + <key>lo_source15</key> + <value>internal</value> + </param> + <param> <key>ant16</key> <value></value> </param> @@ -2120,6 +2287,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb16</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb16</key> + <value>""</value> + </param> + <param> <key>norm_gain16</key> <value>False</value> </param> @@ -2128,6 +2303,14 @@ <value>0</value> </param> <param> + <key>lo_export16</key> + <value>False</value> + </param> + <param> + <key>lo_source16</key> + <value>internal</value> + </param> + <param> <key>ant17</key> <value></value> </param> @@ -2140,6 +2323,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb17</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb17</key> + <value>""</value> + </param> + <param> <key>norm_gain17</key> <value>False</value> </param> @@ -2148,6 +2339,14 @@ <value>0</value> </param> <param> + <key>lo_export17</key> + <value>False</value> + </param> + <param> + <key>lo_source17</key> + <value>internal</value> + </param> + <param> <key>ant18</key> <value></value> </param> @@ -2160,6 +2359,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb18</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb18</key> + <value>""</value> + </param> + <param> <key>norm_gain18</key> <value>False</value> </param> @@ -2168,6 +2375,14 @@ <value>0</value> </param> <param> + <key>lo_export18</key> + <value>False</value> + </param> + <param> + <key>lo_source18</key> + <value>internal</value> + </param> + <param> <key>ant19</key> <value></value> </param> @@ -2180,6 +2395,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb19</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb19</key> + <value>""</value> + </param> + <param> <key>norm_gain19</key> <value>False</value> </param> @@ -2188,6 +2411,14 @@ <value>0</value> </param> <param> + <key>lo_export19</key> + <value>False</value> + </param> + <param> + <key>lo_source19</key> + <value>internal</value> + </param> + <param> <key>ant1</key> <value></value> </param> @@ -2200,6 +2431,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb1</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb1</key> + <value>""</value> + </param> + <param> <key>norm_gain1</key> <value>False</value> </param> @@ -2208,6 +2447,14 @@ <value>0</value> </param> <param> + <key>lo_export1</key> + <value>False</value> + </param> + <param> + <key>lo_source1</key> + <value>internal</value> + </param> + <param> <key>ant20</key> <value></value> </param> @@ -2220,6 +2467,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb20</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb20</key> + <value>""</value> + </param> + <param> <key>norm_gain20</key> <value>False</value> </param> @@ -2228,6 +2483,14 @@ <value>0</value> </param> <param> + <key>lo_export20</key> + <value>False</value> + </param> + <param> + <key>lo_source20</key> + <value>internal</value> + </param> + <param> <key>ant21</key> <value></value> </param> @@ -2240,6 +2503,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb21</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb21</key> + <value>""</value> + </param> + <param> <key>norm_gain21</key> <value>False</value> </param> @@ -2248,6 +2519,14 @@ <value>0</value> </param> <param> + <key>lo_export21</key> + <value>False</value> + </param> + <param> + <key>lo_source21</key> + <value>internal</value> + </param> + <param> <key>ant22</key> <value></value> </param> @@ -2260,6 +2539,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb22</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb22</key> + <value>""</value> + </param> + <param> <key>norm_gain22</key> <value>False</value> </param> @@ -2268,6 +2555,14 @@ <value>0</value> </param> <param> + <key>lo_export22</key> + <value>False</value> + </param> + <param> + <key>lo_source22</key> + <value>internal</value> + </param> + <param> <key>ant23</key> <value></value> </param> @@ -2280,6 +2575,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb23</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb23</key> + <value>""</value> + </param> + <param> <key>norm_gain23</key> <value>False</value> </param> @@ -2288,6 +2591,14 @@ <value>0</value> </param> <param> + <key>lo_export23</key> + <value>False</value> + </param> + <param> + <key>lo_source23</key> + <value>internal</value> + </param> + <param> <key>ant24</key> <value></value> </param> @@ -2300,6 +2611,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb24</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb24</key> + <value>""</value> + </param> + <param> <key>norm_gain24</key> <value>False</value> </param> @@ -2308,6 +2627,14 @@ <value>0</value> </param> <param> + <key>lo_export24</key> + <value>False</value> + </param> + <param> + <key>lo_source24</key> + <value>internal</value> + </param> + <param> <key>ant25</key> <value></value> </param> @@ -2320,6 +2647,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb25</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb25</key> + <value>""</value> + </param> + <param> <key>norm_gain25</key> <value>False</value> </param> @@ -2328,6 +2663,14 @@ <value>0</value> </param> <param> + <key>lo_export25</key> + <value>False</value> + </param> + <param> + <key>lo_source25</key> + <value>internal</value> + </param> + <param> <key>ant26</key> <value></value> </param> @@ -2340,6 +2683,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb26</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb26</key> + <value>""</value> + </param> + <param> <key>norm_gain26</key> <value>False</value> </param> @@ -2348,6 +2699,14 @@ <value>0</value> </param> <param> + <key>lo_export26</key> + <value>False</value> + </param> + <param> + <key>lo_source26</key> + <value>internal</value> + </param> + <param> <key>ant27</key> <value></value> </param> @@ -2360,6 +2719,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb27</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb27</key> + <value>""</value> + </param> + <param> <key>norm_gain27</key> <value>False</value> </param> @@ -2368,6 +2735,14 @@ <value>0</value> </param> <param> + <key>lo_export27</key> + <value>False</value> + </param> + <param> + <key>lo_source27</key> + <value>internal</value> + </param> + <param> <key>ant28</key> <value></value> </param> @@ -2380,6 +2755,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb28</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb28</key> + <value>""</value> + </param> + <param> <key>norm_gain28</key> <value>False</value> </param> @@ -2388,6 +2771,14 @@ <value>0</value> </param> <param> + <key>lo_export28</key> + <value>False</value> + </param> + <param> + <key>lo_source28</key> + <value>internal</value> + </param> + <param> <key>ant29</key> <value></value> </param> @@ -2400,6 +2791,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb29</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb29</key> + <value>""</value> + </param> + <param> <key>norm_gain29</key> <value>False</value> </param> @@ -2408,6 +2807,14 @@ <value>0</value> </param> <param> + <key>lo_export29</key> + <value>False</value> + </param> + <param> + <key>lo_source29</key> + <value>internal</value> + </param> + <param> <key>ant2</key> <value></value> </param> @@ -2420,6 +2827,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb2</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb2</key> + <value>""</value> + </param> + <param> <key>norm_gain2</key> <value>False</value> </param> @@ -2428,6 +2843,14 @@ <value>0</value> </param> <param> + <key>lo_export2</key> + <value>False</value> + </param> + <param> + <key>lo_source2</key> + <value>internal</value> + </param> + <param> <key>ant30</key> <value></value> </param> @@ -2440,6 +2863,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb30</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb30</key> + <value>""</value> + </param> + <param> <key>norm_gain30</key> <value>False</value> </param> @@ -2448,6 +2879,14 @@ <value>0</value> </param> <param> + <key>lo_export30</key> + <value>False</value> + </param> + <param> + <key>lo_source30</key> + <value>internal</value> + </param> + <param> <key>ant31</key> <value></value> </param> @@ -2460,6 +2899,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb31</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb31</key> + <value>""</value> + </param> + <param> <key>norm_gain31</key> <value>False</value> </param> @@ -2468,6 +2915,14 @@ <value>0</value> </param> <param> + <key>lo_export31</key> + <value>False</value> + </param> + <param> + <key>lo_source31</key> + <value>internal</value> + </param> + <param> <key>ant3</key> <value></value> </param> @@ -2480,6 +2935,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb3</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb3</key> + <value>""</value> + </param> + <param> <key>norm_gain3</key> <value>False</value> </param> @@ -2488,6 +2951,14 @@ <value>0</value> </param> <param> + <key>lo_export3</key> + <value>False</value> + </param> + <param> + <key>lo_source3</key> + <value>internal</value> + </param> + <param> <key>ant4</key> <value></value> </param> @@ -2500,6 +2971,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb4</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb4</key> + <value>""</value> + </param> + <param> <key>norm_gain4</key> <value>False</value> </param> @@ -2508,6 +2987,14 @@ <value>0</value> </param> <param> + <key>lo_export4</key> + <value>False</value> + </param> + <param> + <key>lo_source4</key> + <value>internal</value> + </param> + <param> <key>ant5</key> <value></value> </param> @@ -2520,6 +3007,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb5</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb5</key> + <value>""</value> + </param> + <param> <key>norm_gain5</key> <value>False</value> </param> @@ -2528,6 +3023,14 @@ <value>0</value> </param> <param> + <key>lo_export5</key> + <value>False</value> + </param> + <param> + <key>lo_source5</key> + <value>internal</value> + </param> + <param> <key>ant6</key> <value></value> </param> @@ -2540,6 +3043,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb6</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb6</key> + <value>""</value> + </param> + <param> <key>norm_gain6</key> <value>False</value> </param> @@ -2548,6 +3059,14 @@ <value>0</value> </param> <param> + <key>lo_export6</key> + <value>False</value> + </param> + <param> + <key>lo_source6</key> + <value>internal</value> + </param> + <param> <key>ant7</key> <value></value> </param> @@ -2560,6 +3079,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb7</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb7</key> + <value>""</value> + </param> + <param> <key>norm_gain7</key> <value>False</value> </param> @@ -2568,6 +3095,14 @@ <value>0</value> </param> <param> + <key>lo_export7</key> + <value>False</value> + </param> + <param> + <key>lo_source7</key> + <value>internal</value> + </param> + <param> <key>ant8</key> <value></value> </param> @@ -2580,6 +3115,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb8</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb8</key> + <value>""</value> + </param> + <param> <key>norm_gain8</key> <value>False</value> </param> @@ -2588,6 +3131,14 @@ <value>0</value> </param> <param> + <key>lo_export8</key> + <value>False</value> + </param> + <param> + <key>lo_source8</key> + <value>internal</value> + </param> + <param> <key>ant9</key> <value></value> </param> @@ -2600,6 +3151,14 @@ <value>0</value> </param> <param> + <key>dc_offs_enb9</key> + <value>""</value> + </param> + <param> + <key>iq_imbal_enb9</key> + <value>""</value> + </param> + <param> <key>norm_gain9</key> <value>False</value> </param> @@ -2608,6 +3167,14 @@ <value>0</value> </param> <param> + <key>lo_export9</key> + <value>False</value> + </param> + <param> + <key>lo_source9</key> + <value>internal</value> + </param> + <param> <key>clock_rate</key> <value>0.0</value> </param> @@ -2633,7 +3200,7 @@ </param> <param> <key>_coordinate</key> - <value>(48, 243)</value> + <value>(32, 240)</value> </param> <param> <key>_rotation</key> @@ -2764,6 +3331,14 @@ <value>samp_rate</value> </param> <param> + <key>hide_cmd_port</key> + <value>False</value> + </param> + <param> + <key>hide_lo_controls</key> + <value>True</value> + </param> + <param> <key>stream_args</key> <value></value> </param> diff --git a/gr-dtv/examples/dvbt_tx_2k.grc b/gr-dtv/examples/dvbt_tx_2k.grc index 3db36aedcf..b061fefadd 100644 --- a/gr-dtv/examples/dvbt_tx_2k.grc +++ b/gr-dtv/examples/dvbt_tx_2k.grc @@ -1,1019 +1,2020 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.8'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Thu Jan 16 23:00:58 2014</timestamp> <block> - <key>dtv_dvbt_bit_inner_interleaver</key> + <key>options</key> <param> - <key>id</key> - <value>dtv_dvbt_bit_inner_interleaver_0</value> + <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>constellation</key> - <value>64qam</value> + <key>_coordinate</key> + <value>(8, 12)</value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>transmission_mode</key> - <value>T2k</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>alias</key> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>dvbt_tx_demo</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>affinity</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <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>(984, 243)</value> + <value>(176, 12)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> + </param> + <param> + <key>id</key> + <value>center_freq</value> + </param> + <param> + <key>value</key> + <value>429e6</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, 76)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> <key>value</key> <value>(8000000.0 * 8) / 7</value> </param> + </block> + <block> + <key>variable_qtgui_range</key> <param> - <key>alias</key> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>50</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(240, 496)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>tx_gain</value> + </param> + <param> + <key>label</key> <value></value> </param> <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>89</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> <key>comment</key> <value></value> </param> <param> + <key>value</key> + <value>-8</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 83)</value> + <value>(8, 496)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>vga1_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>-35</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>-4</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> </block> <block> - <key>dtv_dvbt_symbol_inner_interleaver</key> + <key>variable_qtgui_range</key> <param> - <key>id</key> - <value>dtv_dvbt_symbol_inner_interleaver_0</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>10</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>transmission_mode</key> - <value>T2k</value> + <key>_coordinate</key> + <value>(120, 496)</value> </param> <param> - <key>direction</key> - <value>Interleave</value> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>vga2_gain</value> + </param> + <param> + <key>label</key> + <value></value> </param> <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>25</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</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>minoutbuf</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>file</key> + <value>/run/shm/adv8dvbt23qam64.ts</value> + </param> + <param> + <key>_coordinate</key> + <value>(120, 76)</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_multiply_const_xx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> <key>comment</key> <value></value> </param> <param> + <key>const</key> + <value>0.0022097087</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(664, 243)</value> + <value>(696, 420)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_multiply_const_xx_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>qtgui_const_sink_x</key> + <key>blocks_vector_to_stream</key> <param> - <key>id</key> - <value>qtgui_const_sink_x_0</value> + <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>(120, 332)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_vector_to_stream_0</value> + </param> + <param> <key>type</key> <value>complex</value> </param> <param> - <key>name</key> - <value>""</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>size</key> - <value>1024</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>grid</key> - <value>False</value> + <key>num_items</key> + <value>2048</value> </param> <param> - <key>autoscale</key> - <value>False</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>digital_ofdm_cyclic_prefixer</key> <param> - <key>ymin</key> - <value>-2</value> + <key>alias</key> + <value></value> </param> <param> - <key>ymax</key> - <value>2</value> + <key>cp_len</key> + <value>64</value> </param> <param> - <key>xmin</key> - <value>-2</value> + <key>comment</key> + <value></value> </param> <param> - <key>xmax</key> - <value>2</value> + <key>affinity</key> + <value></value> </param> <param> - <key>nconnections</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>update_time</key> - <value>0.10</value> + <key>input_size</key> + <value>2048</value> </param> <param> - <key>gui_hint</key> - <value></value> + <key>_coordinate</key> + <value>(392, 400)</value> </param> <param> - <key>tr_mode</key> - <value>qtgui.TRIG_MODE_FREE</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>tr_slope</key> - <value>qtgui.TRIG_SLOPE_POS</value> + <key>id</key> + <value>digital_ofdm_cyclic_prefixer_0</value> </param> <param> - <key>tr_level</key> - <value>0.0</value> + <key>tagname</key> + <value></value> </param> <param> - <key>tr_chan</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>tr_tag</key> - <value>""</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>legend</key> - <value>True</value> + <key>rolloff</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbt_bit_inner_interleaver</key> <param> - <key>label1</key> + <key>alias</key> <value></value> </param> <param> - <key>width1</key> - <value>1</value> + <key>comment</key> + <value></value> </param> <param> - <key>color1</key> - <value>"blue"</value> + <key>constellation</key> + <value>64qam</value> </param> <param> - <key>style1</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>marker1</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>alpha1</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(984, 204)</value> </param> <param> - <key>label2</key> - <value></value> + <key>_rotation</key> + <value>180</value> </param> <param> - <key>width2</key> - <value>1</value> + <key>hierarchy</key> + <value>nh</value> </param> <param> - <key>color2</key> - <value>"red"</value> + <key>id</key> + <value>dtv_dvbt_bit_inner_interleaver_0</value> </param> <param> - <key>style2</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>marker2</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>alpha2</key> - <value>1.0</value> + <key>transmission_mode</key> + <value>T2k</value> </param> + </block> + <block> + <key>dtv_dvbt_convolutional_interleaver</key> <param> - <key>label3</key> + <key>alias</key> <value></value> </param> <param> - <key>width3</key> - <value>1</value> + <key>blocks</key> + <value>136</value> </param> <param> - <key>color3</key> - <value>"red"</value> + <key>comment</key> + <value></value> </param> <param> - <key>style3</key> + <key>affinity</key> + <value></value> + </param> + <param> + <key>M</key> + <value>17</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(776, 52)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker3</key> + <key>id</key> + <value>dtv_dvbt_convolutional_interleaver_0</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>alpha3</key> - <value>1.0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>label4</key> + <key>I</key> + <value>12</value> + </param> + </block> + <block> + <key>dtv_dvbt_energy_dispersal</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>width4</key> + <key>nsize</key> <value>1</value> </param> <param> - <key>color4</key> - <value>"red"</value> + <key>comment</key> + <value></value> </param> <param> - <key>style4</key> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(352, 72)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker4</key> + <key>id</key> + <value>dtv_dvbt_energy_dispersal_0</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>alpha4</key> - <value>1.0</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbt_inner_coder</key> <param> - <key>label5</key> + <key>alias</key> <value></value> </param> <param> - <key>width5</key> - <value>1</value> + <key>code_rate</key> + <value>C2_3</value> </param> <param> - <key>color5</key> - <value>"red"</value> + <key>comment</key> + <value></value> </param> <param> - <key>style5</key> - <value>0</value> + <key>constellation</key> + <value>64qam</value> </param> <param> - <key>marker5</key> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(1032, 48)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>alpha5</key> - <value>1.0</value> + <key>hierarchy</key> + <value>nh</value> </param> <param> - <key>label6</key> - <value></value> + <key>id</key> + <value>dtv_dvbt_inner_coder_0</value> </param> <param> - <key>width6</key> + <key>ninput</key> <value>1</value> </param> <param> - <key>color6</key> - <value>"red"</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>style6</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>marker6</key> - <value>0</value> + <key>noutput</key> + <value>1512</value> </param> + </block> + <block> + <key>dtv_dvbt_map</key> <param> - <key>alpha6</key> - <value>1.0</value> + <key>alias</key> + <value></value> </param> <param> - <key>label7</key> + <key>comment</key> <value></value> </param> <param> - <key>width7</key> + <key>constellation</key> + <value>64qam</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(368, 192)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>gain</key> <value>1</value> </param> <param> - <key>color7</key> - <value>"red"</value> + <key>hierarchy</key> + <value>nh</value> </param> <param> - <key>style7</key> + <key>id</key> + <value>dtv_dvbt_map_0</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>marker7</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>alpha7</key> - <value>1.0</value> + <key>transmission_mode</key> + <value>T2k</value> </param> + </block> + <block> + <key>dtv_dvbt_reed_solomon_enc</key> <param> - <key>label8</key> + <key>alias</key> <value></value> </param> <param> - <key>width8</key> - <value>1</value> + <key>blocks</key> + <value>8</value> </param> <param> - <key>color8</key> - <value>"red"</value> + <key>comment</key> + <value></value> </param> <param> - <key>style8</key> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>gfpoly</key> + <value>0x11d</value> + </param> + <param> + <key>_coordinate</key> + <value>(544, 24)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker8</key> + <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>alpha8</key> - <value>1.0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>label9</key> - <value></value> + <key>n</key> + <value>255</value> </param> <param> - <key>width9</key> - <value>1</value> + <key>s</key> + <value>51</value> </param> <param> - <key>color9</key> - <value>"red"</value> + <key>m</key> + <value>8</value> </param> <param> - <key>style9</key> - <value>0</value> + <key>p</key> + <value>2</value> </param> <param> - <key>marker9</key> + <key>t</key> + <value>8</value> + </param> + </block> + <block> + <key>dtv_dvbt_reference_signals</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>cell_id</key> <value>0</value> </param> <param> - <key>alpha9</key> - <value>1.0</value> + <key>code_rate_hp</key> + <value>C2_3</value> </param> <param> - <key>label10</key> + <key>code_rate_lp</key> + <value>C2_3</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> - <key>width10</key> - <value>1</value> + <key>constellation</key> + <value>64qam</value> </param> <param> - <key>color10</key> - <value>"red"</value> + <key>affinity</key> + <value></value> </param> <param> - <key>style10</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(48, 156)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>guard_interval</key> + <value>GI_1_32</value> + </param> + <param> + <key>hierarchy</key> + <value>nh</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_reference_signals_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>include_cell_id</key> + <value>call_id_yes</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>marker10</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>alpha10</key> - <value>1.0</value> + <key>transmission_mode</key> + <value>T2k</value> </param> + </block> + <block> + <key>dtv_dvbt_symbol_inner_interleaver</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>comment</key> + <key>affinity</key> <value></value> </param> <param> + <key>direction</key> + <value>Interleave</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(360, 555)</value> + <value>(672, 204)</value> </param> <param> <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_symbol_inner_interleaver_0</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>transmission_mode</key> + <value>T2k</value> + </param> </block> <block> - <key>blocks_vector_to_stream</key> + <key>fft_vxx</key> <param> - <key>id</key> - <value>blocks_vector_to_stream_0</value> + <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>2048</value> + </param> + <param> + <key>forward</key> + <value>False</value> + </param> + <param> + <key>_coordinate</key> + <value>(88, 392)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fft_vxx_0</value> + </param> + <param> <key>type</key> <value>complex</value> </param> <param> - <key>num_items</key> - <value>2048</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>vlen</key> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>nthreads</key> <value>1</value> </param> <param> + <key>shift</key> + <value>True</value> + </param> + <param> + <key>window</key> + <value>window.rectangular(2048)</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>vga1_gain</value> + </param> + <param> + <key>bw0</key> + <value>8750000</value> + </param> + <param> + <key>corr0</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>freq0</key> + <value>center_freq</value> + </param> + <param> + <key>if_gain0</key> <value>0</value> </param> <param> - <key>comment</key> + <key>gain0</key> + <value>vga2_gain</value> + </param> + <param> + <key>ant10</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(120, 563)</value> + <key>bb_gain10</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw10</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_energy_dispersal</key> <param> - <key>id</key> - <value>dtv_dvbt_energy_dispersal_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>nsize</key> - <value>1</value> + <key>if_gain10</key> + <value>20</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain10</key> + <value>10</value> </param> <param> - <key>affinity</key> + <key>ant11</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bb_gain11</key> + <value>20</value> + </param> + <param> + <key>bw11</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr11</key> <value>0</value> </param> <param> - <key>comment</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>_coordinate</key> - <value>(328, 96)</value> + <key>bb_gain12</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw12</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_reed_solomon_enc</key> <param> - <key>id</key> - <value>dtv_dvbt_reed_solomon_enc_0</value> + <key>corr12</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq12</key> + <value>100e6</value> </param> <param> - <key>p</key> - <value>2</value> + <key>if_gain12</key> + <value>20</value> </param> <param> - <key>m</key> - <value>8</value> + <key>gain12</key> + <value>10</value> </param> <param> - <key>gfpoly</key> - <value>0x11d</value> + <key>ant13</key> + <value></value> </param> <param> - <key>n</key> - <value>255</value> + <key>bb_gain13</key> + <value>20</value> </param> <param> - <key>k</key> - <value>239</value> + <key>bw13</key> + <value>0</value> </param> <param> - <key>t</key> - <value>8</value> + <key>corr13</key> + <value>0</value> </param> <param> - <key>s</key> - <value>51</value> + <key>freq13</key> + <value>100e6</value> </param> <param> - <key>blocks</key> - <value>8</value> + <key>if_gain13</key> + <value>20</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain13</key> + <value>10</value> </param> <param> - <key>affinity</key> + <key>ant14</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bb_gain14</key> + <value>20</value> + </param> + <param> + <key>bw14</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr14</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(512, 43)</value> + <key>bb_gain15</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw15</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_convolutional_interleaver</key> <param> - <key>id</key> - <value>dtv_dvbt_convolutional_interleaver_0</value> + <key>corr15</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq15</key> + <value>100e6</value> </param> <param> - <key>blocks</key> - <value>136</value> + <key>if_gain15</key> + <value>20</value> </param> <param> - <key>I</key> - <value>12</value> + <key>gain15</key> + <value>10</value> </param> <param> - <key>M</key> - <value>17</value> + <key>ant16</key> + <value></value> </param> <param> - <key>alias</key> + <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>affinity</key> + <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>minoutbuf</key> + <key>bb_gain18</key> + <value>20</value> + </param> + <param> + <key>bw18</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr18</key> <value>0</value> </param> <param> - <key>comment</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>ant19</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(736, 75)</value> + <key>bb_gain19</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw19</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_inner_coder</key> <param> - <key>id</key> - <value>dtv_dvbt_inner_coder_0</value> + <key>corr19</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq19</key> + <value>100e6</value> </param> <param> - <key>ninput</key> - <value>1</value> + <key>if_gain19</key> + <value>20</value> </param> <param> - <key>noutput</key> - <value>1512</value> + <key>gain19</key> + <value>10</value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>ant1</key> + <value></value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>bb_gain1</key> + <value>20</value> </param> <param> - <key>code_rate</key> - <value>C2_3</value> + <key>bw1</key> + <value>0</value> </param> <param> - <key>alias</key> + <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>affinity</key> + <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>minoutbuf</key> + <key>bb_gain21</key> + <value>20</value> + </param> + <param> + <key>bw21</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr21</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(1000, 67)</value> + <key>bb_gain22</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw22</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_map</key> <param> - <key>id</key> - <value>dtv_dvbt_map_0</value> + <key>corr22</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq22</key> + <value>100e6</value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>if_gain22</key> + <value>20</value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>gain22</key> + <value>10</value> </param> <param> - <key>transmission_mode</key> - <value>T2k</value> + <key>ant23</key> + <value></value> </param> <param> - <key>gain</key> - <value>1</value> + <key>bb_gain23</key> + <value>20</value> </param> <param> - <key>alias</key> + <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>affinity</key> + <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>minoutbuf</key> + <key>bb_gain25</key> + <value>20</value> + </param> + <param> + <key>bw25</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr25</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(344, 227)</value> + <key>bb_gain26</key> + <value>20</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>bw26</key> + <value>0</value> </param> - </block> - <block> - <key>fft_vxx</key> <param> - <key>id</key> - <value>fft_vxx_0</value> + <key>corr26</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq26</key> + <value>100e6</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>if_gain26</key> + <value>20</value> </param> <param> - <key>fft_size</key> - <value>2048</value> + <key>gain26</key> + <value>10</value> </param> <param> - <key>forward</key> - <value>False</value> + <key>ant27</key> + <value></value> </param> <param> - <key>window</key> - <value>window.rectangular(2048)</value> + <key>bb_gain27</key> + <value>20</value> </param> <param> - <key>shift</key> - <value>True</value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>nthreads</key> - <value>1</value> + <key>corr27</key> + <value>0</value> </param> <param> - <key>alias</key> + <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>affinity</key> + <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>minoutbuf</key> + <key>bb_gain29</key> + <value>20</value> + </param> + <param> + <key>bw29</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr29</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(64, 403)</value> + <key>bb_gain2</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw2</key> <value>0</value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> - <key>id</key> - <value>blocks_file_source_0</value> + <key>corr2</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq2</key> + <value>100e6</value> </param> <param> - <key>file</key> - <value>/run/shm/advtest.ts</value> + <key>if_gain2</key> + <value>20</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>gain2</key> + <value>10</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>ant30</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>bb_gain30</key> + <value>20</value> </param> <param> - <key>alias</key> + <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>affinity</key> + <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>minoutbuf</key> + <key>bb_gain3</key> + <value>20</value> + </param> + <param> + <key>bw3</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>corr3</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(112, 83)</value> + <key>bb_gain4</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw4</key> <value>0</value> </param> - </block> - <block> - <key>uhd_usrp_sink</key> <param> - <key>id</key> - <value>uhd_usrp_sink_0</value> + <key>corr4</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>freq4</key> + <value>100e6</value> </param> <param> - <key>type</key> - <value>fc32</value> + <key>if_gain4</key> + <value>20</value> </param> <param> - <key>otw</key> + <key>gain4</key> + <value>10</value> + </param> + <param> + <key>ant5</key> <value></value> </param> <param> - <key>stream_args</key> + <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>stream_chans</key> - <value>[]</value> + <key>bb_gain6</key> + <value>20</value> </param> <param> - <key>dev_addr</key> - <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value> + <key>bw6</key> + <value>0</value> </param> <param> - <key>dev_args</key> - <value>""</value> + <key>corr6</key> + <value>0</value> </param> <param> - <key>sync</key> + <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>clock_rate</key> - <value>0.0</value> + <key>bb_gain7</key> + <value>20</value> </param> <param> - <key>num_mboards</key> - <value>1</value> + <key>bw7</key> + <value>0</value> </param> <param> - <key>clock_source0</key> + <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>time_source0</key> + <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>sd_spec0</key> + <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>clock_source1</key> + <key>affinity</key> <value></value> </param> <param> - <key>time_source1</key> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(984, 284)</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>sd_spec1</key> + <key>time_source0</key> <value></value> </param> <param> - <key>clock_source2</key> + <key>clock_source1</key> <value></value> </param> <param> - <key>time_source2</key> + <key>time_source1</key> <value></value> </param> <param> - <key>sd_spec2</key> + <key>clock_source2</key> <value></value> </param> <param> - <key>clock_source3</key> + <key>time_source2</key> <value></value> </param> <param> - <key>time_source3</key> + <key>clock_source3</key> <value></value> </param> <param> - <key>sd_spec3</key> + <key>time_source3</key> <value></value> </param> <param> @@ -1025,266 +2026,420 @@ <value></value> </param> <param> - <key>sd_spec4</key> + <key>clock_source5</key> <value></value> </param> <param> - <key>clock_source5</key> + <key>time_source5</key> <value></value> </param> <param> - <key>time_source5</key> + <key>clock_source6</key> <value></value> </param> <param> - <key>sd_spec5</key> + <key>time_source6</key> <value></value> </param> <param> - <key>clock_source6</key> + <key>clock_source7</key> <value></value> </param> <param> - <key>time_source6</key> + <key>time_source7</key> <value></value> </param> <param> - <key>sd_spec6</key> + <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>qtgui_const_sink_x</key> <param> - <key>clock_source7</key> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>axislabels</key> + <value>True</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>time_source7</key> + <key>comment</key> <value></value> </param> <param> - <key>sd_spec7</key> + <key>affinity</key> <value></value> </param> <param> - <key>nchan</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>_coordinate</key> + <value>(360, 324)</value> </param> <param> - <key>center_freq0</key> - <value>429000000</value> + <key>gui_hint</key> + <value></value> </param> <param> - <key>gain0</key> - <value>50</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>norm_gain0</key> + <key>grid</key> <value>False</value> </param> <param> - <key>ant0</key> + <key>id</key> + <value>qtgui_const_sink_x_0</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> <value></value> </param> <param> - <key>bw0</key> + <key>marker1</key> <value>0</value> </param> <param> - <key>center_freq1</key> + <key>style1</key> <value>0</value> </param> <param> - <key>gain1</key> - <value>0</value> + <key>width1</key> + <value>1</value> </param> <param> - <key>norm_gain1</key> - <value>False</value> + <key>alpha10</key> + <value>1.0</value> </param> <param> - <key>ant1</key> + <key>color10</key> + <value>"red"</value> + </param> + <param> + <key>label10</key> <value></value> </param> <param> - <key>bw1</key> + <key>marker10</key> <value>0</value> </param> <param> - <key>center_freq2</key> + <key>style10</key> <value>0</value> </param> <param> - <key>gain2</key> - <value>0</value> + <key>width10</key> + <value>1</value> </param> <param> - <key>norm_gain2</key> - <value>False</value> + <key>alpha2</key> + <value>1.0</value> </param> <param> - <key>ant2</key> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> <value></value> </param> <param> - <key>bw2</key> + <key>marker2</key> <value>0</value> </param> <param> - <key>center_freq3</key> + <key>style2</key> <value>0</value> </param> <param> - <key>gain3</key> - <value>0</value> + <key>width2</key> + <value>1</value> </param> <param> - <key>norm_gain3</key> - <value>False</value> + <key>alpha3</key> + <value>1.0</value> </param> <param> - <key>ant3</key> + <key>color3</key> + <value>"red"</value> + </param> + <param> + <key>label3</key> <value></value> </param> <param> - <key>bw3</key> + <key>marker3</key> <value>0</value> </param> <param> - <key>center_freq4</key> + <key>style3</key> <value>0</value> </param> <param> - <key>gain4</key> - <value>0</value> + <key>width3</key> + <value>1</value> </param> <param> - <key>norm_gain4</key> - <value>False</value> + <key>alpha4</key> + <value>1.0</value> </param> <param> - <key>ant4</key> + <key>color4</key> + <value>"red"</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>bw4</key> + <key>marker4</key> <value>0</value> </param> <param> - <key>center_freq5</key> + <key>style4</key> <value>0</value> </param> <param> - <key>gain5</key> - <value>0</value> + <key>width4</key> + <value>1</value> </param> <param> - <key>norm_gain5</key> - <value>False</value> + <key>alpha5</key> + <value>1.0</value> </param> <param> - <key>ant5</key> + <key>color5</key> + <value>"red"</value> + </param> + <param> + <key>label5</key> <value></value> </param> <param> - <key>bw5</key> + <key>marker5</key> <value>0</value> </param> <param> - <key>center_freq6</key> + <key>style5</key> <value>0</value> </param> <param> - <key>gain6</key> - <value>0</value> + <key>width5</key> + <value>1</value> </param> <param> - <key>norm_gain6</key> - <value>False</value> + <key>alpha6</key> + <value>1.0</value> </param> <param> - <key>ant6</key> + <key>color6</key> + <value>"red"</value> + </param> + <param> + <key>label6</key> <value></value> </param> <param> - <key>bw6</key> + <key>marker6</key> <value>0</value> </param> <param> - <key>center_freq7</key> + <key>style6</key> <value>0</value> </param> <param> - <key>gain7</key> - <value>0</value> + <key>width6</key> + <value>1</value> </param> <param> - <key>norm_gain7</key> - <value>False</value> + <key>alpha7</key> + <value>1.0</value> </param> <param> - <key>ant7</key> + <key>color7</key> + <value>"red"</value> + </param> + <param> + <key>label7</key> <value></value> </param> <param> - <key>bw7</key> + <key>marker7</key> <value>0</value> </param> <param> - <key>center_freq8</key> + <key>style7</key> <value>0</value> </param> <param> - <key>gain8</key> - <value>0</value> + <key>width7</key> + <value>1</value> </param> <param> - <key>norm_gain8</key> - <value>False</value> + <key>alpha8</key> + <value>1.0</value> </param> <param> - <key>ant8</key> + <key>color8</key> + <value>"red"</value> + </param> + <param> + <key>label8</key> <value></value> </param> <param> - <key>bw8</key> + <key>marker8</key> <value>0</value> </param> <param> - <key>center_freq9</key> + <key>style8</key> <value>0</value> </param> <param> - <key>gain9</key> - <value>0</value> + <key>width8</key> + <value>1</value> </param> <param> - <key>norm_gain9</key> - <value>False</value> + <key>alpha9</key> + <value>1.0</value> </param> <param> - <key>ant9</key> + <key>color9</key> + <value>"red"</value> + </param> + <param> + <key>label9</key> <value></value> </param> <param> - <key>bw9</key> + <key>marker9</key> <value>0</value> </param> <param> - <key>center_freq10</key> + <key>style9</key> <value>0</value> </param> <param> - <key>gain10</key> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>size</key> + <value>1024</value> + </param> + <param> + <key>tr_chan</key> <value>0</value> </param> <param> - <key>norm_gain10</key> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_slope</key> + <value>qtgui.TRIG_SLOPE_POS</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>xmax</key> + <value>2</value> + </param> + <param> + <key>xmin</key> + <value>-2</value> + </param> + <param> + <key>ymax</key> + <value>2</value> + </param> + <param> + <key>ymin</key> + <value>-2</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>center_freq</value> + </param> + <param> + <key>norm_gain0</key> <value>False</value> </param> <param> + <key>gain0</key> + <value>tx_gain</value> + </param> + <param> <key>ant10</key> <value></value> </param> @@ -1293,16 +2448,16 @@ <value>0</value> </param> <param> - <key>center_freq11</key> + <key>center_freq10</key> <value>0</value> </param> <param> - <key>gain11</key> - <value>0</value> + <key>norm_gain10</key> + <value>False</value> </param> <param> - <key>norm_gain11</key> - <value>False</value> + <key>gain10</key> + <value>0</value> </param> <param> <key>ant11</key> @@ -1313,16 +2468,16 @@ <value>0</value> </param> <param> - <key>center_freq12</key> + <key>center_freq11</key> <value>0</value> </param> <param> - <key>gain12</key> - <value>0</value> + <key>norm_gain11</key> + <value>False</value> </param> <param> - <key>norm_gain12</key> - <value>False</value> + <key>gain11</key> + <value>0</value> </param> <param> <key>ant12</key> @@ -1333,16 +2488,16 @@ <value>0</value> </param> <param> - <key>center_freq13</key> + <key>center_freq12</key> <value>0</value> </param> <param> - <key>gain13</key> - <value>0</value> + <key>norm_gain12</key> + <value>False</value> </param> <param> - <key>norm_gain13</key> - <value>False</value> + <key>gain12</key> + <value>0</value> </param> <param> <key>ant13</key> @@ -1353,16 +2508,16 @@ <value>0</value> </param> <param> - <key>center_freq14</key> + <key>center_freq13</key> <value>0</value> </param> <param> - <key>gain14</key> - <value>0</value> + <key>norm_gain13</key> + <value>False</value> </param> <param> - <key>norm_gain14</key> - <value>False</value> + <key>gain13</key> + <value>0</value> </param> <param> <key>ant14</key> @@ -1373,16 +2528,16 @@ <value>0</value> </param> <param> - <key>center_freq15</key> + <key>center_freq14</key> <value>0</value> </param> <param> - <key>gain15</key> - <value>0</value> + <key>norm_gain14</key> + <value>False</value> </param> <param> - <key>norm_gain15</key> - <value>False</value> + <key>gain14</key> + <value>0</value> </param> <param> <key>ant15</key> @@ -1393,16 +2548,16 @@ <value>0</value> </param> <param> - <key>center_freq16</key> + <key>center_freq15</key> <value>0</value> </param> <param> - <key>gain16</key> - <value>0</value> + <key>norm_gain15</key> + <value>False</value> </param> <param> - <key>norm_gain16</key> - <value>False</value> + <key>gain15</key> + <value>0</value> </param> <param> <key>ant16</key> @@ -1413,16 +2568,16 @@ <value>0</value> </param> <param> - <key>center_freq17</key> + <key>center_freq16</key> <value>0</value> </param> <param> - <key>gain17</key> - <value>0</value> + <key>norm_gain16</key> + <value>False</value> </param> <param> - <key>norm_gain17</key> - <value>False</value> + <key>gain16</key> + <value>0</value> </param> <param> <key>ant17</key> @@ -1433,16 +2588,16 @@ <value>0</value> </param> <param> - <key>center_freq18</key> + <key>center_freq17</key> <value>0</value> </param> <param> - <key>gain18</key> - <value>0</value> + <key>norm_gain17</key> + <value>False</value> </param> <param> - <key>norm_gain18</key> - <value>False</value> + <key>gain17</key> + <value>0</value> </param> <param> <key>ant18</key> @@ -1453,16 +2608,16 @@ <value>0</value> </param> <param> - <key>center_freq19</key> + <key>center_freq18</key> <value>0</value> </param> <param> - <key>gain19</key> - <value>0</value> + <key>norm_gain18</key> + <value>False</value> </param> <param> - <key>norm_gain19</key> - <value>False</value> + <key>gain18</key> + <value>0</value> </param> <param> <key>ant19</key> @@ -1473,18 +2628,38 @@ <value>0</value> </param> <param> - <key>center_freq20</key> + <key>center_freq19</key> <value>0</value> </param> <param> - <key>gain20</key> + <key>norm_gain19</key> + <value>False</value> + </param> + <param> + <key>gain19</key> <value>0</value> </param> <param> - <key>norm_gain20</key> + <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> @@ -1493,16 +2668,16 @@ <value>0</value> </param> <param> - <key>center_freq21</key> + <key>center_freq20</key> <value>0</value> </param> <param> - <key>gain21</key> - <value>0</value> + <key>norm_gain20</key> + <value>False</value> </param> <param> - <key>norm_gain21</key> - <value>False</value> + <key>gain20</key> + <value>0</value> </param> <param> <key>ant21</key> @@ -1513,16 +2688,16 @@ <value>0</value> </param> <param> - <key>center_freq22</key> + <key>center_freq21</key> <value>0</value> </param> <param> - <key>gain22</key> - <value>0</value> + <key>norm_gain21</key> + <value>False</value> </param> <param> - <key>norm_gain22</key> - <value>False</value> + <key>gain21</key> + <value>0</value> </param> <param> <key>ant22</key> @@ -1533,16 +2708,16 @@ <value>0</value> </param> <param> - <key>center_freq23</key> + <key>center_freq22</key> <value>0</value> </param> <param> - <key>gain23</key> - <value>0</value> + <key>norm_gain22</key> + <value>False</value> </param> <param> - <key>norm_gain23</key> - <value>False</value> + <key>gain22</key> + <value>0</value> </param> <param> <key>ant23</key> @@ -1553,16 +2728,16 @@ <value>0</value> </param> <param> - <key>center_freq24</key> + <key>center_freq23</key> <value>0</value> </param> <param> - <key>gain24</key> - <value>0</value> + <key>norm_gain23</key> + <value>False</value> </param> <param> - <key>norm_gain24</key> - <value>False</value> + <key>gain23</key> + <value>0</value> </param> <param> <key>ant24</key> @@ -1573,16 +2748,16 @@ <value>0</value> </param> <param> - <key>center_freq25</key> + <key>center_freq24</key> <value>0</value> </param> <param> - <key>gain25</key> - <value>0</value> + <key>norm_gain24</key> + <value>False</value> </param> <param> - <key>norm_gain25</key> - <value>False</value> + <key>gain24</key> + <value>0</value> </param> <param> <key>ant25</key> @@ -1593,16 +2768,16 @@ <value>0</value> </param> <param> - <key>center_freq26</key> + <key>center_freq25</key> <value>0</value> </param> <param> - <key>gain26</key> - <value>0</value> + <key>norm_gain25</key> + <value>False</value> </param> <param> - <key>norm_gain26</key> - <value>False</value> + <key>gain25</key> + <value>0</value> </param> <param> <key>ant26</key> @@ -1613,16 +2788,16 @@ <value>0</value> </param> <param> - <key>center_freq27</key> + <key>center_freq26</key> <value>0</value> </param> <param> - <key>gain27</key> - <value>0</value> + <key>norm_gain26</key> + <value>False</value> </param> <param> - <key>norm_gain27</key> - <value>False</value> + <key>gain26</key> + <value>0</value> </param> <param> <key>ant27</key> @@ -1633,16 +2808,16 @@ <value>0</value> </param> <param> - <key>center_freq28</key> + <key>center_freq27</key> <value>0</value> </param> <param> - <key>gain28</key> - <value>0</value> + <key>norm_gain27</key> + <value>False</value> </param> <param> - <key>norm_gain28</key> - <value>False</value> + <key>gain27</key> + <value>0</value> </param> <param> <key>ant28</key> @@ -1653,16 +2828,16 @@ <value>0</value> </param> <param> - <key>center_freq29</key> + <key>center_freq28</key> <value>0</value> </param> <param> - <key>gain29</key> - <value>0</value> + <key>norm_gain28</key> + <value>False</value> </param> <param> - <key>norm_gain29</key> - <value>False</value> + <key>gain28</key> + <value>0</value> </param> <param> <key>ant29</key> @@ -1673,18 +2848,38 @@ <value>0</value> </param> <param> - <key>center_freq30</key> + <key>center_freq29</key> <value>0</value> </param> <param> - <key>gain30</key> + <key>norm_gain29</key> + <value>False</value> + </param> + <param> + <key>gain29</key> <value>0</value> </param> <param> - <key>norm_gain30</key> + <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> @@ -1693,16 +2888,16 @@ <value>0</value> </param> <param> - <key>center_freq31</key> + <key>center_freq30</key> <value>0</value> </param> <param> - <key>gain31</key> - <value>0</value> + <key>norm_gain30</key> + <value>False</value> </param> <param> - <key>norm_gain31</key> - <value>False</value> + <key>gain30</key> + <value>0</value> </param> <param> <key>ant31</key> @@ -1713,333 +2908,385 @@ <value>0</value> </param> <param> - <key>len_tag_name</key> - <value></value> + <key>center_freq31</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>norm_gain31</key> + <value>False</value> </param> <param> - <key>affinity</key> - <value></value> + <key>gain31</key> + <value>0</value> </param> <param> - <key>comment</key> + <key>ant3</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(984, 387)</value> + <key>bw3</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq3</key> <value>0</value> </param> - </block> - <block> - <key>digital_ofdm_cyclic_prefixer</key> <param> - <key>id</key> - <value>digital_ofdm_cyclic_prefixer_0</value> + <key>norm_gain3</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain3</key> + <value>0</value> </param> <param> - <key>input_size</key> - <value>2048</value> + <key>ant4</key> + <value></value> </param> <param> - <key>cp_len</key> - <value>64</value> + <key>bw4</key> + <value>0</value> </param> <param> - <key>rolloff</key> + <key>center_freq4</key> <value>0</value> </param> <param> - <key>tagname</key> - <value></value> + <key>norm_gain4</key> + <value>False</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain4</key> + <value>0</value> </param> <param> - <key>affinity</key> + <key>ant5</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bw5</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>center_freq5</key> <value>0</value> </param> <param> - <key>comment</key> + <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>(392, 419)</value> + <key>bw6</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq6</key> <value>0</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <key>norm_gain6</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain6</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>ant7</key> + <value></value> </param> <param> - <key>const</key> - <value>0.0022097087</value> + <key>bw7</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>center_freq7</key> + <value>0</value> </param> <param> - <key>alias</key> + <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>affinity</key> + <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>minoutbuf</key> + <key>bw9</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <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=128,master_clock_rate=" + str(samp_rate*4)</value> + </param> + <param> + <key>dev_args</key> + <value>""</value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> <key>_coordinate</key> - <value>(664, 435)</value> + <value>(992, 448)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>options</key> <param> <key>id</key> - <value>dvbt_tx_demo</value> + <value>uhd_usrp_sink_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>title</key> + <key>clock_source0</key> <value></value> </param> <param> - <key>author</key> + <key>sd_spec0</key> <value></value> </param> <param> - <key>description</key> + <key>time_source0</key> <value></value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>clock_source1</key> + <value></value> </param> <param> - <key>generate_options</key> - <value>qt_gui</value> + <key>sd_spec1</key> + <value></value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>time_source1</key> + <value></value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>clock_source2</key> + <value></value> </param> <param> - <key>run</key> - <value>True</value> + <key>sd_spec2</key> + <value></value> </param> <param> - <key>max_nouts</key> - <value>0</value> + <key>time_source2</key> + <value></value> </param> <param> - <key>realtime_scheduling</key> + <key>clock_source3</key> <value></value> </param> <param> - <key>thread_safe_setters</key> + <key>sd_spec3</key> <value></value> </param> <param> - <key>alias</key> + <key>time_source3</key> <value></value> </param> <param> - <key>comment</key> + <key>clock_source4</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(8, 11)</value> + <key>sd_spec4</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>time_source4</key> + <value></value> </param> - </block> - <block> - <key>dtv_dvbt_reference_signals</key> <param> - <key>id</key> - <value>dtv_dvbt_reference_signals_0</value> + <key>clock_source5</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>sd_spec5</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>clock_source6</key> + <value></value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>sd_spec6</key> + <value></value> </param> <param> - <key>code_rate_hp</key> - <value>C2_3</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>code_rate_lp</key> - <value>C2_3</value> + <key>clock_source7</key> + <value></value> </param> <param> - <key>guard_interval</key> - <value>GI_1_32</value> + <key>sd_spec7</key> + <value></value> </param> <param> - <key>transmission_mode</key> - <value>T2k</value> + <key>time_source7</key> + <value></value> </param> <param> - <key>include_cell_id</key> - <value>cell_ide_no</value> + <key>nchan</key> + <value>1</value> </param> <param> - <key>cell_id</key> - <value>0</value> + <key>num_mboards</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>samp_rate</key> + <value>samp_rate</value> </param> <param> - <key>affinity</key> - <value></value> + <key>hide_cmd_port</key> + <value>False</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>hide_lo_controls</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_args</key> + <value></value> </param> <param> - <key>comment</key> + <key>stream_chans</key> + <value>[]</value> + </param> + <param> + <key>sync</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(40, 187)</value> + <key>len_tag_name</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>otw</key> + <value></value> </param> </block> <connection> - <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> + <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>fft_vxx_0</source_block_id> - <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> + <source_block_id>blocks_multiply_const_xx_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>blocks_multiply_const_vxx_0</source_block_id> + <source_block_id>blocks_multiply_const_xx_0</source_block_id> <sink_block_id>uhd_usrp_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_dvbt_energy_dispersal_0</sink_block_id> + <source_block_id>blocks_vector_to_stream_0</source_block_id> + <sink_block_id>qtgui_const_sink_x_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_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> + <sink_block_id>blocks_multiply_const_xx_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_dvbt_inner_coder_0</sink_block_id> + <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id> + <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt_inner_coder_0</source_block_id> - <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id> + <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id> + <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id> - <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id> + <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_symbol_inner_interleaver_0</source_block_id> - <sink_block_id>dtv_dvbt_map_0</sink_block_id> + <source_block_id>dtv_dvbt_inner_coder_0</source_block_id> + <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2050,8 +3297,8 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt_reference_signals_0</source_block_id> - <sink_block_id>fft_vxx_0</sink_block_id> + <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> @@ -2062,14 +3309,20 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_vector_to_stream_0</source_block_id> - <sink_block_id>qtgui_const_sink_x_0</sink_block_id> + <source_block_id>dtv_dvbt_reference_signals_0</source_block_id> + <sink_block_id>fft_vxx_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_block_id>dtv_dvbt_symbol_inner_interleaver_0</source_block_id> + <sink_block_id>dtv_dvbt_map_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_vxx_0</source_block_id> + <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/dvbt_tx_8k.grc b/gr-dtv/examples/dvbt_tx_8k.grc index 4cad688e29..f674035bcd 100644 --- a/gr-dtv/examples/dvbt_tx_8k.grc +++ b/gr-dtv/examples/dvbt_tx_8k.grc @@ -1,2045 +1,3292 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.8'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Thu Jan 16 23:00:58 2014</timestamp> <block> - <key>qtgui_const_sink_x</key> + <key>options</key> <param> - <key>id</key> - <value>qtgui_const_sink_x_0</value> + <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>type</key> - <value>complex</value> + <key>_coordinate</key> + <value>(8, 12)</value> </param> <param> - <key>name</key> - <value>""</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>size</key> - <value>1024</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>grid</key> - <value>False</value> + <key>hier_block_src_path</key> + <value>.:</value> </param> <param> - <key>autoscale</key> - <value>False</value> + <key>id</key> + <value>dvbt_tx_demo</value> </param> <param> - <key>ymin</key> - <value>-2</value> + <key>max_nouts</key> + <value>0</value> </param> <param> - <key>ymax</key> - <value>2</value> + <key>qt_qss_theme</key> + <value></value> </param> <param> - <key>xmin</key> - <value>-2</value> + <key>realtime_scheduling</key> + <value></value> </param> <param> - <key>xmax</key> - <value>2</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>nconnections</key> - <value>1</value> + <key>run_options</key> + <value>prompt</value> </param> <param> - <key>update_time</key> - <value>0.10</value> + <key>run</key> + <value>True</value> </param> <param> - <key>gui_hint</key> + <key>thread_safe_setters</key> <value></value> </param> <param> - <key>tr_mode</key> - <value>qtgui.TRIG_MODE_FREE</value> + <key>title</key> + <value></value> </param> + </block> + <block> + <key>variable</key> <param> - <key>tr_slope</key> - <value>qtgui.TRIG_SLOPE_POS</value> + <key>comment</key> + <value></value> </param> <param> - <key>tr_level</key> - <value>0.0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>tr_chan</key> + <key>_coordinate</key> + <value>(176, 12)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>tr_tag</key> - <value>""</value> + <key>id</key> + <value>center_freq</value> </param> <param> - <key>legend</key> - <value>True</value> + <key>value</key> + <value>429e6</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>label1</key> + <key>comment</key> <value></value> </param> <param> - <key>width1</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>color1</key> - <value>"blue"</value> + <key>_coordinate</key> + <value>(8, 76)</value> </param> <param> - <key>style1</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker1</key> - <value>0</value> + <key>id</key> + <value>samp_rate</value> </param> <param> - <key>alpha1</key> - <value>1.0</value> + <key>value</key> + <value>(8000000.0 * 8) / 7</value> </param> + </block> + <block> + <key>variable_qtgui_range</key> <param> - <key>label2</key> + <key>comment</key> <value></value> </param> <param> - <key>width2</key> - <value>1</value> + <key>value</key> + <value>50</value> </param> <param> - <key>color2</key> - <value>"red"</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>style2</key> - <value>0</value> + <key>_coordinate</key> + <value>(240, 496)</value> </param> <param> - <key>marker2</key> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>alpha2</key> - <value>1.0</value> + <key>id</key> + <value>tx_gain</value> </param> <param> - <key>label3</key> + <key>label</key> <value></value> </param> <param> - <key>width3</key> - <value>1</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>color3</key> - <value>"red"</value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>style3</key> + <key>start</key> <value>0</value> </param> <param> - <key>marker3</key> - <value>0</value> + <key>step</key> + <value>1</value> </param> <param> - <key>alpha3</key> - <value>1.0</value> + <key>stop</key> + <value>89</value> </param> <param> - <key>label4</key> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> <value></value> </param> <param> - <key>width4</key> - <value>1</value> + <key>value</key> + <value>-8</value> </param> <param> - <key>color4</key> - <value>"red"</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>style4</key> - <value>0</value> + <key>_coordinate</key> + <value>(8, 496)</value> </param> <param> - <key>marker4</key> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>alpha4</key> - <value>1.0</value> + <key>id</key> + <value>vga1_gain</value> </param> <param> - <key>label5</key> + <key>label</key> <value></value> </param> <param> - <key>width5</key> - <value>1</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>color5</key> - <value>"red"</value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>style5</key> - <value>0</value> + <key>start</key> + <value>-35</value> </param> <param> - <key>marker5</key> - <value>0</value> + <key>step</key> + <value>1</value> </param> <param> - <key>alpha5</key> - <value>1.0</value> + <key>stop</key> + <value>-4</value> </param> <param> - <key>label6</key> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> <value></value> </param> <param> - <key>width6</key> - <value>1</value> + <key>value</key> + <value>10</value> </param> <param> - <key>color6</key> - <value>"red"</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>style6</key> - <value>0</value> + <key>_coordinate</key> + <value>(120, 496)</value> </param> <param> - <key>marker6</key> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>alpha6</key> - <value>1.0</value> + <key>id</key> + <value>vga2_gain</value> </param> <param> - <key>label7</key> + <key>label</key> <value></value> </param> <param> - <key>width7</key> - <value>1</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>color7</key> - <value>"red"</value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>style7</key> + <key>start</key> <value>0</value> </param> <param> - <key>marker7</key> - <value>0</value> + <key>step</key> + <value>1</value> </param> <param> - <key>alpha7</key> - <value>1.0</value> + <key>stop</key> + <value>25</value> </param> <param> - <key>label8</key> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>blocks_file_source</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>width8</key> - <value>1</value> + <key>comment</key> + <value></value> </param> <param> - <key>color8</key> - <value>"red"</value> + <key>affinity</key> + <value></value> </param> <param> - <key>style8</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>file</key> + <value>/run/shm/adv8dvbt23qam64.ts</value> + </param> + <param> + <key>_coordinate</key> + <value>(120, 76)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker8</key> + <key>id</key> + <value>blocks_file_source_0</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>alpha8</key> - <value>1.0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>label9</key> - <value></value> + <key>type</key> + <value>byte</value> </param> <param> - <key>width9</key> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>blocks_multiply_const_xx</key> <param> - <key>color9</key> - <value>"red"</value> + <key>alias</key> + <value></value> </param> <param> - <key>style9</key> + <key>comment</key> + <value></value> + </param> + <param> + <key>const</key> + <value>0.0022097087</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(696, 420)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker9</key> + <key>id</key> + <value>blocks_multiply_const_xx_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>alpha9</key> - <value>1.0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>label10</key> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_vector_to_stream</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>width10</key> - <value>1</value> + <key>comment</key> + <value></value> </param> <param> - <key>color10</key> - <value>"red"</value> + <key>affinity</key> + <value></value> </param> <param> - <key>style10</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(120, 332)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>marker10</key> + <key>id</key> + <value>blocks_vector_to_stream_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>alpha10</key> - <value>1.0</value> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_items</key> + <value>8192</value> + </param> + <param> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>digital_ofdm_cyclic_prefixer</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>cp_len</key> + <value>256</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>input_size</key> + <value>8192</value> + </param> + <param> <key>_coordinate</key> - <value>(360, 555)</value> + <value>(392, 400)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>digital_ofdm_cyclic_prefixer_0</value> + </param> + <param> + <key>tagname</key> + <value></value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>rolloff</key> + <value>0</value> + </param> </block> <block> - <key>variable</key> + <key>dtv_dvbt_bit_inner_interleaver</key> <param> - <key>id</key> - <value>samp_rate</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>constellation</key> + <value>64qam</value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>(8000000.0 * 8) / 7</value> + <key>_coordinate</key> + <value>(984, 204)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>hierarchy</key> + <value>nh</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_bit_inner_interleaver_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>transmission_mode</key> + <value>T8k</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>True</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 83)</value> + <value>(776, 52)</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>id</key> - <value>dtv_dvbt_energy_dispersal_0</value> + <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>True</value> </param> <param> - <key>nsize</key> - <value>1</value> + <key>_coordinate</key> + <value>(352, 72)</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_inner_coder</key> <param> <key>alias</key> <value></value> </param> <param> + <key>code_rate</key> + <value>C2_3</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>constellation</key> + <value>64qam</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(1032, 48)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> + <key>hierarchy</key> + <value>nh</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_inner_coder_0</value> + </param> + <param> + <key>ninput</key> + <value>1</value> + </param> + <param> <key>maxoutbuf</key> <value>0</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>noutput</key> + <value>6048</value> + </param> + </block> + <block> + <key>dtv_dvbt_map</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>64qam</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(328, 96)</value> + <value>(368, 192)</value> </param> <param> <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>gain</key> + <value>1</value> + </param> + <param> + <key>hierarchy</key> + <value>nh</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_map_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> <value>0</value> </param> + <param> + <key>transmission_mode</key> + <value>T8k</value> + </param> </block> <block> <key>dtv_dvbt_reed_solomon_enc</key> <param> - <key>id</key> - <value>dtv_dvbt_reed_solomon_enc_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>blocks</key> + <value>8</value> </param> <param> - <key>p</key> - <value>2</value> + <key>comment</key> + <value></value> </param> <param> - <key>m</key> - <value>8</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>gfpoly</key> <value>0x11d</value> </param> <param> - <key>n</key> - <value>255</value> + <key>_coordinate</key> + <value>(544, 24)</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>t</key> - <value>8</value> + <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>blocks</key> + <key>m</key> <value>8</value> </param> <param> - <key>alias</key> - <value></value> + <key>p</key> + <value>2</value> </param> <param> - <key>affinity</key> + <key>t</key> + <value>8</value> + </param> + </block> + <block> + <key>dtv_dvbt_reference_signals</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>cell_id</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>code_rate_hp</key> + <value>C2_3</value> + </param> + <param> + <key>code_rate_lp</key> + <value>C2_3</value> </param> <param> <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>64qam</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(512, 43)</value> + <value>(48, 156)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> + </param> + <param> + <key>guard_interval</key> + <value>GI_1_32</value> + </param> + <param> + <key>hierarchy</key> + <value>nh</value> </param> - </block> - <block> - <key>dtv_dvbt_convolutional_interleaver</key> <param> <key>id</key> - <value>dtv_dvbt_convolutional_interleaver_0</value> + <value>dtv_dvbt_reference_signals_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>blocks</key> - <value>136</value> + <key>include_cell_id</key> + <value>call_id_yes</value> </param> <param> - <key>I</key> - <value>12</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>M</key> - <value>17</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> + <key>transmission_mode</key> + <value>T8k</value> + </param> + </block> + <block> + <key>dtv_dvbt_symbol_inner_interleaver</key> + <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>direction</key> + <value>Interleave</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(672, 204)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt_symbol_inner_interleaver_0</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>transmission_mode</key> + <value>T8k</value> + </param> + </block> + <block> + <key>fft_vxx</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>fft_size</key> + <value>8192</value> + </param> + <param> + <key>forward</key> + <value>False</value> + </param> + <param> <key>_coordinate</key> - <value>(736, 75)</value> + <value>(88, 392)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> <key>id</key> - <value>blocks_file_source_0</value> + <value>fft_vxx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>file</key> - <value>/run/shm/advtest.ts</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>repeat</key> + <key>nthreads</key> + <value>1</value> + </param> + <param> + <key>shift</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>window</key> + <value>window.rectangular(8192)</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>vga1_gain</value> + </param> + <param> + <key>bw0</key> + <value>8750000</value> + </param> + <param> + <key>corr0</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>freq0</key> + <value>center_freq</value> + </param> + <param> + <key>if_gain0</key> <value>0</value> </param> <param> - <key>comment</key> + <key>gain0</key> + <value>vga2_gain</value> + </param> + <param> + <key>ant10</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(112, 83)</value> + <key>bb_gain10</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw10</key> <value>0</value> </param> - </block> - <block> - <key>uhd_usrp_sink</key> <param> - <key>id</key> - <value>uhd_usrp_sink_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>type</key> - <value>fc32</value> + <key>if_gain10</key> + <value>20</value> </param> <param> - <key>otw</key> - <value></value> + <key>gain10</key> + <value>10</value> </param> <param> - <key>stream_args</key> + <key>ant11</key> <value></value> </param> <param> - <key>stream_chans</key> - <value>[]</value> + <key>bb_gain11</key> + <value>20</value> </param> <param> - <key>dev_addr</key> - <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value> + <key>bw11</key> + <value>0</value> </param> <param> - <key>dev_args</key> - <value>""</value> + <key>corr11</key> + <value>0</value> </param> <param> - <key>sync</key> - <value></value> + <key>freq11</key> + <value>100e6</value> </param> <param> - <key>clock_rate</key> - <value>0.0</value> + <key>if_gain11</key> + <value>20</value> </param> <param> - <key>num_mboards</key> - <value>1</value> + <key>gain11</key> + <value>10</value> </param> <param> - <key>clock_source0</key> + <key>ant12</key> <value></value> </param> <param> - <key>time_source0</key> - <value></value> + <key>bb_gain12</key> + <value>20</value> </param> <param> - <key>sd_spec0</key> - <value></value> + <key>bw12</key> + <value>0</value> </param> <param> - <key>clock_source1</key> - <value></value> + <key>corr12</key> + <value>0</value> </param> <param> - <key>time_source1</key> - <value></value> + <key>freq12</key> + <value>100e6</value> </param> <param> - <key>sd_spec1</key> - <value></value> + <key>if_gain12</key> + <value>20</value> </param> <param> - <key>clock_source2</key> - <value></value> + <key>gain12</key> + <value>10</value> </param> <param> - <key>time_source2</key> + <key>ant13</key> <value></value> </param> <param> - <key>sd_spec2</key> - <value></value> + <key>bb_gain13</key> + <value>20</value> </param> <param> - <key>clock_source3</key> - <value></value> + <key>bw13</key> + <value>0</value> </param> <param> - <key>time_source3</key> - <value></value> + <key>corr13</key> + <value>0</value> </param> <param> - <key>sd_spec3</key> + <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>clock_source4</key> + <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>time_source4</key> + <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>sd_spec4</key> + <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>clock_source5</key> + <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>time_source5</key> + <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>sd_spec5</key> + <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>clock_source6</key> + <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>time_source6</key> + <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>sd_spec6</key> + <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>clock_source7</key> + <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>time_source7</key> + <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>sd_spec7</key> + <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>nchan</key> - <value>1</value> + <key>bb_gain25</key> + <value>20</value> </param> <param> - <key>samp_rate</key> - <value>samp_rate</value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>center_freq0</key> - <value>429000000</value> + <key>corr25</key> + <value>0</value> </param> <param> - <key>gain0</key> - <value>50</value> + <key>freq25</key> + <value>100e6</value> </param> <param> - <key>norm_gain0</key> - <value>False</value> + <key>if_gain25</key> + <value>20</value> </param> <param> - <key>ant0</key> + <key>gain25</key> + <value>10</value> + </param> + <param> + <key>ant26</key> <value></value> </param> <param> - <key>bw0</key> + <key>bb_gain26</key> + <value>20</value> + </param> + <param> + <key>bw26</key> <value>0</value> </param> <param> - <key>center_freq1</key> + <key>corr26</key> <value>0</value> </param> <param> - <key>gain1</key> + <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>norm_gain1</key> - <value>False</value> + <key>corr27</key> + <value>0</value> </param> <param> - <key>ant1</key> + <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>bw1</key> + <key>bb_gain28</key> + <value>20</value> + </param> + <param> + <key>bw28</key> <value>0</value> </param> <param> - <key>center_freq2</key> + <key>corr28</key> <value>0</value> </param> <param> - <key>gain2</key> + <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>norm_gain2</key> - <value>False</value> + <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>center_freq3</key> + <key>corr2</key> <value>0</value> </param> <param> - <key>gain3</key> + <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>norm_gain3</key> - <value>False</value> + <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>center_freq4</key> + <key>corr3</key> <value>0</value> </param> <param> - <key>gain4</key> - <value>0</value> + <key>freq3</key> + <value>100e6</value> </param> <param> - <key>norm_gain4</key> - <value>False</value> + <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>center_freq5</key> + <key>corr4</key> <value>0</value> </param> <param> - <key>gain5</key> - <value>0</value> + <key>freq4</key> + <value>100e6</value> </param> <param> - <key>norm_gain5</key> - <value>False</value> + <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>center_freq6</key> + <key>corr5</key> <value>0</value> </param> <param> - <key>gain6</key> - <value>0</value> + <key>freq5</key> + <value>100e6</value> </param> <param> - <key>norm_gain6</key> - <value>False</value> + <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>center_freq7</key> + <key>corr6</key> <value>0</value> </param> <param> - <key>gain7</key> - <value>0</value> + <key>freq6</key> + <value>100e6</value> </param> <param> - <key>norm_gain7</key> - <value>False</value> + <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>center_freq8</key> + <key>corr7</key> <value>0</value> </param> <param> - <key>gain8</key> - <value>0</value> + <key>freq7</key> + <value>100e6</value> </param> <param> - <key>norm_gain8</key> - <value>False</value> + <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>center_freq9</key> + <key>corr8</key> <value>0</value> </param> <param> - <key>gain9</key> - <value>0</value> + <key>freq8</key> + <value>100e6</value> </param> <param> - <key>norm_gain9</key> - <value>False</value> + <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>center_freq10</key> + <key>corr9</key> <value>0</value> </param> <param> - <key>gain10</key> - <value>0</value> + <key>freq9</key> + <value>100e6</value> </param> <param> - <key>norm_gain10</key> - <value>False</value> + <key>if_gain9</key> + <value>20</value> </param> <param> - <key>ant10</key> + <key>gain9</key> + <value>10</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> - <key>bw10</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>center_freq11</key> - <value>0</value> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> </param> <param> - <key>gain11</key> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(984, 284)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>norm_gain11</key> - <value>False</value> + <key>id</key> + <value>osmosdr_sink_0</value> </param> <param> - <key>ant11</key> + <key>type</key> + <value>fc32</value> + </param> + <param> + <key>clock_source0</key> <value></value> </param> <param> - <key>bw11</key> - <value>0</value> + <key>time_source0</key> + <value></value> </param> <param> - <key>center_freq12</key> - <value>0</value> + <key>clock_source1</key> + <value></value> </param> <param> - <key>gain12</key> - <value>0</value> + <key>time_source1</key> + <value></value> </param> <param> - <key>norm_gain12</key> - <value>False</value> + <key>clock_source2</key> + <value></value> </param> <param> - <key>ant12</key> + <key>time_source2</key> <value></value> </param> <param> - <key>bw12</key> - <value>0</value> + <key>clock_source3</key> + <value></value> </param> <param> - <key>center_freq13</key> - <value>0</value> + <key>time_source3</key> + <value></value> </param> <param> - <key>gain13</key> - <value>0</value> + <key>clock_source4</key> + <value></value> </param> <param> - <key>norm_gain13</key> - <value>False</value> + <key>time_source4</key> + <value></value> </param> <param> - <key>ant13</key> + <key>clock_source5</key> <value></value> </param> <param> - <key>bw13</key> - <value>0</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>center_freq14</key> - <value>0</value> + <key>clock_source6</key> + <value></value> </param> <param> - <key>gain14</key> - <value>0</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>norm_gain14</key> - <value>False</value> + <key>clock_source7</key> + <value></value> </param> <param> - <key>ant14</key> + <key>time_source7</key> <value></value> </param> <param> - <key>bw14</key> - <value>0</value> + <key>nchan</key> + <value>1</value> </param> <param> - <key>center_freq15</key> - <value>0</value> + <key>num_mboards</key> + <value>1</value> </param> <param> - <key>gain15</key> - <value>0</value> + <key>sample_rate</key> + <value>samp_rate</value> </param> <param> - <key>norm_gain15</key> + <key>sync</key> + <value></value> + </param> + </block> + <block> + <key>qtgui_const_sink_x</key> + <param> + <key>autoscale</key> <value>False</value> </param> <param> - <key>ant15</key> + <key>axislabels</key> + <value>True</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>bw15</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>center_freq16</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>gain16</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(360, 324)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>norm_gain16</key> + <key>grid</key> <value>False</value> </param> <param> - <key>ant16</key> + <key>id</key> + <value>qtgui_const_sink_x_0</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> <value></value> </param> <param> - <key>bw16</key> + <key>marker1</key> <value>0</value> </param> <param> - <key>center_freq17</key> + <key>style1</key> <value>0</value> </param> <param> - <key>gain17</key> - <value>0</value> + <key>width1</key> + <value>1</value> </param> <param> - <key>norm_gain17</key> - <value>False</value> + <key>alpha10</key> + <value>1.0</value> </param> <param> - <key>ant17</key> + <key>color10</key> + <value>"red"</value> + </param> + <param> + <key>label10</key> <value></value> </param> <param> - <key>bw17</key> + <key>marker10</key> <value>0</value> </param> <param> - <key>center_freq18</key> + <key>style10</key> <value>0</value> </param> <param> - <key>gain18</key> - <value>0</value> + <key>width10</key> + <value>1</value> </param> <param> - <key>norm_gain18</key> - <value>False</value> + <key>alpha2</key> + <value>1.0</value> </param> <param> - <key>ant18</key> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> <value></value> </param> <param> - <key>bw18</key> + <key>marker2</key> <value>0</value> </param> <param> - <key>center_freq19</key> + <key>style2</key> <value>0</value> </param> <param> - <key>gain19</key> - <value>0</value> + <key>width2</key> + <value>1</value> </param> <param> - <key>norm_gain19</key> - <value>False</value> + <key>alpha3</key> + <value>1.0</value> </param> <param> - <key>ant19</key> + <key>color3</key> + <value>"red"</value> + </param> + <param> + <key>label3</key> <value></value> </param> <param> - <key>bw19</key> + <key>marker3</key> <value>0</value> </param> <param> - <key>center_freq20</key> + <key>style3</key> <value>0</value> </param> <param> - <key>gain20</key> - <value>0</value> + <key>width3</key> + <value>1</value> </param> <param> - <key>norm_gain20</key> - <value>False</value> + <key>alpha4</key> + <value>1.0</value> </param> <param> - <key>ant20</key> + <key>color4</key> + <value>"red"</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>bw20</key> + <key>marker4</key> <value>0</value> </param> <param> - <key>center_freq21</key> + <key>style4</key> <value>0</value> </param> <param> - <key>gain21</key> - <value>0</value> + <key>width4</key> + <value>1</value> </param> <param> - <key>norm_gain21</key> - <value>False</value> + <key>alpha5</key> + <value>1.0</value> </param> <param> - <key>ant21</key> + <key>color5</key> + <value>"red"</value> + </param> + <param> + <key>label5</key> <value></value> </param> <param> - <key>bw21</key> + <key>marker5</key> <value>0</value> </param> <param> - <key>center_freq22</key> + <key>style5</key> <value>0</value> </param> <param> - <key>gain22</key> - <value>0</value> + <key>width5</key> + <value>1</value> </param> <param> - <key>norm_gain22</key> - <value>False</value> + <key>alpha6</key> + <value>1.0</value> </param> <param> - <key>ant22</key> + <key>color6</key> + <value>"red"</value> + </param> + <param> + <key>label6</key> <value></value> </param> <param> - <key>bw22</key> + <key>marker6</key> <value>0</value> </param> <param> - <key>center_freq23</key> + <key>style6</key> <value>0</value> </param> <param> - <key>gain23</key> - <value>0</value> + <key>width6</key> + <value>1</value> </param> <param> - <key>norm_gain23</key> - <value>False</value> + <key>alpha7</key> + <value>1.0</value> </param> <param> - <key>ant23</key> + <key>color7</key> + <value>"red"</value> + </param> + <param> + <key>label7</key> <value></value> </param> <param> - <key>bw23</key> + <key>marker7</key> <value>0</value> </param> <param> - <key>center_freq24</key> + <key>style7</key> <value>0</value> </param> <param> - <key>gain24</key> - <value>0</value> + <key>width7</key> + <value>1</value> </param> <param> - <key>norm_gain24</key> - <value>False</value> + <key>alpha8</key> + <value>1.0</value> </param> <param> - <key>ant24</key> + <key>color8</key> + <value>"red"</value> + </param> + <param> + <key>label8</key> <value></value> </param> <param> - <key>bw24</key> + <key>marker8</key> <value>0</value> </param> <param> - <key>center_freq25</key> + <key>style8</key> <value>0</value> </param> <param> - <key>gain25</key> - <value>0</value> + <key>width8</key> + <value>1</value> </param> <param> - <key>norm_gain25</key> - <value>False</value> + <key>alpha9</key> + <value>1.0</value> </param> <param> - <key>ant25</key> + <key>color9</key> + <value>"red"</value> + </param> + <param> + <key>label9</key> <value></value> </param> <param> - <key>bw25</key> + <key>marker9</key> <value>0</value> </param> <param> - <key>center_freq26</key> + <key>style9</key> <value>0</value> </param> <param> - <key>gain26</key> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>size</key> + <value>1024</value> + </param> + <param> + <key>tr_chan</key> <value>0</value> </param> <param> - <key>norm_gain26</key> - <value>False</value> + <key>tr_level</key> + <value>0.0</value> </param> <param> - <key>ant26</key> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_slope</key> + <value>qtgui.TRIG_SLOPE_POS</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>xmax</key> + <value>2</value> + </param> + <param> + <key>xmin</key> + <value>-2</value> + </param> + <param> + <key>ymax</key> + <value>2</value> + </param> + <param> + <key>ymin</key> + <value>-2</value> + </param> + </block> + <block> + <key>uhd_usrp_sink</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>bw26</key> - <value>0</value> + <key>ant0</key> + <value></value> </param> <param> - <key>center_freq27</key> + <key>bw0</key> <value>0</value> </param> <param> - <key>gain27</key> - <value>0</value> + <key>center_freq0</key> + <value>center_freq</value> </param> <param> - <key>norm_gain27</key> + <key>norm_gain0</key> <value>False</value> </param> <param> - <key>ant27</key> - <value></value> + <key>gain0</key> + <value>tx_gain</value> </param> <param> - <key>bw27</key> - <value>0</value> + <key>ant10</key> + <value></value> </param> <param> - <key>center_freq28</key> + <key>bw10</key> <value>0</value> </param> <param> - <key>gain28</key> + <key>center_freq10</key> <value>0</value> </param> <param> - <key>norm_gain28</key> + <key>norm_gain10</key> <value>False</value> </param> <param> - <key>ant28</key> - <value></value> + <key>gain10</key> + <value>0</value> </param> <param> - <key>bw28</key> - <value>0</value> + <key>ant11</key> + <value></value> </param> <param> - <key>center_freq29</key> + <key>bw11</key> <value>0</value> </param> <param> - <key>gain29</key> + <key>center_freq11</key> <value>0</value> </param> <param> - <key>norm_gain29</key> + <key>norm_gain11</key> <value>False</value> </param> <param> - <key>ant29</key> - <value></value> + <key>gain11</key> + <value>0</value> </param> <param> - <key>bw29</key> - <value>0</value> + <key>ant12</key> + <value></value> </param> <param> - <key>center_freq30</key> + <key>bw12</key> <value>0</value> </param> <param> - <key>gain30</key> + <key>center_freq12</key> <value>0</value> </param> <param> - <key>norm_gain30</key> + <key>norm_gain12</key> <value>False</value> </param> <param> - <key>ant30</key> - <value></value> + <key>gain12</key> + <value>0</value> </param> <param> - <key>bw30</key> - <value>0</value> + <key>ant13</key> + <value></value> </param> <param> - <key>center_freq31</key> + <key>bw13</key> <value>0</value> </param> <param> - <key>gain31</key> + <key>center_freq13</key> <value>0</value> </param> <param> - <key>norm_gain31</key> + <key>norm_gain13</key> <value>False</value> </param> <param> - <key>ant31</key> + <key>gain13</key> + <value>0</value> + </param> + <param> + <key>ant14</key> <value></value> </param> <param> - <key>bw31</key> + <key>bw14</key> <value>0</value> </param> <param> - <key>len_tag_name</key> - <value></value> + <key>center_freq14</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>norm_gain14</key> + <value>False</value> </param> <param> - <key>affinity</key> - <value></value> + <key>gain14</key> + <value>0</value> </param> <param> - <key>comment</key> + <key>ant15</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(984, 387)</value> + <key>bw15</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq15</key> <value>0</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <key>norm_gain15</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain15</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>ant16</key> + <value></value> </param> <param> - <key>const</key> - <value>0.0022097087</value> + <key>bw16</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>center_freq16</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>norm_gain16</key> + <value>False</value> </param> <param> - <key>affinity</key> + <key>gain16</key> + <value>0</value> + </param> + <param> + <key>ant17</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bw17</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>center_freq17</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(664, 435)</value> + <key>bw18</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq18</key> <value>0</value> </param> - </block> - <block> - <key>options</key> <param> - <key>id</key> - <value>dvbt_tx_demo</value> + <key>norm_gain18</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain18</key> + <value>0</value> </param> <param> - <key>title</key> + <key>ant19</key> <value></value> </param> <param> - <key>author</key> - <value></value> + <key>bw19</key> + <value>0</value> </param> <param> - <key>description</key> - <value></value> + <key>center_freq19</key> + <value>0</value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>norm_gain19</key> + <value>False</value> </param> <param> - <key>generate_options</key> - <value>qt_gui</value> + <key>gain19</key> + <value>0</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>ant1</key> + <value></value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>bw1</key> + <value>0</value> </param> <param> - <key>run</key> - <value>True</value> + <key>center_freq1</key> + <value>0</value> </param> <param> - <key>max_nouts</key> + <key>norm_gain1</key> + <value>False</value> + </param> + <param> + <key>gain1</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>ant20</key> <value></value> </param> <param> - <key>thread_safe_setters</key> - <value></value> + <key>bw20</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>center_freq20</key> + <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(8, 11)</value> + <key>bw21</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq21</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_bit_inner_interleaver</key> <param> - <key>id</key> - <value>dtv_dvbt_bit_inner_interleaver_0</value> + <key>norm_gain21</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain21</key> + <value>0</value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>ant22</key> + <value></value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>bw22</key> + <value>0</value> </param> <param> - <key>transmission_mode</key> - <value>T8k</value> + <key>center_freq22</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>norm_gain22</key> + <value>False</value> </param> <param> - <key>affinity</key> + <key>gain22</key> + <value>0</value> + </param> + <param> + <key>ant23</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bw23</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>center_freq23</key> <value>0</value> </param> <param> - <key>comment</key> - <value></value> + <key>norm_gain23</key> + <value>False</value> </param> <param> - <key>_coordinate</key> - <value>(984, 243)</value> + <key>gain23</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>ant24</key> + <value></value> </param> - </block> - <block> - <key>dtv_dvbt_symbol_inner_interleaver</key> <param> - <key>id</key> - <value>dtv_dvbt_symbol_inner_interleaver_0</value> + <key>bw24</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>center_freq24</key> + <value>0</value> </param> <param> - <key>transmission_mode</key> - <value>T8k</value> + <key>norm_gain24</key> + <value>False</value> </param> <param> - <key>direction</key> - <value>Interleave</value> + <key>gain24</key> + <value>0</value> </param> <param> - <key>alias</key> + <key>ant25</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>minoutbuf</key> + <key>center_freq25</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>norm_gain25</key> + <value>False</value> + </param> + <param> + <key>gain25</key> <value>0</value> </param> <param> - <key>comment</key> + <key>ant26</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(664, 243)</value> + <key>bw26</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>center_freq26</key> + <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_map</key> <param> - <key>id</key> - <value>dtv_dvbt_map_0</value> + <key>norm_gain26</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain26</key> + <value>0</value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>ant27</key> + <value></value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>transmission_mode</key> - <value>T8k</value> + <key>center_freq27</key> + <value>0</value> </param> <param> - <key>gain</key> - <value>1</value> + <key>norm_gain27</key> + <value>False</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain27</key> + <value>0</value> </param> <param> - <key>affinity</key> + <key>ant28</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bw28</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>center_freq28</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(344, 227)</value> + <key>bw29</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>center_freq29</key> + <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt_reference_signals</key> <param> - <key>id</key> - <value>dtv_dvbt_reference_signals_0</value> + <key>norm_gain29</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain29</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>ant2</key> + <value></value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>bw2</key> + <value>0</value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>center_freq2</key> + <value>0</value> </param> <param> - <key>code_rate_hp</key> - <value>C2_3</value> + <key>norm_gain2</key> + <value>False</value> </param> <param> - <key>code_rate_lp</key> - <value>C2_3</value> + <key>gain2</key> + <value>0</value> </param> <param> - <key>guard_interval</key> - <value>GI_1_32</value> + <key>ant30</key> + <value></value> </param> <param> - <key>transmission_mode</key> - <value>T8k</value> + <key>bw30</key> + <value>0</value> </param> <param> - <key>include_cell_id</key> - <value>cell_ide_no</value> + <key>center_freq30</key> + <value>0</value> </param> <param> - <key>cell_id</key> + <key>norm_gain30</key> + <value>False</value> + </param> + <param> + <key>gain30</key> <value>0</value> </param> <param> - <key>alias</key> + <key>ant31</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>bw31</key> + <value>0</value> </param> <param> - <key>minoutbuf</key> + <key>center_freq31</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>norm_gain31</key> + <value>False</value> + </param> + <param> + <key>gain31</key> <value>0</value> </param> <param> - <key>comment</key> + <key>ant3</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(40, 187)</value> + <key>bw3</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>center_freq3</key> + <value>0</value> </param> - </block> - <block> - <key>fft_vxx</key> <param> - <key>id</key> - <value>fft_vxx_0</value> + <key>norm_gain3</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain3</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>ant4</key> + <value></value> </param> <param> - <key>fft_size</key> - <value>8192</value> + <key>bw4</key> + <value>0</value> </param> <param> - <key>forward</key> + <key>center_freq4</key> + <value>0</value> + </param> + <param> + <key>norm_gain4</key> <value>False</value> </param> <param> - <key>window</key> - <value>window.rectangular(8192)</value> + <key>gain4</key> + <value>0</value> </param> <param> - <key>shift</key> - <value>True</value> + <key>ant5</key> + <value></value> </param> <param> - <key>nthreads</key> - <value>1</value> + <key>bw5</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>center_freq5</key> + <value>0</value> </param> <param> - <key>affinity</key> + <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>minoutbuf</key> + <key>bw6</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>center_freq6</key> <value>0</value> </param> <param> - <key>comment</key> + <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>_coordinate</key> - <value>(64, 403)</value> + <key>bw7</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>center_freq7</key> <value>0</value> </param> - </block> - <block> - <key>blocks_vector_to_stream</key> <param> - <key>id</key> - <value>blocks_vector_to_stream_0</value> + <key>norm_gain7</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>gain7</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>ant8</key> + <value></value> </param> <param> - <key>num_items</key> - <value>8192</value> + <key>bw8</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>center_freq8</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>norm_gain8</key> + <value>False</value> </param> <param> - <key>affinity</key> + <key>gain8</key> + <value>0</value> + </param> + <param> + <key>ant9</key> <value></value> </param> <param> - <key>minoutbuf</key> + <key>bw9</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <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=128,master_clock_rate=" + str(samp_rate*4)</value> + </param> + <param> + <key>dev_args</key> + <value>""</value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> <key>_coordinate</key> - <value>(120, 563)</value> + <value>(992, 448)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_ofdm_cyclic_prefixer</key> <param> <key>id</key> - <value>digital_ofdm_cyclic_prefixer_0</value> + <value>uhd_usrp_sink_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>input_size</key> - <value>8192</value> + <key>clock_source0</key> + <value></value> </param> <param> - <key>cp_len</key> - <value>256</value> + <key>sd_spec0</key> + <value></value> </param> <param> - <key>rolloff</key> - <value>0</value> + <key>time_source0</key> + <value></value> </param> <param> - <key>tagname</key> + <key>clock_source1</key> <value></value> </param> <param> - <key>alias</key> + <key>sd_spec1</key> <value></value> </param> <param> - <key>affinity</key> + <key>time_source1</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>clock_source2</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>sd_spec2</key> + <value></value> </param> <param> - <key>comment</key> + <key>time_source2</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(392, 419)</value> + <key>clock_source3</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>sd_spec3</key> + <value></value> </param> - </block> - <block> - <key>dtv_dvbt_inner_coder</key> <param> - <key>id</key> - <value>dtv_dvbt_inner_coder_0</value> + <key>time_source3</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>clock_source4</key> + <value></value> </param> <param> - <key>ninput</key> - <value>1</value> + <key>sd_spec4</key> + <value></value> </param> <param> - <key>noutput</key> - <value>6048</value> + <key>time_source4</key> + <value></value> </param> <param> - <key>constellation</key> - <value>64qam</value> + <key>clock_source5</key> + <value></value> </param> <param> - <key>hierarchy</key> - <value>nh</value> + <key>sd_spec5</key> + <value></value> </param> <param> - <key>code_rate</key> - <value>C2_3</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>alias</key> + <key>clock_source6</key> <value></value> </param> <param> - <key>affinity</key> + <key>sd_spec6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>clock_source7</key> + <value></value> </param> <param> - <key>comment</key> + <key>sd_spec7</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(1000, 67)</value> + <key>time_source7</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <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>hide_lo_controls</key> + <value>True</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> <connection> - <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> + <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>fft_vxx_0</source_block_id> - <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> + <source_block_id>blocks_multiply_const_xx_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>blocks_multiply_const_vxx_0</source_block_id> + <source_block_id>blocks_multiply_const_xx_0</source_block_id> <sink_block_id>uhd_usrp_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_dvbt_energy_dispersal_0</sink_block_id> + <source_block_id>blocks_vector_to_stream_0</source_block_id> + <sink_block_id>qtgui_const_sink_x_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_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> + <sink_block_id>blocks_multiply_const_xx_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_dvbt_inner_coder_0</sink_block_id> + <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id> + <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt_inner_coder_0</source_block_id> - <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id> + <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id> + <sink_block_id>dtv_dvbt_inner_coder_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt_bit_inner_interleaver_0</source_block_id> - <sink_block_id>dtv_dvbt_symbol_inner_interleaver_0</sink_block_id> + <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_symbol_inner_interleaver_0</source_block_id> - <sink_block_id>dtv_dvbt_map_0</sink_block_id> + <source_block_id>dtv_dvbt_inner_coder_0</source_block_id> + <sink_block_id>dtv_dvbt_bit_inner_interleaver_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2050,8 +3297,8 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt_reference_signals_0</source_block_id> - <sink_block_id>fft_vxx_0</sink_block_id> + <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> @@ -2062,14 +3309,20 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_vector_to_stream_0</source_block_id> - <sink_block_id>qtgui_const_sink_x_0</sink_block_id> + <source_block_id>dtv_dvbt_reference_signals_0</source_block_id> + <sink_block_id>fft_vxx_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_block_id>dtv_dvbt_symbol_inner_interleaver_0</source_block_id> + <sink_block_id>dtv_dvbt_map_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fft_vxx_0</source_block_id> + <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/file_atsc_tx.grc b/gr-dtv/examples/file_atsc_tx.grc index f212ab35c6..3a7124127b 100644 --- a/gr-dtv/examples/file_atsc_tx.grc +++ b/gr-dtv/examples/file_atsc_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.11'?> <flow_graph> - <timestamp>Sat Jan 17 12:37:25 2015</timestamp> + <timestamp>Sat Dec 20 12:18:33 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>file_atsc_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>(368, 19)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> <key>generate_options</key> - <value>wx_gui</value> + <value>qt_gui</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>file_atsc_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,92 +73,107 @@ <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>(584, 19)</value> + <value>(808, 20)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>center_freq</value> + </param> + <param> + <key>value</key> + <value>429e6</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>value</key> - <value>4500000.0 / 286 * 684</value> + <key>_coordinate</key> + <value>(680, 20)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(360, 19)</value> + <key>id</key> + <value>pilot_freq</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>(6000000.0 - (symbol_rate / 2)) / 2</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>pilot_freq</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>309441</value> + <key>_coordinate</key> + <value>(552, 19)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(472, 19)</value> + <key>id</key> + <value>symbol_rate</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>4500000.0 / 286 * 684</value> </param> </block> <block> - <key>dtv_atsc_pad</key> + <key>blocks_file_sink</key> <param> - <key>id</key> - <value>dtv_atsc_pad_0</value> + <key>append</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -138,804 +181,1028 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>1</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>file</key> + <value>atsc.cfile</value> </param> <param> <key>_coordinate</key> - <value>(96, 112)</value> + <value>(1048, 236)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> - </block> - <block> - <key>dtv_atsc_randomizer</key> <param> <key>id</key> - <value>dtv_atsc_randomizer_0</value> + <value>blocks_file_sink_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>file</key> + <value>advatsc.ts</value> </param> <param> <key>_coordinate</key> - <value>(72, 168)</value> + <value>(64, 19)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_atsc_rs_encoder</key> <param> <key>id</key> - <value>dtv_atsc_rs_encoder_0</value> + <value>blocks_file_source_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>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> + <value>False</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_keep_m_in_n</key> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(72, 224)</value> + <value>(104, 451)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> - </block> - <block> - <key>blocks_keep_m_in_n</key> <param> <key>id</key> <value>blocks_keep_m_in_n_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>m</key> + <value>832</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>m</key> - <value>832</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>n</key> <value>1024</value> </param> <param> + <key>type</key> + <value>byte</value> + </param> + <param> <key>offset</key> <value>4</value> </param> + </block> + <block> + <key>blocks_rotator_cc</key> <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> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(336, 332)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> + <key>id</key> + <value>blocks_rotator_cc_0</value> + </param> + <param> <key>maxoutbuf</key> <value>0</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>phase_inc</key> + <value>((-3000000.0 + pilot_freq) / symbol_rate) * (math.pi * 2)</value> + </param> + </block> + <block> + <key>blocks_throttle</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>(80, 515)</value> + <value>(824, 332)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>blocks_throttle_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>out_type</key> - <value>complex</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>symbol_table</key> - <value>[symbol + 1.25 for symbol in [-7,-5,-3,-1,1,3,5,7]]</value> + <key>samples_per_second</key> + <value>symbol_rate</value> </param> <param> - <key>dimension</key> - <value>1</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>num_ports</key> + <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>blocks_vector_to_stream</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(360, 523)</value> + <value>(96, 387)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> - </block> - <block> - <key>blocks_multiply_xx</key> <param> <key>id</key> - <value>blocks_multiply_xx_0</value> + <value>blocks_vector_to_stream_1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_items</key> + <value>1024</value> </param> <param> <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>dtv_atsc_field_sync_mux</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(376, 296)</value> + <value>(80, 337)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>dtv_atsc_field_sync_mux_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> </block> <block> - <key>analog_sig_source_x</key> + <key>dtv_atsc_interleaver</key> <param> - <key>id</key> - <value>analog_sig_source_x_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>complex</value> + <key>affinity</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>symbol_rate</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>waveform</key> - <value>analog.GR_COS_WAVE</value> + <key>_coordinate</key> + <value>(88, 241)</value> </param> <param> - <key>freq</key> - <value>-3000000+pilot_freq</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>amp</key> - <value>0.9</value> + <key>id</key> + <value>dtv_atsc_interleaver_0</value> </param> <param> - <key>offset</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_atsc_pad</key> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(416, 131)</value> + <value>(112, 97)</value> </param> <param> <key>_rotation</key> <value>180</value> </param> + <param> + <key>id</key> + <value>dtv_atsc_pad_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> </block> <block> - <key>fft_filter_xxx</key> + <key>dtv_atsc_randomizer</key> <param> - <key>id</key> - <value>fft_filter_xxx_0</value> + <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>type</key> - <value>ccc</value> + <key>_coordinate</key> + <value>(88, 145)</value> </param> <param> - <key>decim</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>taps</key> - <value>firdes.root_raised_cosine(0.1, symbol_rate, symbol_rate/2, 0.1152, 100)</value> + <key>id</key> + <value>dtv_atsc_randomizer_0</value> </param> <param> - <key>samp_delay</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>nthreads</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_atsc_rs_encoder</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(576, 291)</value> + <value>(88, 193)</value> </param> <param> <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_rs_encoder_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> <value>0</value> </param> </block> <block> - <key>wxgui_fftsink2</key> + <key>dtv_atsc_trellis_encoder</key> <param> - <key>id</key> - <value>wxgui_fftsink2_0</value> + <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>type</key> - <value>complex</value> + <key>_coordinate</key> + <value>(80, 289)</value> </param> <param> - <key>title</key> - <value>FFT Plot</value> + <key>_rotation</key> + <value>180</value> </param> <param> - <key>samp_rate</key> - <value>symbol_rate</value> + <key>id</key> + <value>dtv_atsc_trellis_encoder_0</value> </param> <param> - <key>baseband_freq</key> - <value>429000000</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>y_per_div</key> - <value>10</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbs2_modulator_bc</key> <param> - <key>y_divs</key> - <value>10</value> + <key>interpolation</key> + <value>INTERPOLATION_OFF</value> </param> <param> - <key>ref_level</key> - <value>-10</value> + <key>alias</key> + <value></value> </param> <param> - <key>ref_scale</key> - <value>2.0</value> + <key>rate1</key> + <value>C1_4</value> </param> <param> - <key>fft_size</key> - <value>1024</value> + <key>rate2</key> + <value>C1_5_MEDIUM</value> </param> <param> - <key>fft_rate</key> - <value>15</value> + <key>rate3</key> + <value>C1_4</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>comment</key> + <value></value> </param> <param> - <key>average</key> + <key>constellation</key> + <value>MOD_8VSB</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> <value>True</value> </param> <param> - <key>avg_alpha</key> - <value>0.1333</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>win</key> - <value>None</value> + <key>_coordinate</key> + <value>(80, 556)</value> </param> <param> - <key>win_size</key> - <value>800,600</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>id</key> + <value>dtv_dvbs2_modulator_bc_0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>freqvar</key> - <value>None</value> + <key>minoutbuf</key> + <value>0</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>(1048, 331)</value> + <value>(576, 316)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_atsc_interleaver</key> <param> <key>id</key> - <value>dtv_atsc_interleaver_0</value> + <value>fft_filter_xxx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>nthreads</key> + <value>1</value> </param> <param> - <key>minoutbuf</key> + <key>samp_delay</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>taps</key> + <value>firdes.root_raised_cosine(0.11, symbol_rate, symbol_rate/2, 0.1152, 200)</value> + </param> + <param> + <key>type</key> + <value>ccc</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(72, 280)</value> + <value>(368, 91)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>import</key> + <value>import math</value> + </param> </block> <block> - <key>blocks_throttle</key> + <key>qtgui_freq_sink_x</key> <param> - <key>id</key> - <value>blocks_throttle_0</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>average</key> + <value>0.1</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>axislabels</key> + <value>True</value> </param> <param> - <key>samples_per_second</key> + <key>bw</key> <value>symbol_rate</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>alias</key> + <value></value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>fc</key> + <value>center_freq</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>ctrlpanel</key> + <value>False</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>fftsize</key> + <value>1024</value> </param> <param> <key>_coordinate</key> - <value>(808, 307)</value> + <value>(1048, 396)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_file_sink</key> + <param> + <key>grid</key> + <value>False</value> + </param> <param> <key>id</key> - <value>blocks_file_sink_0</value> + <value>qtgui_freq_sink_x_0</value> </param> <param> - <key>_enabled</key> + <key>legend</key> <value>True</value> </param> <param> - <key>file</key> - <value>atsc.cfile</value> + <key>alpha1</key> + <value>1.0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>color1</key> + <value>"blue"</value> </param> <param> - <key>vlen</key> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> <value>1</value> </param> <param> - <key>unbuffered</key> - <value>False</value> + <key>alpha10</key> + <value>1.0</value> </param> <param> - <key>append</key> - <value>False</value> + <key>color10</key> + <value>"dark blue"</value> </param> <param> - <key>alias</key> + <key>label10</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>width10</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(1048, 171)</value> + <key>alpha2</key> + <value>1.0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color2</key> + <value>"red"</value> </param> - </block> - <block> - <key>dtv_atsc_trellis_encoder</key> <param> - <key>id</key> - <value>dtv_atsc_trellis_encoder_0</value> + <key>label2</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>width2</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>alpha3</key> + <value>1.0</value> </param> <param> - <key>affinity</key> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>label3</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>width3</key> + <value>1</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alpha4</key> + <value>1.0</value> </param> <param> - <key>_coordinate</key> - <value>(64, 336)</value> + <key>color4</key> + <value>"black"</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>label4</key> + <value></value> </param> - </block> - <block> - <key>blocks_vector_to_stream</key> <param> - <key>id</key> - <value>blocks_vector_to_stream_1</value> + <key>width4</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alpha5</key> + <value>1.0</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>color5</key> + <value>"cyan"</value> </param> <param> - <key>num_items</key> - <value>1024</value> + <key>label5</key> + <value></value> </param> <param> - <key>vlen</key> + <key>width5</key> <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>alpha6</key> + <value>1.0</value> </param> <param> - <key>affinity</key> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>label6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>width6</key> + <value>1</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alpha7</key> + <value>1.0</value> </param> <param> - <key>_coordinate</key> - <value>(72, 451)</value> + <key>color7</key> + <value>"yellow"</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>label7</key> + <value></value> </param> - </block> - <block> - <key>dtv_atsc_field_sync_mux</key> <param> - <key>id</key> - <value>dtv_atsc_field_sync_mux_0</value> + <key>width7</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alpha8</key> + <value>1.0</value> </param> <param> - <key>alias</key> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>label8</key> <value></value> </param> <param> - <key>affinity</key> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>label9</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>width9</key> + <value>1</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(64, 392)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>name</key> + <value>""</value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> - <key>id</key> - <value>blocks_file_source_0</value> + <key>nconnections</key> + <value>1</value> </param> <param> - <key>_enabled</key> + <key>showports</key> <value>True</value> </param> <param> - <key>file</key> - <value>test.ts</value> + <key>freqhalf</key> + <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>tr_chan</key> + <value>0</value> </param> <param> - <key>repeat</key> - <value>False</value> + <key>tr_level</key> + <value>0.0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> </param> <param> - <key>alias</key> - <value></value> + <key>tr_tag</key> + <value>""</value> </param> <param> - <key>affinity</key> - <value></value> + <key>type</key> + <value>complex</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>update_time</key> + <value>0.10</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> </param> <param> - <key>_coordinate</key> - <value>(48, 19)</value> + <key>label</key> + <value>Relative Gain</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>ymax</key> + <value>10</value> + </param> + <param> + <key>ymin</key> + <value>-140</value> + </param> + <param> + <key>units</key> + <value>dB</value> </param> </block> <connection> - <source_block_id>blocks_vector_to_stream_1</source_block_id> - <sink_block_id>blocks_keep_m_in_n_0</sink_block_id> + <source_block_id>blocks_file_source_0</source_block_id> + <sink_block_id>dtv_atsc_pad_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>blocks_keep_m_in_n_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_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_multiply_xx_0</source_block_id> + <source_block_id>blocks_rotator_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>analog_sig_source_x_0</source_block_id> - <sink_block_id>blocks_multiply_xx_0</sink_block_id> + <source_block_id>blocks_throttle_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>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_0</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>qtgui_freq_sink_x_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>fft_filter_xxx_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>blocks_vector_to_stream_1</source_block_id> + <sink_block_id>blocks_keep_m_in_n_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>wxgui_fftsink2_0</sink_block_id> + <source_block_id>dtv_atsc_field_sync_mux_0</source_block_id> + <sink_block_id>blocks_vector_to_stream_1</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_atsc_pad_0</sink_block_id> + <source_block_id>dtv_atsc_interleaver_0</source_block_id> + <sink_block_id>dtv_atsc_trellis_encoder_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -958,26 +1225,20 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_atsc_interleaver_0</source_block_id> - <sink_block_id>dtv_atsc_trellis_encoder_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_block_id>dtv_atsc_trellis_encoder_0</source_block_id> + <sink_block_id>dtv_atsc_field_sync_mux_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_atsc_trellis_encoder_0</source_block_id> - <sink_block_id>dtv_atsc_field_sync_mux_0</sink_block_id> + <source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id> + <sink_block_id>blocks_rotator_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_atsc_field_sync_mux_0</source_block_id> - <sink_block_id>blocks_vector_to_stream_1</sink_block_id> + <source_block_id>fft_filter_xxx_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/uhd_atsc_tx.grc b/gr-dtv/examples/uhd_atsc_tx.grc new file mode 100644 index 0000000000..7fe55eb19a --- /dev/null +++ b/gr-dtv/examples/uhd_atsc_tx.grc @@ -0,0 +1,3166 @@ +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> +<flow_graph> + <timestamp>Sat Dec 20 12:18:33 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>(368, 19)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>generate_options</key> + <value>qt_gui</value> + </param> + <param> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>uhd_atsc_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>(808, 20)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>center_freq</value> + </param> + <param> + <key>value</key> + <value>429e6</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>(680, 20)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>pilot_freq</value> + </param> + <param> + <key>value</key> + <value>(6000000.0 - (symbol_rate / 2)) / 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>(552, 19)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>symbol_rate</value> + </param> + <param> + <key>value</key> + <value>4500000.0 / 286 * 684</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>50</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(808, 88)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>tx_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>89</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>-8</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(552, 88)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>vga1_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>-35</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>-4</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>10</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(680, 88)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>vga2_gain</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>25</value> + </param> + <param> + <key>rangeType</key> + <value>int</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</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/advatsc.ts</value> + </param> + <param> + <key>_coordinate</key> + <value>(64, 19)</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_keep_m_in_n</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>(104, 451)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_keep_m_in_n_0</value> + </param> + <param> + <key>m</key> + <value>832</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>n</key> + <value>1024</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>offset</key> + <value>4</value> + </param> + </block> + <block> + <key>blocks_rotator_cc</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>(336, 332)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_rotator_cc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>phase_inc</key> + <value>((-3000000.0 + pilot_freq) / symbol_rate) * (math.pi * 2)</value> + </param> + </block> + <block> + <key>blocks_vector_to_stream</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>(96, 387)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>blocks_vector_to_stream_1</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>1024</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>dtv_atsc_field_sync_mux</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>(80, 337)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_field_sync_mux_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_atsc_interleaver</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>(88, 241)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_interleaver_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_atsc_pad</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>(112, 97)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_pad_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_atsc_randomizer</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>(88, 145)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_randomizer_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_atsc_rs_encoder</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>(88, 193)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_rs_encoder_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_atsc_trellis_encoder</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>(80, 289)</value> + </param> + <param> + <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_atsc_trellis_encoder_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_OFF</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>rate1</key> + <value>C1_4</value> + </param> + <param> + <key>rate2</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate3</key> + <value>C1_4</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>constellation</key> + <value>MOD_8VSB</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>(80, 556)</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>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>(576, 316)</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.11, symbol_rate, symbol_rate/2, 0.1152, 200)</value> + </param> + <param> + <key>type</key> + <value>ccc</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(368, 91)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>import</key> + <value>import math</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>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(944, 468)</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>symbol_rate</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + </block> + <block> + <key>qtgui_freq_sink_x</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>0.1</value> + </param> + <param> + <key>axislabels</key> + <value>True</value> + </param> + <param> + <key>bw</key> + <value>symbol_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>fc</key> + <value>center_freq</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>ctrlpanel</key> + <value>False</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fftsize</key> + <value>1024</value> + </param> + <param> + <key>_coordinate</key> + <value>(944, 364)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid</key> + <value>True</value> + </param> + <param> + <key>id</key> + <value>qtgui_freq_sink_x_0</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>alpha10</key> + <value>1.0</value> + </param> + <param> + <key>color10</key> + <value>"dark blue"</value> + </param> + <param> + <key>label10</key> + <value></value> + </param> + <param> + <key>width10</key> + <value>1</value> + </param> + <param> + <key>alpha2</key> + <value>1.0</value> + </param> + <param> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> + <value></value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>label3</key> + <value></value> + </param> + <param> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>"black"</value> + </param> + <param> + <key>label4</key> + <value></value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>"cyan"</value> + </param> + <param> + <key>label5</key> + <value></value> + </param> + <param> + <key>width5</key> + <value>1</value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>"yellow"</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + <param> + <key>label</key> + <value>Relative Gain</value> + </param> + <param> + <key>ymax</key> + <value>10</value> + </param> + <param> + <key>ymin</key> + <value>-140</value> + </param> + <param> + <key>units</key> + <value>dB</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>center_freq</value> + </param> + <param> + <key>norm_gain0</key> + <value>False</value> + </param> + <param> + <key>gain0</key> + <value>tx_gain</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=128,master_clock_rate=" + str(symbol_rate*4)</value> + </param> + <param> + <key>dev_args</key> + <value>""</value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(944, 232)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>uhd_usrp_sink_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>symbol_rate</value> + </param> + <param> + <key>hide_cmd_port</key> + <value>False</value> + </param> + <param> + <key>hide_lo_controls</key> + <value>True</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> + <connection> + <source_block_id>blocks_file_source_0</source_block_id> + <sink_block_id>dtv_atsc_pad_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_keep_m_in_n_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_rotator_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>blocks_vector_to_stream_1</source_block_id> + <sink_block_id>blocks_keep_m_in_n_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_atsc_field_sync_mux_0</source_block_id> + <sink_block_id>blocks_vector_to_stream_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_atsc_interleaver_0</source_block_id> + <sink_block_id>dtv_atsc_trellis_encoder_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_atsc_pad_0</source_block_id> + <sink_block_id>dtv_atsc_randomizer_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_atsc_randomizer_0</source_block_id> + <sink_block_id>dtv_atsc_rs_encoder_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_atsc_rs_encoder_0</source_block_id> + <sink_block_id>dtv_atsc_interleaver_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_atsc_trellis_encoder_0</source_block_id> + <sink_block_id>dtv_atsc_field_sync_mux_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>blocks_rotator_cc_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>qtgui_freq_sink_x_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</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> +</flow_graph> diff --git a/gr-dtv/examples/vv003-cr23.grc b/gr-dtv/examples/vv003-cr23.grc index ec2e572c8b..a81551664c 100644 --- a/gr-dtv/examples/vv003-cr23.grc +++ b/gr-dtv/examples/vv003-cr23.grc @@ -1,367 +1,361 @@ -<?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.11'?> <flow_graph> <timestamp>Sun Dec 28 23:36:42 2014</timestamp> <block> - <key>dtv_dvbt2_framemapper_cc</key> + <key>options</key> <param> - <key>id</key> - <value>dtv_dvbt2_framemapper_cc_0</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>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>rate</key> - <value>C2_3</value> + <key>comment</key> + <value></value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>description</key> + <value></value> </param> <param> - <key>rotation</key> - <value>ROTATION_ON</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>fecblocks</key> - <value>202</value> + <key>_coordinate</key> + <value>(8, 11)</value> </param> <param> - <key>tiblocks</key> - <value>3</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>fftsize1</key> - <value>FFTSIZE_32K_T2GI</value> + <key>hier_block_src_path</key> + <value>.:</value> </param> <param> - <key>fftsize2</key> - <value>FFTSIZE_2K</value> + <key>id</key> + <value>vv003_cr23</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_128</value> + <key>max_nouts</key> + <value>0</value> </param> <param> - <key>l1constellation</key> - <value>L1_MOD_64QAM</value> + <key>qt_qss_theme</key> + <value></value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP7</value> + <key>realtime_scheduling</key> + <value></value> </param> <param> - <key>t2frames</key> - <value>2</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>numdatasyms</key> - <value>59</value> + <key>run_options</key> + <value>prompt</value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>run</key> + <value>True</value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>thread_safe_setters</key> + <value></value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>title</key> + <value></value> </param> + </block> + <block> + <key>variable</key> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>comment</key> + <value></value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>inputmode</key> - <value>FECFRAME_NORMAL</value> + <key>_coordinate</key> + <value>(176, 12)</value> </param> <param> - <key>reservedbiasbits</key> - <value>RESERVED_OFF</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>l1scrambled</key> - <value>L1_SCRAMBLED_OFF</value> + <key>id</key> + <value>center_freq</value> </param> <param> - <key>inband</key> - <value>INBAND_OFF</value> + <key>value</key> + <value>429e6</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_coordinate</key> + <value>(8, 75)</value> </param> <param> - <key>maxoutbuf</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(734, 154)</value> + <key>id</key> + <value>samp_rate</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>(8000000.0 * 8) / 7</value> </param> </block> <block> - <key>variable</key> + <key>blocks_file_sink</key> <param> - <key>id</key> - <value>samp_rate</value> + <key>append</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>value</key> - <value>(8000000.0 * 8) / 7</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> + <key>_enabled</key> + <value>False</value> + </param> + <param> + <key>file</key> + <value>vv.cfile</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 75)</value> + <value>(848, 420)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_freqinterleaver_cc</key> <param> <key>id</key> - <value>dtv_dvbt2_freqinterleaver_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blocks_file_sink_0</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>fftsize</key> - <value>FFTSIZE_32K_T2GI</value> + <key>unbuffered</key> + <value>False</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP7</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_file_source</key> <param> - <key>guardinterval</key> - <value>GI_1_128</value> + <key>alias</key> + <value></value> </param> <param> - <key>numdatasyms</key> - <value>59</value> + <key>comment</key> + <value></value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>affinity</key> + <value></value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>file</key> + <value>/run/shm/adv32k256qam.ts</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>_coordinate</key> + <value>(120, 75)</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>blocks_file_source_0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>_coordinate</key> - <value>(1013, 218)</value> + <key>repeat</key> + <value>True</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>options</key> + <key>blocks_multiply_const_xx</key> <param> - <key>id</key> - <value>vv003_cr23</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>title</key> - <value></value> + <key>const</key> + <value>0.2</value> </param> <param> - <key>author</key> + <key>affinity</key> <value></value> </param> <param> - <key>description</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>_coordinate</key> + <value>(848, 540)</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>id</key> + <value>blocks_multiply_const_xx_0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>run</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>max_nouts</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>digital_ofdm_cyclic_prefixer</key> <param> <key>alias</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(8, 11)</value> + <key>cp_len</key> + <value>32768/128</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>comment</key> + <value></value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> - <key>id</key> - <value>blocks_file_source_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>file</key> - <value>/run/shm/adv32k256qam.ts</value> - </param> - <param> - <key>type</key> - <value>byte</value> + <key>input_size</key> + <value>32768</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>_coordinate</key> + <value>(344, 464)</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>digital_ofdm_cyclic_prefixer_0</value> </param> <param> - <key>affinity</key> + <key>tagname</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(120, 75)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>rolloff</key> <value>0</value> </param> </block> <block> <key>dtv_dvb_bbheader_bb</key> <param> - <key>id</key> - <value>dtv_dvb_bbheader_bb_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> + <key>mode</key> + <value>INPUTMODE_HIEFF</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>alias</key> + <value></value> </param> <param> <key>rate1</key> @@ -377,70 +371,78 @@ </param> <param> <key>rate4</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate5</key> <value>C1_4</value> </param> <param> - <key>rolloff</key> - <value>RO_0_35</value> + <key>comment</key> + <value></value> </param> <param> - <key>mode</key> - <value>FECFRAME_SHORT</value> + <key>affinity</key> + <value></value> </param> <param> - <key>inband</key> - <value>INBAND_OFF</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>fecblocks</key> <value>168</value> </param> <param> - <key>tsrate</key> - <value>4000000</value> + <key>framesize1</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>alias</key> - <value></value> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_coordinate</key> + <value>(360, 24)</value> </param> <param> - <key>minoutbuf</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>id</key> + <value>dtv_dvb_bbheader_bb_0</value> </param> <param> - <key>_coordinate</key> - <value>(352, 19)</value> + <key>inband</key> + <value>INBAND_OFF</value> </param> <param> - <key>_rotation</key> + <key>maxoutbuf</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvb_bbscrambler_bb</key> <param> - <key>id</key> - <value>dtv_dvb_bbscrambler_bb_0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>rolloff</key> + <value>RO_0_35</value> </param> <param> <key>standard</key> <value>STANDARD_DVBT2</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> @@ -456,10 +458,14 @@ </param> <param> <key>rate4</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate5</key> <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -467,39 +473,47 @@ <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>framesize1</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(656, 35)</value> + <value>(656, 36)</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>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_DVBT2</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> @@ -515,10 +529,14 @@ </param> <param> <key>rate4</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate5</key> <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -526,39 +544,47 @@ <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>framesize1</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(856, 35)</value> + <value>(864, 36)</value> </param> <param> <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_bch_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_DVBT2</value> </param> + </block> + <block> + <key>dtv_dvb_ldpc_bb</key> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>alias</key> + <value></value> </param> <param> <key>rate1</key> @@ -574,180 +600,260 @@ </param> <param> <key>rate4</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate5</key> <value>C1_4</value> </param> <param> + <key>comment</key> + <value></value> + </param> + <param> <key>constellation</key> <value>MOD_OTHER</value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>framesize1</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(1064, 35)</value> + <value>(1072, 36)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>dtv_dvb_ldpc_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_DVBT2</value> + </param> </block> <block> - <key>dtv_dvbt2_pilotgenerator_cc</key> + <key>dtv_dvbt2_cellinterleaver_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_pilotgenerator_cc_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>constellation</key> + <value>MOD_256QAM</value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <key>fecblocks</key> + <value>202</value> </param> <param> - <key>fftsize</key> - <value>FFTSIZE_32K_T2GI</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP7</value> + <key>_coordinate</key> + <value>(504, 224)</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_128</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>numdatasyms</key> - <value>59</value> + <key>id</key> + <value>dtv_dvbt2_cellinterleaver_cc_0</value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>tiblocks</key> + <value>3</value> </param> + </block> + <block> + <key>dtv_dvbt2_framemapper_cc</key> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>inputmode</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>alias</key> + <value></value> </param> <param> - <key>misogroup</key> - <value>MISO_TX1</value> + <key>rate</key> + <value>C2_3</value> </param> <param> - <key>equalization</key> - <value>EQUALIZATION_ON</value> + <key>comment</key> + <value></value> </param> <param> - <key>bandwidth</key> - <value>BANDWIDTH_8_0_MHZ</value> + <key>rotation</key> + <value>ROTATION_ON</value> </param> <param> - <key>alias</key> - <value></value> + <key>constellation</key> + <value>MOD_256QAM</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>carriermode</key> + <value>CARRIERS_EXTENDED</value> + </param> + <param> + <key>fecblocks</key> + <value>202</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>fftsize1</key> + <value>FFTSIZE_32K_T2GI</value> + </param> + <param> + <key>fftsize2</key> + <value>FFTSIZE_2K</value> </param> <param> <key>_coordinate</key> - <value>(64, 459)</value> + <value>(736, 140)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_ofdm_cyclic_prefixer</key> + <param> + <key>guardinterval</key> + <value>GI_1_128</value> + </param> <param> <key>id</key> - <value>digital_ofdm_cyclic_prefixer_0</value> + <value>dtv_dvbt2_framemapper_cc_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>inband</key> + <value>INBAND_OFF</value> </param> <param> - <key>input_size</key> - <value>32768</value> + <key>l1constellation</key> + <value>L1_MOD_64QAM</value> </param> <param> - <key>cp_len</key> - <value>32768/128</value> + <key>l1scrambled</key> + <value>L1_SCRAMBLED_OFF</value> </param> <param> - <key>rolloff</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>tagname</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>numdatasyms</key> + <value>59</value> </param> <param> - <key>affinity</key> - <value></value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>paprmode2</key> + <value>PAPR_OFF</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>pilotpattern</key> + <value>PILOT_PP7</value> </param> <param> - <key>_coordinate</key> - <value>(344, 515)</value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> + </param> + <param> + <key>reservedbiasbits</key> + <value>RESERVED_OFF</value> + </param> + <param> + <key>version</key> + <value>VERSION_111</value> + </param> + <param> + <key>t2frames</key> + <value>2</value> + </param> + <param> + <key>tiblocks</key> + <value>3</value> </param> </block> <block> - <key>dtv_dvbt2_p1insertion_cc</key> + <key>dtv_dvbt2_freqinterleaver_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_p1insertion_cc_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> @@ -758,24 +864,48 @@ <value>CARRIERS_EXTENDED</value> </param> <param> - <key>fftsize1</key> + <key>fftsize</key> <value>FFTSIZE_32K_T2GI</value> </param> <param> - <key>fftsize2</key> - <value>FFTSIZE_2K</value> + <key>_coordinate</key> + <value>(1016, 196)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> <key>guardinterval</key> <value>GI_1_128</value> </param> <param> + <key>id</key> + <value>dtv_dvbt2_freqinterleaver_cc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> <key>numdatasyms</key> <value>59</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>paprmode1</key> + <value>PAPR_OFF</value> + </param> + <param> + <key>paprmode2</key> + <value>PAPR_OFF</value> + </param> + <param> + <key>pilotpattern</key> + <value>PILOT_PP7</value> </param> <param> <key>preamble1</key> @@ -786,1167 +916,1186 @@ <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>showlevels</key> - <value>SHOWLEVELS_OFF</value> + <key>version</key> + <value>VERSION_111</value> </param> + </block> + <block> + <key>dtv_dvbt2_interleaver_bb</key> <param> - <key>vclip</key> - <value>3.3</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>rate</key> + <value>C2_3</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>MOD_256QAM</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>(560, 483)</value> + <value>(48, 228)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <value>dtv_dvbt2_interleaver_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> + </block> + <block> + <key>dtv_dvbt2_modulator_bc</key> <param> - <key>const</key> - <value>0.2</value> + <key>alias</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>rotation</key> + <value>ROTATION_ON</value> + </param> + <param> + <key>constellation</key> + <value>MOD_256QAM</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>(864, 571)</value> + <value>(272, 228)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>osmosdr_sink</key> <param> <key>id</key> - <value>osmosdr_sink_0</value> + <value>dtv_dvbt2_modulator_bc_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>fc32</value> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvbt2_p1insertion_cc</key> + <param> + <key>alias</key> + <value></value> </param> <param> - <key>args</key> - <value>bladerf=0,buffers=128,buflen=32768</value> + <key>comment</key> + <value></value> </param> <param> - <key>sync</key> + <key>affinity</key> <value></value> </param> <param> - <key>num_mboards</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>clock_source0</key> - <value></value> + <key>carriermode</key> + <value>CARRIERS_EXTENDED</value> </param> <param> - <key>time_source0</key> - <value></value> + <key>fftsize1</key> + <value>FFTSIZE_32K_T2GI</value> </param> <param> - <key>clock_source1</key> - <value></value> + <key>fftsize2</key> + <value>FFTSIZE_2K</value> </param> <param> - <key>time_source1</key> - <value></value> + <key>_coordinate</key> + <value>(560, 440)</value> </param> <param> - <key>clock_source2</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>time_source2</key> - <value></value> + <key>guardinterval</key> + <value>GI_1_128</value> </param> <param> - <key>clock_source3</key> - <value></value> + <key>id</key> + <value>dtv_dvbt2_p1insertion_cc_0</value> </param> <param> - <key>time_source3</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>clock_source4</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>time_source4</key> - <value></value> + <key>numdatasyms</key> + <value>59</value> </param> <param> - <key>clock_source5</key> - <value></value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>time_source5</key> - <value></value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>clock_source6</key> - <value></value> + <key>showlevels</key> + <value>SHOWLEVELS_OFF</value> </param> <param> - <key>time_source6</key> - <value></value> + <key>version</key> + <value>VERSION_111</value> </param> <param> - <key>clock_source7</key> + <key>vclip</key> + <value>3.3</value> + </param> + </block> + <block> + <key>dtv_dvbt2_pilotgenerator_cc</key> + <param> + <key>bandwidth</key> + <value>BANDWIDTH_8_0_MHZ</value> + </param> + <param> + <key>alias</key> <value></value> </param> <param> - <key>time_source7</key> + <key>comment</key> <value></value> </param> <param> - <key>nchan</key> - <value>1</value> + <key>affinity</key> + <value></value> </param> <param> - <key>sample_rate</key> - <value>samp_rate</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>freq0</key> - <value>429e6</value> + <key>carriermode</key> + <value>CARRIERS_EXTENDED</value> </param> <param> - <key>corr0</key> - <value>0</value> + <key>fftsize</key> + <value>FFTSIZE_32K_T2GI</value> </param> <param> - <key>gain0</key> - <value>18</value> + <key>_coordinate</key> + <value>(56, 420)</value> </param> <param> - <key>if_gain0</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>bb_gain0</key> - <value>-8</value> + <key>guardinterval</key> + <value>GI_1_128</value> </param> <param> - <key>ant0</key> - <value></value> + <key>id</key> + <value>dtv_dvbt2_pilotgenerator_cc_0</value> </param> <param> - <key>bw0</key> - <value>8750000</value> + <key>misogroup</key> + <value>MISO_TX1</value> </param> <param> - <key>freq1</key> - <value>100e6</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>corr1</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>gain1</key> - <value>10</value> + <key>numdatasyms</key> + <value>59</value> </param> <param> - <key>if_gain1</key> - <value>20</value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>bb_gain1</key> - <value>20</value> + <key>paprmode2</key> + <value>PAPR_OFF</value> </param> <param> - <key>ant1</key> - <value></value> + <key>pilotpattern</key> + <value>PILOT_PP7</value> </param> <param> - <key>bw1</key> - <value>0</value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>freq2</key> - <value>100e6</value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>corr2</key> - <value>0</value> + <key>equalization</key> + <value>EQUALIZATION_ON</value> </param> <param> - <key>gain2</key> - <value>10</value> + <key>version</key> + <value>VERSION_111</value> </param> + </block> + <block> + <key>osmosdr_sink</key> <param> - <key>if_gain2</key> - <value>20</value> + <key>alias</key> + <value></value> </param> <param> - <key>bb_gain2</key> - <value>20</value> + <key>ant0</key> + <value></value> </param> <param> - <key>ant2</key> - <value></value> + <key>bb_gain0</key> + <value>-8</value> </param> <param> - <key>bw2</key> + <key>bw0</key> + <value>8750000</value> + </param> + <param> + <key>corr0</key> <value>0</value> </param> <param> - <key>freq3</key> - <value>100e6</value> + <key>freq0</key> + <value>center_freq</value> </param> <param> - <key>corr3</key> + <key>if_gain0</key> <value>0</value> </param> <param> - <key>gain3</key> + <key>gain0</key> <value>10</value> </param> <param> - <key>if_gain3</key> - <value>20</value> + <key>ant10</key> + <value></value> </param> <param> - <key>bb_gain3</key> + <key>bb_gain10</key> <value>20</value> </param> <param> - <key>ant3</key> - <value></value> + <key>bw10</key> + <value>0</value> </param> <param> - <key>bw3</key> + <key>corr10</key> <value>0</value> </param> <param> - <key>freq4</key> + <key>freq10</key> <value>100e6</value> </param> <param> - <key>corr4</key> - <value>0</value> + <key>if_gain10</key> + <value>20</value> </param> <param> - <key>gain4</key> + <key>gain10</key> <value>10</value> </param> <param> - <key>if_gain4</key> - <value>20</value> + <key>ant11</key> + <value></value> </param> <param> - <key>bb_gain4</key> + <key>bb_gain11</key> <value>20</value> </param> <param> - <key>ant4</key> - <value></value> + <key>bw11</key> + <value>0</value> </param> <param> - <key>bw4</key> + <key>corr11</key> <value>0</value> </param> <param> - <key>freq5</key> + <key>freq11</key> <value>100e6</value> </param> <param> - <key>corr5</key> - <value>0</value> + <key>if_gain11</key> + <value>20</value> </param> <param> - <key>gain5</key> + <key>gain11</key> <value>10</value> </param> <param> - <key>if_gain5</key> - <value>20</value> + <key>ant12</key> + <value></value> </param> <param> - <key>bb_gain5</key> + <key>bb_gain12</key> <value>20</value> </param> <param> - <key>ant5</key> - <value></value> + <key>bw12</key> + <value>0</value> </param> <param> - <key>bw5</key> + <key>corr12</key> <value>0</value> </param> <param> - <key>freq6</key> + <key>freq12</key> <value>100e6</value> </param> <param> - <key>corr6</key> - <value>0</value> + <key>if_gain12</key> + <value>20</value> </param> <param> - <key>gain6</key> + <key>gain12</key> <value>10</value> </param> <param> - <key>if_gain6</key> - <value>20</value> + <key>ant13</key> + <value></value> </param> <param> - <key>bb_gain6</key> + <key>bb_gain13</key> <value>20</value> </param> <param> - <key>ant6</key> - <value></value> + <key>bw13</key> + <value>0</value> </param> <param> - <key>bw6</key> + <key>corr13</key> <value>0</value> </param> <param> - <key>freq7</key> + <key>freq13</key> <value>100e6</value> </param> <param> - <key>corr7</key> - <value>0</value> + <key>if_gain13</key> + <value>20</value> </param> <param> - <key>gain7</key> + <key>gain13</key> <value>10</value> </param> <param> - <key>if_gain7</key> - <value>20</value> + <key>ant14</key> + <value></value> </param> <param> - <key>bb_gain7</key> + <key>bb_gain14</key> <value>20</value> </param> <param> - <key>ant7</key> - <value></value> + <key>bw14</key> + <value>0</value> </param> <param> - <key>bw7</key> + <key>corr14</key> <value>0</value> </param> <param> - <key>freq8</key> + <key>freq14</key> <value>100e6</value> </param> <param> - <key>corr8</key> - <value>0</value> + <key>if_gain14</key> + <value>20</value> </param> <param> - <key>gain8</key> + <key>gain14</key> <value>10</value> </param> <param> - <key>if_gain8</key> - <value>20</value> + <key>ant15</key> + <value></value> </param> <param> - <key>bb_gain8</key> + <key>bb_gain15</key> <value>20</value> </param> <param> - <key>ant8</key> - <value></value> + <key>bw15</key> + <value>0</value> </param> <param> - <key>bw8</key> + <key>corr15</key> <value>0</value> </param> <param> - <key>freq9</key> + <key>freq15</key> <value>100e6</value> </param> <param> - <key>corr9</key> - <value>0</value> + <key>if_gain15</key> + <value>20</value> </param> <param> - <key>gain9</key> + <key>gain15</key> <value>10</value> </param> <param> - <key>if_gain9</key> - <value>20</value> + <key>ant16</key> + <value></value> </param> <param> - <key>bb_gain9</key> + <key>bb_gain16</key> <value>20</value> </param> <param> - <key>ant9</key> - <value></value> + <key>bw16</key> + <value>0</value> </param> <param> - <key>bw9</key> + <key>corr16</key> <value>0</value> </param> <param> - <key>freq10</key> + <key>freq16</key> <value>100e6</value> </param> <param> - <key>corr10</key> - <value>0</value> + <key>if_gain16</key> + <value>20</value> </param> <param> - <key>gain10</key> + <key>gain16</key> <value>10</value> </param> <param> - <key>if_gain10</key> - <value>20</value> + <key>ant17</key> + <value></value> </param> <param> - <key>bb_gain10</key> + <key>bb_gain17</key> <value>20</value> </param> <param> - <key>ant10</key> - <value></value> + <key>bw17</key> + <value>0</value> </param> <param> - <key>bw10</key> + <key>corr17</key> <value>0</value> </param> <param> - <key>freq11</key> + <key>freq17</key> <value>100e6</value> </param> <param> - <key>corr11</key> - <value>0</value> + <key>if_gain17</key> + <value>20</value> </param> <param> - <key>gain11</key> + <key>gain17</key> <value>10</value> </param> <param> - <key>if_gain11</key> - <value>20</value> + <key>ant18</key> + <value></value> </param> <param> - <key>bb_gain11</key> + <key>bb_gain18</key> <value>20</value> </param> <param> - <key>ant11</key> - <value></value> + <key>bw18</key> + <value>0</value> </param> <param> - <key>bw11</key> + <key>corr18</key> <value>0</value> </param> <param> - <key>freq12</key> + <key>freq18</key> <value>100e6</value> </param> <param> - <key>corr12</key> - <value>0</value> + <key>if_gain18</key> + <value>20</value> </param> <param> - <key>gain12</key> + <key>gain18</key> <value>10</value> </param> <param> - <key>if_gain12</key> - <value>20</value> + <key>ant19</key> + <value></value> </param> <param> - <key>bb_gain12</key> + <key>bb_gain19</key> <value>20</value> </param> <param> - <key>ant12</key> - <value></value> + <key>bw19</key> + <value>0</value> </param> <param> - <key>bw12</key> + <key>corr19</key> <value>0</value> </param> <param> - <key>freq13</key> + <key>freq19</key> <value>100e6</value> </param> <param> - <key>corr13</key> - <value>0</value> + <key>if_gain19</key> + <value>20</value> </param> <param> - <key>gain13</key> + <key>gain19</key> <value>10</value> </param> <param> - <key>if_gain13</key> - <value>20</value> + <key>ant1</key> + <value></value> </param> <param> - <key>bb_gain13</key> + <key>bb_gain1</key> <value>20</value> </param> <param> - <key>ant13</key> - <value></value> + <key>bw1</key> + <value>0</value> </param> <param> - <key>bw13</key> + <key>corr1</key> <value>0</value> </param> <param> - <key>freq14</key> + <key>freq1</key> <value>100e6</value> </param> <param> - <key>corr14</key> - <value>0</value> + <key>if_gain1</key> + <value>20</value> </param> <param> - <key>gain14</key> + <key>gain1</key> <value>10</value> </param> <param> - <key>if_gain14</key> - <value>20</value> + <key>ant20</key> + <value></value> </param> <param> - <key>bb_gain14</key> + <key>bb_gain20</key> <value>20</value> </param> <param> - <key>ant14</key> - <value></value> + <key>bw20</key> + <value>0</value> </param> <param> - <key>bw14</key> + <key>corr20</key> <value>0</value> </param> <param> - <key>freq15</key> + <key>freq20</key> <value>100e6</value> </param> <param> - <key>corr15</key> - <value>0</value> + <key>if_gain20</key> + <value>20</value> </param> <param> - <key>gain15</key> + <key>gain20</key> <value>10</value> </param> <param> - <key>if_gain15</key> - <value>20</value> + <key>ant21</key> + <value></value> </param> <param> - <key>bb_gain15</key> + <key>bb_gain21</key> <value>20</value> </param> <param> - <key>ant15</key> - <value></value> + <key>bw21</key> + <value>0</value> </param> <param> - <key>bw15</key> + <key>corr21</key> <value>0</value> </param> <param> - <key>freq16</key> + <key>freq21</key> <value>100e6</value> </param> <param> - <key>corr16</key> - <value>0</value> + <key>if_gain21</key> + <value>20</value> </param> <param> - <key>gain16</key> + <key>gain21</key> <value>10</value> </param> <param> - <key>if_gain16</key> - <value>20</value> + <key>ant22</key> + <value></value> </param> <param> - <key>bb_gain16</key> + <key>bb_gain22</key> <value>20</value> </param> <param> - <key>ant16</key> - <value></value> + <key>bw22</key> + <value>0</value> </param> <param> - <key>bw16</key> + <key>corr22</key> <value>0</value> </param> <param> - <key>freq17</key> + <key>freq22</key> <value>100e6</value> </param> <param> - <key>corr17</key> - <value>0</value> + <key>if_gain22</key> + <value>20</value> </param> <param> - <key>gain17</key> + <key>gain22</key> <value>10</value> </param> <param> - <key>if_gain17</key> - <value>20</value> + <key>ant23</key> + <value></value> </param> <param> - <key>bb_gain17</key> + <key>bb_gain23</key> <value>20</value> </param> <param> - <key>ant17</key> - <value></value> + <key>bw23</key> + <value>0</value> </param> <param> - <key>bw17</key> + <key>corr23</key> <value>0</value> </param> <param> - <key>freq18</key> + <key>freq23</key> <value>100e6</value> </param> <param> - <key>corr18</key> - <value>0</value> + <key>if_gain23</key> + <value>20</value> </param> <param> - <key>gain18</key> + <key>gain23</key> <value>10</value> </param> <param> - <key>if_gain18</key> - <value>20</value> + <key>ant24</key> + <value></value> </param> <param> - <key>bb_gain18</key> + <key>bb_gain24</key> <value>20</value> </param> <param> - <key>ant18</key> - <value></value> + <key>bw24</key> + <value>0</value> </param> <param> - <key>bw18</key> + <key>corr24</key> <value>0</value> </param> <param> - <key>freq19</key> + <key>freq24</key> <value>100e6</value> </param> <param> - <key>corr19</key> - <value>0</value> + <key>if_gain24</key> + <value>20</value> </param> <param> - <key>gain19</key> + <key>gain24</key> <value>10</value> </param> <param> - <key>if_gain19</key> - <value>20</value> + <key>ant25</key> + <value></value> </param> <param> - <key>bb_gain19</key> + <key>bb_gain25</key> <value>20</value> </param> <param> - <key>ant19</key> - <value></value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>bw19</key> + <key>corr25</key> <value>0</value> </param> <param> - <key>freq20</key> + <key>freq25</key> <value>100e6</value> </param> <param> - <key>corr20</key> - <value>0</value> + <key>if_gain25</key> + <value>20</value> </param> <param> - <key>gain20</key> + <key>gain25</key> <value>10</value> </param> <param> - <key>if_gain20</key> - <value>20</value> + <key>ant26</key> + <value></value> </param> <param> - <key>bb_gain20</key> + <key>bb_gain26</key> <value>20</value> </param> <param> - <key>ant20</key> - <value></value> + <key>bw26</key> + <value>0</value> </param> <param> - <key>bw20</key> + <key>corr26</key> <value>0</value> </param> <param> - <key>freq21</key> + <key>freq26</key> <value>100e6</value> </param> <param> - <key>corr21</key> - <value>0</value> + <key>if_gain26</key> + <value>20</value> </param> <param> - <key>gain21</key> + <key>gain26</key> <value>10</value> </param> <param> - <key>if_gain21</key> - <value>20</value> + <key>ant27</key> + <value></value> </param> <param> - <key>bb_gain21</key> + <key>bb_gain27</key> <value>20</value> </param> <param> - <key>ant21</key> - <value></value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>bw21</key> + <key>corr27</key> <value>0</value> </param> <param> - <key>freq22</key> + <key>freq27</key> <value>100e6</value> </param> <param> - <key>corr22</key> - <value>0</value> + <key>if_gain27</key> + <value>20</value> </param> <param> - <key>gain22</key> + <key>gain27</key> <value>10</value> </param> <param> - <key>if_gain22</key> - <value>20</value> + <key>ant28</key> + <value></value> </param> <param> - <key>bb_gain22</key> + <key>bb_gain28</key> <value>20</value> </param> <param> - <key>ant22</key> - <value></value> + <key>bw28</key> + <value>0</value> </param> <param> - <key>bw22</key> + <key>corr28</key> <value>0</value> </param> <param> - <key>freq23</key> + <key>freq28</key> <value>100e6</value> </param> <param> - <key>corr23</key> - <value>0</value> + <key>if_gain28</key> + <value>20</value> </param> <param> - <key>gain23</key> + <key>gain28</key> <value>10</value> </param> <param> - <key>if_gain23</key> - <value>20</value> + <key>ant29</key> + <value></value> </param> <param> - <key>bb_gain23</key> + <key>bb_gain29</key> <value>20</value> </param> <param> - <key>ant23</key> - <value></value> + <key>bw29</key> + <value>0</value> </param> <param> - <key>bw23</key> + <key>corr29</key> <value>0</value> </param> <param> - <key>freq24</key> + <key>freq29</key> <value>100e6</value> </param> <param> - <key>corr24</key> - <value>0</value> + <key>if_gain29</key> + <value>20</value> </param> <param> - <key>gain24</key> + <key>gain29</key> <value>10</value> </param> <param> - <key>if_gain24</key> - <value>20</value> + <key>ant2</key> + <value></value> </param> <param> - <key>bb_gain24</key> + <key>bb_gain2</key> <value>20</value> </param> <param> - <key>ant24</key> - <value></value> + <key>bw2</key> + <value>0</value> </param> <param> - <key>bw24</key> + <key>corr2</key> <value>0</value> </param> <param> - <key>freq25</key> + <key>freq2</key> <value>100e6</value> </param> <param> - <key>corr25</key> - <value>0</value> + <key>if_gain2</key> + <value>20</value> </param> <param> - <key>gain25</key> + <key>gain2</key> <value>10</value> </param> <param> - <key>if_gain25</key> - <value>20</value> + <key>ant30</key> + <value></value> </param> <param> - <key>bb_gain25</key> + <key>bb_gain30</key> <value>20</value> </param> <param> - <key>ant25</key> - <value></value> + <key>bw30</key> + <value>0</value> </param> <param> - <key>bw25</key> + <key>corr30</key> <value>0</value> </param> <param> - <key>freq26</key> + <key>freq30</key> <value>100e6</value> </param> <param> - <key>corr26</key> - <value>0</value> + <key>if_gain30</key> + <value>20</value> </param> <param> - <key>gain26</key> + <key>gain30</key> <value>10</value> </param> <param> - <key>if_gain26</key> - <value>20</value> + <key>ant31</key> + <value></value> </param> <param> - <key>bb_gain26</key> + <key>bb_gain31</key> <value>20</value> </param> <param> - <key>ant26</key> - <value></value> + <key>bw31</key> + <value>0</value> </param> <param> - <key>bw26</key> + <key>corr31</key> <value>0</value> </param> <param> - <key>freq27</key> + <key>freq31</key> <value>100e6</value> </param> <param> - <key>corr27</key> - <value>0</value> + <key>if_gain31</key> + <value>20</value> </param> <param> - <key>gain27</key> + <key>gain31</key> <value>10</value> </param> <param> - <key>if_gain27</key> - <value>20</value> + <key>ant3</key> + <value></value> </param> <param> - <key>bb_gain27</key> + <key>bb_gain3</key> <value>20</value> </param> <param> - <key>ant27</key> - <value></value> + <key>bw3</key> + <value>0</value> </param> <param> - <key>bw27</key> + <key>corr3</key> <value>0</value> </param> <param> - <key>freq28</key> + <key>freq3</key> <value>100e6</value> </param> <param> - <key>corr28</key> - <value>0</value> + <key>if_gain3</key> + <value>20</value> </param> <param> - <key>gain28</key> + <key>gain3</key> <value>10</value> </param> <param> - <key>if_gain28</key> - <value>20</value> + <key>ant4</key> + <value></value> </param> <param> - <key>bb_gain28</key> + <key>bb_gain4</key> <value>20</value> </param> <param> - <key>ant28</key> - <value></value> + <key>bw4</key> + <value>0</value> </param> <param> - <key>bw28</key> + <key>corr4</key> <value>0</value> </param> <param> - <key>freq29</key> + <key>freq4</key> <value>100e6</value> </param> <param> - <key>corr29</key> - <value>0</value> + <key>if_gain4</key> + <value>20</value> </param> <param> - <key>gain29</key> + <key>gain4</key> <value>10</value> </param> <param> - <key>if_gain29</key> - <value>20</value> + <key>ant5</key> + <value></value> </param> <param> - <key>bb_gain29</key> + <key>bb_gain5</key> <value>20</value> </param> <param> - <key>ant29</key> - <value></value> + <key>bw5</key> + <value>0</value> </param> <param> - <key>bw29</key> + <key>corr5</key> <value>0</value> </param> <param> - <key>freq30</key> + <key>freq5</key> <value>100e6</value> </param> <param> - <key>corr30</key> - <value>0</value> + <key>if_gain5</key> + <value>20</value> </param> <param> - <key>gain30</key> + <key>gain5</key> <value>10</value> </param> <param> - <key>if_gain30</key> - <value>20</value> + <key>ant6</key> + <value></value> </param> <param> - <key>bb_gain30</key> + <key>bb_gain6</key> <value>20</value> </param> <param> - <key>ant30</key> - <value></value> + <key>bw6</key> + <value>0</value> </param> <param> - <key>bw30</key> + <key>corr6</key> <value>0</value> </param> <param> - <key>freq31</key> + <key>freq6</key> <value>100e6</value> </param> <param> - <key>corr31</key> - <value>0</value> + <key>if_gain6</key> + <value>20</value> </param> <param> - <key>gain31</key> + <key>gain6</key> <value>10</value> </param> <param> - <key>if_gain31</key> - <value>20</value> + <key>ant7</key> + <value></value> </param> <param> - <key>bb_gain31</key> + <key>bb_gain7</key> <value>20</value> </param> <param> - <key>ant31</key> - <value></value> - </param> - <param> - <key>bw31</key> + <key>bw7</key> <value>0</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> + <key>corr7</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(1048, 483)</value> + <key>freq7</key> + <value>100e6</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>if_gain7</key> + <value>20</value> </param> - </block> - <block> - <key>blocks_file_sink</key> <param> - <key>id</key> - <value>blocks_file_sink_0</value> + <key>gain7</key> + <value>10</value> </param> <param> - <key>_enabled</key> - <value>False</value> + <key>ant8</key> + <value></value> </param> <param> - <key>file</key> - <value>vv.cfile</value> + <key>bb_gain8</key> + <value>20</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>bw8</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>corr8</key> + <value>0</value> </param> <param> - <key>unbuffered</key> - <value>False</value> + <key>freq8</key> + <value>100e6</value> </param> <param> - <key>append</key> - <value>False</value> + <key>if_gain8</key> + <value>20</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain8</key> + <value>10</value> </param> <param> - <key>affinity</key> + <key>ant9</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(864, 475)</value> + <key>bb_gain9</key> + <value>20</value> </param> <param> - <key>_rotation</key> + <key>bw9</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_interleaver_bb</key> - <param> - <key>id</key> - <value>dtv_dvbt2_interleaver_bb_0</value> - </param> <param> - <key>_enabled</key> - <value>True</value> + <key>corr9</key> + <value>0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>freq9</key> + <value>100e6</value> </param> <param> - <key>rate</key> - <value>C2_3</value> + <key>if_gain9</key> + <value>20</value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>gain9</key> + <value>10</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -1954,165 +2103,155 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(48, 219)</value> + <value>(1056, 428)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_modulator_bc</key> <param> <key>id</key> - <value>dtv_dvbt2_modulator_bc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>osmosdr_sink_0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>clock_source0</key> + <value></value> </param> <param> - <key>rotation</key> - <value>ROTATION_ON</value> + <key>time_source0</key> + <value></value> </param> <param> - <key>alias</key> + <key>clock_source1</key> <value></value> </param> <param> - <key>affinity</key> + <key>time_source1</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>clock_source2</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>time_source2</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(264, 219)</value> + <key>clock_source3</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>time_source3</key> + <value></value> </param> - </block> - <block> - <key>dtv_dvbt2_cellinterleaver_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_cellinterleaver_cc_0</value> + <key>clock_source4</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>time_source4</key> + <value></value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>clock_source5</key> + <value></value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>fecblocks</key> - <value>202</value> + <key>clock_source6</key> + <value></value> </param> <param> - <key>tiblocks</key> - <value>3</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>alias</key> + <key>clock_source7</key> <value></value> </param> <param> - <key>affinity</key> + <key>time_source7</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>nchan</key> + <value>1</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>num_mboards</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(504, 211)</value> + <key>sample_rate</key> + <value>samp_rate</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>sync</key> + <value></value> </param> </block> <connection> - <source_block_id>dtv_dvb_bch_bb_0</source_block_id> - <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id> + <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> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id> - <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id> + <source_block_id>blocks_multiply_const_xx_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>dtv_dvb_ldpc_bb_0</source_block_id> - <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id> + <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> + <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id> - <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id> + <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id> + <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id> - <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id> + <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id> + <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id> - <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id> + <source_block_id>dtv_dvb_bch_bb_0</source_block_id> + <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id> - <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id> + <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id> + <sink_block_id>dtv_dvbt2_interleaver_bb_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_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id> + <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2129,32 +2268,32 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> - <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id> + <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id> + <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id> - <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> + <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id> + <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_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_multiply_const_vxx_0</source_block_id> - <sink_block_id>osmosdr_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> + <sink_block_id>blocks_multiply_const_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> - <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id> + <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/vv009-4kfft.grc b/gr-dtv/examples/vv009-4kfft.grc index d50222980f..cd8b24701f 100644 --- a/gr-dtv/examples/vv009-4kfft.grc +++ b/gr-dtv/examples/vv009-4kfft.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.11'?> <flow_graph> <timestamp>Mon Dec 29 00:00:54 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>vv009_4kfft</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> + <value>qt_gui</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>vv009_4kfft</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,58 +73,132 @@ <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>(176, 12)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>center_freq</value> + </param> + <param> + <key>value</key> + <value>429e6</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, 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>(8000000.0 * 8) / 7</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>False</value> + </param> + <param> + <key>file</key> + <value>vv.cfile</value> + </param> + <param> <key>_coordinate</key> - <value>(8, 75)</value> + <value>(832, 420)</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>id</key> - <value>blocks_file_source_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> @@ -107,6 +209,26 @@ <value>/run/shm/adv4k64qam.ts</value> </param> <param> + <key>_coordinate</key> + <value>(120, 75)</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> @@ -118,71 +240,70 @@ <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>blocks_multiply_const_xx</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>const</key> + <value>0.2</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(120, 75)</value> + <value>(832, 540)</value> </param> <param> <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> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> + <value>blocks_multiply_const_xx_0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>rate1</key> - <value>C2_3</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>rate2</key> - <value>C1_3</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>rate3</key> - <value>C1_4</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>digital_ofdm_cyclic_prefixer</key> <param> - <key>rate4</key> - <value>C1_4</value> + <key>alias</key> + <value></value> </param> <param> - <key>constellation</key> - <value>MOD_OTHER</value> + <key>cp_len</key> + <value>4096/32</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -190,39 +311,51 @@ <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>input_size</key> + <value>4096</value> </param> <param> <key>_coordinate</key> - <value>(1056, 35)</value> + <value>(336, 464)</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>digital_ofdm_cyclic_prefixer_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>tagname</key> + <value></value> </param> <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>rolloff</key> + <value>0</value> + </param> + </block> + <block> + <key>dtv_dvb_bbheader_bb</key> + <param> + <key>mode</key> + <value>INPUTMODE_NORMAL</value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> <key>rate1</key> @@ -238,10 +371,14 @@ </param> <param> <key>rate4</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate5</key> <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -249,39 +386,63 @@ <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>framesize1</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(840, 35)</value> + <value>(360, 24)</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_35</value> </param> <param> <key>standard</key> <value>STANDARD_DVBT2</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> @@ -297,10 +458,14 @@ </param> <param> <key>rate4</key> + <value>C1_5_MEDIUM</value> + </param> + <param> + <key>rate5</key> <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -308,39 +473,47 @@ <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>framesize1</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(624, 35)</value> + <value>(632, 36)</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>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_DVBT2</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> @@ -356,196 +529,216 @@ </param> <param> <key>rate4</key> - <value>C1_4</value> + <value>C1_5_MEDIUM</value> </param> <param> - <key>rolloff</key> - <value>RO_0_35</value> + <key>rate5</key> + <value>C1_4</value> </param> <param> - <key>mode</key> - <value>FECFRAME_NORMAL</value> + <key>comment</key> + <value></value> </param> <param> - <key>inband</key> - <value>INBAND_OFF</value> + <key>affinity</key> + <value></value> </param> <param> - <key>fecblocks</key> - <value>168</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>tsrate</key> - <value>4000000</value> + <key>framesize1</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>alias</key> - <value></value> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_coordinate</key> + <value>(856, 36)</value> </param> <param> - <key>minoutbuf</key> + <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>_coordinate</key> - <value>(360, 19)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>standard</key> + <value>STANDARD_DVBT2</value> </param> </block> <block> - <key>dtv_dvbt2_pilotgenerator_cc</key> + <key>dtv_dvb_ldpc_bb</key> <param> - <key>id</key> - <value>dtv_dvbt2_pilotgenerator_cc_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>rate1</key> + <value>C2_3</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_NORMAL</value> + <key>rate2</key> + <value>C1_3</value> </param> <param> - <key>fftsize</key> - <value>FFTSIZE_4K</value> + <key>rate3</key> + <value>C1_4</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP7</value> + <key>rate4</key> + <value>C1_5_MEDIUM</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_32</value> + <key>rate5</key> + <value>C1_4</value> </param> <param> - <key>numdatasyms</key> - <value>100</value> + <key>comment</key> + <value></value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>constellation</key> + <value>MOD_OTHER</value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>affinity</key> + <value></value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>framesize1</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>misogroup</key> - <value>MISO_TX1</value> + <key>_coordinate</key> + <value>(1072, 36)</value> </param> <param> - <key>equalization</key> - <value>EQUALIZATION_ON</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>bandwidth</key> - <value>BANDWIDTH_8_0_MHZ</value> + <key>id</key> + <value>dtv_dvb_ldpc_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_DVBT2</value> + </param> + </block> + <block> + <key>dtv_dvbt2_cellinterleaver_cc</key> + <param> <key>alias</key> <value></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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fecblocks</key> + <value>31</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(56, 451)</value> + <value>(504, 224)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_ofdm_cyclic_prefixer</key> <param> <key>id</key> - <value>digital_ofdm_cyclic_prefixer_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>input_size</key> - <value>4096</value> + <value>dtv_dvbt2_cellinterleaver_cc_0</value> </param> <param> - <key>cp_len</key> - <value>4096/32</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>rolloff</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>tagname</key> - <value></value> + <key>tiblocks</key> + <value>3</value> </param> + </block> + <block> + <key>dtv_dvbt2_framemapper_cc</key> <param> - <key>alias</key> - <value></value> + <key>inputmode</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>affinity</key> + <key>alias</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>rate</key> + <value>C2_3</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(328, 507)</value> + <key>rotation</key> + <value>ROTATION_ON</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>constellation</key> + <value>MOD_64QAM</value> </param> - </block> - <block> - <key>dtv_dvbt2_p1insertion_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_p1insertion_cc_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> @@ -556,489 +749,497 @@ <value>CARRIERS_NORMAL</value> </param> <param> - <key>fftsize1</key> - <value>FFTSIZE_4K</value> - </param> - <param> - <key>fftsize2</key> - <value>FFTSIZE_2K</value> + <key>fecblocks</key> + <value>31</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_32</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>numdatasyms</key> - <value>100</value> + <key>fftsize1</key> + <value>FFTSIZE_4K</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>fftsize2</key> + <value>FFTSIZE_2K</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>_coordinate</key> + <value>(744, 140)</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>showlevels</key> - <value>SHOWLEVELS_OFF</value> + <key>guardinterval</key> + <value>GI_1_32</value> </param> <param> - <key>vclip</key> - <value>3.3</value> + <key>id</key> + <value>dtv_dvbt2_framemapper_cc_0</value> </param> <param> - <key>alias</key> - <value></value> + <key>inband</key> + <value>INBAND_OFF</value> </param> <param> - <key>affinity</key> - <value></value> + <key>l1constellation</key> + <value>L1_MOD_16QAM</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>l1scrambled</key> + <value>L1_SCRAMBLED_OFF</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(552, 475)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>numdatasyms</key> + <value>100</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>paprmode2</key> + <value>PAPR_OFF</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>pilotpattern</key> + <value>PILOT_PP7</value> </param> <param> - <key>const</key> - <value>0.2</value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>alias</key> - <value></value> + <key>reservedbiasbits</key> + <value>RESERVED_OFF</value> </param> <param> - <key>affinity</key> - <value></value> + <key>version</key> + <value>VERSION_111</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>t2frames</key> + <value>2</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>tiblocks</key> + <value>3</value> </param> + </block> + <block> + <key>dtv_dvbt2_freqinterleaver_cc</key> <param> - <key>_coordinate</key> - <value>(832, 563)</value> + <key>alias</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>comment</key> + <value></value> </param> - </block> - <block> - <key>osmosdr_sink</key> <param> - <key>id</key> - <value>osmosdr_sink_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>fc32</value> + <key>carriermode</key> + <value>CARRIERS_NORMAL</value> </param> <param> - <key>args</key> - <value>bladerf=0,buffers=128,buflen=32768</value> + <key>fftsize</key> + <value>FFTSIZE_4K</value> </param> <param> - <key>sync</key> - <value></value> + <key>_coordinate</key> + <value>(1024, 196)</value> </param> <param> - <key>num_mboards</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>clock_source0</key> - <value></value> + <key>guardinterval</key> + <value>GI_1_32</value> </param> <param> - <key>time_source0</key> - <value></value> + <key>id</key> + <value>dtv_dvbt2_freqinterleaver_cc_0</value> </param> <param> - <key>clock_source1</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>time_source1</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>clock_source2</key> - <value></value> + <key>numdatasyms</key> + <value>100</value> </param> <param> - <key>time_source2</key> - <value></value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>clock_source3</key> - <value></value> + <key>paprmode2</key> + <value>PAPR_OFF</value> </param> <param> - <key>time_source3</key> - <value></value> + <key>pilotpattern</key> + <value>PILOT_PP7</value> </param> <param> - <key>clock_source4</key> - <value></value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>time_source4</key> - <value></value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>clock_source5</key> - <value></value> + <key>version</key> + <value>VERSION_111</value> </param> + </block> + <block> + <key>dtv_dvbt2_interleaver_bb</key> <param> - <key>time_source5</key> + <key>alias</key> <value></value> </param> <param> - <key>clock_source6</key> - <value></value> + <key>rate</key> + <value>C2_3</value> </param> <param> - <key>time_source6</key> + <key>comment</key> <value></value> </param> <param> - <key>clock_source7</key> - <value></value> + <key>constellation</key> + <value>MOD_64QAM</value> </param> <param> - <key>time_source7</key> + <key>affinity</key> <value></value> </param> <param> - <key>nchan</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>sample_rate</key> - <value>samp_rate</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>freq0</key> - <value>429e6</value> + <key>_coordinate</key> + <value>(48, 228)</value> </param> <param> - <key>corr0</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>gain0</key> - <value>18</value> + <key>id</key> + <value>dtv_dvbt2_interleaver_bb_0</value> </param> <param> - <key>if_gain0</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>bb_gain0</key> - <value>-8</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbt2_modulator_bc</key> <param> - <key>ant0</key> + <key>alias</key> <value></value> </param> <param> - <key>bw0</key> - <value>8750000</value> + <key>comment</key> + <value></value> </param> <param> - <key>freq1</key> - <value>100e6</value> + <key>rotation</key> + <value>ROTATION_ON</value> </param> <param> - <key>corr1</key> - <value>0</value> + <key>constellation</key> + <value>MOD_64QAM</value> </param> <param> - <key>gain1</key> - <value>10</value> + <key>affinity</key> + <value></value> </param> <param> - <key>if_gain1</key> - <value>20</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>bb_gain1</key> - <value>20</value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>ant1</key> - <value></value> + <key>_coordinate</key> + <value>(272, 228)</value> </param> <param> - <key>bw1</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>freq2</key> - <value>100e6</value> + <key>id</key> + <value>dtv_dvbt2_modulator_bc_0</value> </param> <param> - <key>corr2</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>gain2</key> - <value>10</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvbt2_p1insertion_cc</key> <param> - <key>if_gain2</key> - <value>20</value> + <key>alias</key> + <value></value> </param> <param> - <key>bb_gain2</key> - <value>20</value> + <key>comment</key> + <value></value> </param> <param> - <key>ant2</key> + <key>affinity</key> <value></value> </param> <param> - <key>bw2</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>freq3</key> - <value>100e6</value> + <key>carriermode</key> + <value>CARRIERS_NORMAL</value> </param> <param> - <key>corr3</key> - <value>0</value> + <key>fftsize1</key> + <value>FFTSIZE_4K</value> </param> <param> - <key>gain3</key> - <value>10</value> + <key>fftsize2</key> + <value>FFTSIZE_2K</value> </param> <param> - <key>if_gain3</key> - <value>20</value> + <key>_coordinate</key> + <value>(560, 440)</value> </param> <param> - <key>bb_gain3</key> - <value>20</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>ant3</key> - <value></value> + <key>guardinterval</key> + <value>GI_1_32</value> </param> <param> - <key>bw3</key> - <value>0</value> + <key>id</key> + <value>dtv_dvbt2_p1insertion_cc_0</value> </param> <param> - <key>freq4</key> - <value>100e6</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>corr4</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>gain4</key> - <value>10</value> + <key>numdatasyms</key> + <value>100</value> </param> <param> - <key>if_gain4</key> - <value>20</value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>bb_gain4</key> - <value>20</value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>ant4</key> - <value></value> + <key>showlevels</key> + <value>SHOWLEVELS_OFF</value> </param> <param> - <key>bw4</key> - <value>0</value> + <key>version</key> + <value>VERSION_111</value> </param> <param> - <key>freq5</key> - <value>100e6</value> + <key>vclip</key> + <value>3.3</value> </param> + </block> + <block> + <key>dtv_dvbt2_pilotgenerator_cc</key> <param> - <key>corr5</key> - <value>0</value> + <key>bandwidth</key> + <value>BANDWIDTH_8_0_MHZ</value> </param> <param> - <key>gain5</key> - <value>10</value> + <key>alias</key> + <value></value> </param> <param> - <key>if_gain5</key> - <value>20</value> + <key>comment</key> + <value></value> </param> <param> - <key>bb_gain5</key> - <value>20</value> + <key>affinity</key> + <value></value> </param> <param> - <key>ant5</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>bw5</key> - <value>0</value> + <key>carriermode</key> + <value>CARRIERS_NORMAL</value> </param> <param> - <key>freq6</key> - <value>100e6</value> + <key>fftsize</key> + <value>FFTSIZE_4K</value> </param> <param> - <key>corr6</key> - <value>0</value> + <key>_coordinate</key> + <value>(56, 420)</value> </param> <param> - <key>gain6</key> - <value>10</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>if_gain6</key> - <value>20</value> + <key>guardinterval</key> + <value>GI_1_32</value> </param> <param> - <key>bb_gain6</key> - <value>20</value> + <key>id</key> + <value>dtv_dvbt2_pilotgenerator_cc_0</value> </param> <param> - <key>ant6</key> - <value></value> + <key>misogroup</key> + <value>MISO_TX1</value> </param> <param> - <key>bw6</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>freq7</key> - <value>100e6</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>corr7</key> - <value>0</value> + <key>numdatasyms</key> + <value>100</value> </param> <param> - <key>gain7</key> - <value>10</value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>if_gain7</key> - <value>20</value> + <key>paprmode2</key> + <value>PAPR_OFF</value> </param> <param> - <key>bb_gain7</key> - <value>20</value> + <key>pilotpattern</key> + <value>PILOT_PP7</value> </param> <param> - <key>ant7</key> - <value></value> + <key>preamble1</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>bw7</key> - <value>0</value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>freq8</key> - <value>100e6</value> + <key>equalization</key> + <value>EQUALIZATION_ON</value> </param> <param> - <key>corr8</key> - <value>0</value> + <key>version</key> + <value>VERSION_111</value> </param> + </block> + <block> + <key>osmosdr_sink</key> <param> - <key>gain8</key> - <value>10</value> + <key>alias</key> + <value></value> </param> <param> - <key>if_gain8</key> - <value>20</value> + <key>ant0</key> + <value></value> </param> <param> - <key>bb_gain8</key> - <value>20</value> + <key>bb_gain0</key> + <value>-8</value> </param> <param> - <key>ant8</key> - <value></value> + <key>bw0</key> + <value>8750000</value> </param> <param> - <key>bw8</key> + <key>corr0</key> <value>0</value> </param> <param> - <key>freq9</key> - <value>100e6</value> + <key>freq0</key> + <value>center_freq</value> </param> <param> - <key>corr9</key> + <key>if_gain0</key> <value>0</value> </param> <param> - <key>gain9</key> + <key>gain0</key> <value>10</value> </param> <param> - <key>if_gain9</key> - <value>20</value> + <key>ant10</key> + <value></value> </param> <param> - <key>bb_gain9</key> + <key>bb_gain10</key> <value>20</value> </param> <param> - <key>ant9</key> - <value></value> + <key>bw10</key> + <value>0</value> </param> <param> - <key>bw9</key> + <key>corr10</key> <value>0</value> </param> <param> @@ -1046,27 +1247,27 @@ <value>100e6</value> </param> <param> - <key>corr10</key> - <value>0</value> + <key>if_gain10</key> + <value>20</value> </param> <param> <key>gain10</key> <value>10</value> </param> <param> - <key>if_gain10</key> - <value>20</value> + <key>ant11</key> + <value></value> </param> <param> - <key>bb_gain10</key> + <key>bb_gain11</key> <value>20</value> </param> <param> - <key>ant10</key> - <value></value> + <key>bw11</key> + <value>0</value> </param> <param> - <key>bw10</key> + <key>corr11</key> <value>0</value> </param> <param> @@ -1074,27 +1275,27 @@ <value>100e6</value> </param> <param> - <key>corr11</key> - <value>0</value> + <key>if_gain11</key> + <value>20</value> </param> <param> <key>gain11</key> <value>10</value> </param> <param> - <key>if_gain11</key> - <value>20</value> + <key>ant12</key> + <value></value> </param> <param> - <key>bb_gain11</key> + <key>bb_gain12</key> <value>20</value> </param> <param> - <key>ant11</key> - <value></value> + <key>bw12</key> + <value>0</value> </param> <param> - <key>bw11</key> + <key>corr12</key> <value>0</value> </param> <param> @@ -1102,27 +1303,27 @@ <value>100e6</value> </param> <param> - <key>corr12</key> - <value>0</value> + <key>if_gain12</key> + <value>20</value> </param> <param> <key>gain12</key> <value>10</value> </param> <param> - <key>if_gain12</key> - <value>20</value> + <key>ant13</key> + <value></value> </param> <param> - <key>bb_gain12</key> + <key>bb_gain13</key> <value>20</value> </param> <param> - <key>ant12</key> - <value></value> + <key>bw13</key> + <value>0</value> </param> <param> - <key>bw12</key> + <key>corr13</key> <value>0</value> </param> <param> @@ -1130,27 +1331,27 @@ <value>100e6</value> </param> <param> - <key>corr13</key> - <value>0</value> + <key>if_gain13</key> + <value>20</value> </param> <param> <key>gain13</key> <value>10</value> </param> <param> - <key>if_gain13</key> - <value>20</value> + <key>ant14</key> + <value></value> </param> <param> - <key>bb_gain13</key> + <key>bb_gain14</key> <value>20</value> </param> <param> - <key>ant13</key> - <value></value> + <key>bw14</key> + <value>0</value> </param> <param> - <key>bw13</key> + <key>corr14</key> <value>0</value> </param> <param> @@ -1158,27 +1359,27 @@ <value>100e6</value> </param> <param> - <key>corr14</key> - <value>0</value> + <key>if_gain14</key> + <value>20</value> </param> <param> <key>gain14</key> <value>10</value> </param> <param> - <key>if_gain14</key> - <value>20</value> + <key>ant15</key> + <value></value> </param> <param> - <key>bb_gain14</key> + <key>bb_gain15</key> <value>20</value> </param> <param> - <key>ant14</key> - <value></value> + <key>bw15</key> + <value>0</value> </param> <param> - <key>bw14</key> + <key>corr15</key> <value>0</value> </param> <param> @@ -1186,27 +1387,27 @@ <value>100e6</value> </param> <param> - <key>corr15</key> - <value>0</value> + <key>if_gain15</key> + <value>20</value> </param> <param> <key>gain15</key> <value>10</value> </param> <param> - <key>if_gain15</key> - <value>20</value> + <key>ant16</key> + <value></value> </param> <param> - <key>bb_gain15</key> + <key>bb_gain16</key> <value>20</value> </param> <param> - <key>ant15</key> - <value></value> + <key>bw16</key> + <value>0</value> </param> <param> - <key>bw15</key> + <key>corr16</key> <value>0</value> </param> <param> @@ -1214,27 +1415,27 @@ <value>100e6</value> </param> <param> - <key>corr16</key> - <value>0</value> + <key>if_gain16</key> + <value>20</value> </param> <param> <key>gain16</key> <value>10</value> </param> <param> - <key>if_gain16</key> - <value>20</value> + <key>ant17</key> + <value></value> </param> <param> - <key>bb_gain16</key> + <key>bb_gain17</key> <value>20</value> </param> <param> - <key>ant16</key> - <value></value> + <key>bw17</key> + <value>0</value> </param> <param> - <key>bw16</key> + <key>corr17</key> <value>0</value> </param> <param> @@ -1242,27 +1443,27 @@ <value>100e6</value> </param> <param> - <key>corr17</key> - <value>0</value> + <key>if_gain17</key> + <value>20</value> </param> <param> <key>gain17</key> <value>10</value> </param> <param> - <key>if_gain17</key> - <value>20</value> + <key>ant18</key> + <value></value> </param> <param> - <key>bb_gain17</key> + <key>bb_gain18</key> <value>20</value> </param> <param> - <key>ant17</key> - <value></value> + <key>bw18</key> + <value>0</value> </param> <param> - <key>bw17</key> + <key>corr18</key> <value>0</value> </param> <param> @@ -1270,27 +1471,27 @@ <value>100e6</value> </param> <param> - <key>corr18</key> - <value>0</value> + <key>if_gain18</key> + <value>20</value> </param> <param> <key>gain18</key> <value>10</value> </param> <param> - <key>if_gain18</key> - <value>20</value> + <key>ant19</key> + <value></value> </param> <param> - <key>bb_gain18</key> + <key>bb_gain19</key> <value>20</value> </param> <param> - <key>ant18</key> - <value></value> + <key>bw19</key> + <value>0</value> </param> <param> - <key>bw18</key> + <key>corr19</key> <value>0</value> </param> <param> @@ -1298,27 +1499,55 @@ <value>100e6</value> </param> <param> - <key>corr19</key> - <value>0</value> + <key>if_gain19</key> + <value>20</value> </param> <param> <key>gain19</key> <value>10</value> </param> <param> - <key>if_gain19</key> + <key>ant1</key> + <value></value> + </param> + <param> + <key>bb_gain1</key> <value>20</value> </param> <param> - <key>bb_gain19</key> + <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>ant19</key> + <key>gain1</key> + <value>10</value> + </param> + <param> + <key>ant20</key> <value></value> </param> <param> - <key>bw19</key> + <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> @@ -1326,27 +1555,27 @@ <value>100e6</value> </param> <param> - <key>corr20</key> - <value>0</value> + <key>if_gain20</key> + <value>20</value> </param> <param> <key>gain20</key> <value>10</value> </param> <param> - <key>if_gain20</key> - <value>20</value> + <key>ant21</key> + <value></value> </param> <param> - <key>bb_gain20</key> + <key>bb_gain21</key> <value>20</value> </param> <param> - <key>ant20</key> - <value></value> + <key>bw21</key> + <value>0</value> </param> <param> - <key>bw20</key> + <key>corr21</key> <value>0</value> </param> <param> @@ -1354,27 +1583,27 @@ <value>100e6</value> </param> <param> - <key>corr21</key> - <value>0</value> + <key>if_gain21</key> + <value>20</value> </param> <param> <key>gain21</key> <value>10</value> </param> <param> - <key>if_gain21</key> - <value>20</value> + <key>ant22</key> + <value></value> </param> <param> - <key>bb_gain21</key> + <key>bb_gain22</key> <value>20</value> </param> <param> - <key>ant21</key> - <value></value> + <key>bw22</key> + <value>0</value> </param> <param> - <key>bw21</key> + <key>corr22</key> <value>0</value> </param> <param> @@ -1382,27 +1611,27 @@ <value>100e6</value> </param> <param> - <key>corr22</key> - <value>0</value> + <key>if_gain22</key> + <value>20</value> </param> <param> <key>gain22</key> <value>10</value> </param> <param> - <key>if_gain22</key> - <value>20</value> + <key>ant23</key> + <value></value> </param> <param> - <key>bb_gain22</key> + <key>bb_gain23</key> <value>20</value> </param> <param> - <key>ant22</key> - <value></value> + <key>bw23</key> + <value>0</value> </param> <param> - <key>bw22</key> + <key>corr23</key> <value>0</value> </param> <param> @@ -1410,27 +1639,27 @@ <value>100e6</value> </param> <param> - <key>corr23</key> - <value>0</value> + <key>if_gain23</key> + <value>20</value> </param> <param> <key>gain23</key> <value>10</value> </param> <param> - <key>if_gain23</key> - <value>20</value> + <key>ant24</key> + <value></value> </param> <param> - <key>bb_gain23</key> + <key>bb_gain24</key> <value>20</value> </param> <param> - <key>ant23</key> - <value></value> + <key>bw24</key> + <value>0</value> </param> <param> - <key>bw23</key> + <key>corr24</key> <value>0</value> </param> <param> @@ -1438,27 +1667,27 @@ <value>100e6</value> </param> <param> - <key>corr24</key> - <value>0</value> + <key>if_gain24</key> + <value>20</value> </param> <param> <key>gain24</key> <value>10</value> </param> <param> - <key>if_gain24</key> - <value>20</value> + <key>ant25</key> + <value></value> </param> <param> - <key>bb_gain24</key> + <key>bb_gain25</key> <value>20</value> </param> <param> - <key>ant24</key> - <value></value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>bw24</key> + <key>corr25</key> <value>0</value> </param> <param> @@ -1466,27 +1695,27 @@ <value>100e6</value> </param> <param> - <key>corr25</key> - <value>0</value> + <key>if_gain25</key> + <value>20</value> </param> <param> <key>gain25</key> <value>10</value> </param> <param> - <key>if_gain25</key> - <value>20</value> + <key>ant26</key> + <value></value> </param> <param> - <key>bb_gain25</key> + <key>bb_gain26</key> <value>20</value> </param> <param> - <key>ant25</key> - <value></value> + <key>bw26</key> + <value>0</value> </param> <param> - <key>bw25</key> + <key>corr26</key> <value>0</value> </param> <param> @@ -1494,27 +1723,27 @@ <value>100e6</value> </param> <param> - <key>corr26</key> - <value>0</value> + <key>if_gain26</key> + <value>20</value> </param> <param> <key>gain26</key> <value>10</value> </param> <param> - <key>if_gain26</key> - <value>20</value> + <key>ant27</key> + <value></value> </param> <param> - <key>bb_gain26</key> + <key>bb_gain27</key> <value>20</value> </param> <param> - <key>ant26</key> - <value></value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>bw26</key> + <key>corr27</key> <value>0</value> </param> <param> @@ -1522,27 +1751,27 @@ <value>100e6</value> </param> <param> - <key>corr27</key> - <value>0</value> + <key>if_gain27</key> + <value>20</value> </param> <param> <key>gain27</key> <value>10</value> </param> <param> - <key>if_gain27</key> - <value>20</value> + <key>ant28</key> + <value></value> </param> <param> - <key>bb_gain27</key> + <key>bb_gain28</key> <value>20</value> </param> <param> - <key>ant27</key> - <value></value> + <key>bw28</key> + <value>0</value> </param> <param> - <key>bw27</key> + <key>corr28</key> <value>0</value> </param> <param> @@ -1550,27 +1779,27 @@ <value>100e6</value> </param> <param> - <key>corr28</key> - <value>0</value> + <key>if_gain28</key> + <value>20</value> </param> <param> <key>gain28</key> <value>10</value> </param> <param> - <key>if_gain28</key> - <value>20</value> + <key>ant29</key> + <value></value> </param> <param> - <key>bb_gain28</key> + <key>bb_gain29</key> <value>20</value> </param> <param> - <key>ant28</key> - <value></value> + <key>bw29</key> + <value>0</value> </param> <param> - <key>bw28</key> + <key>corr29</key> <value>0</value> </param> <param> @@ -1578,375 +1807,295 @@ <value>100e6</value> </param> <param> - <key>corr29</key> - <value>0</value> + <key>if_gain29</key> + <value>20</value> </param> <param> <key>gain29</key> <value>10</value> </param> <param> - <key>if_gain29</key> - <value>20</value> + <key>ant2</key> + <value></value> </param> <param> - <key>bb_gain29</key> + <key>bb_gain2</key> <value>20</value> </param> <param> - <key>ant29</key> - <value></value> + <key>bw2</key> + <value>0</value> </param> <param> - <key>bw29</key> + <key>corr2</key> <value>0</value> </param> <param> - <key>freq30</key> + <key>freq2</key> <value>100e6</value> </param> <param> - <key>corr30</key> - <value>0</value> + <key>if_gain2</key> + <value>20</value> </param> <param> - <key>gain30</key> + <key>gain2</key> <value>10</value> </param> <param> - <key>if_gain30</key> - <value>20</value> + <key>ant30</key> + <value></value> </param> <param> <key>bb_gain30</key> <value>20</value> </param> <param> - <key>ant30</key> - <value></value> + <key>bw30</key> + <value>0</value> </param> <param> - <key>bw30</key> + <key>corr30</key> <value>0</value> </param> <param> - <key>freq31</key> + <key>freq30</key> <value>100e6</value> </param> <param> - <key>corr31</key> - <value>0</value> + <key>if_gain30</key> + <value>20</value> </param> <param> - <key>gain31</key> + <key>gain30</key> <value>10</value> </param> <param> - <key>if_gain31</key> - <value>20</value> + <key>ant31</key> + <value></value> </param> <param> <key>bb_gain31</key> <value>20</value> </param> <param> - <key>ant31</key> - <value></value> - </param> - <param> <key>bw31</key> <value>0</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(1024, 467)</value> - </param> - <param> - <key>_rotation</key> + <key>corr31</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_framemapper_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_framemapper_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>freq31</key> + <value>100e6</value> </param> <param> - <key>rate</key> - <value>C2_3</value> + <key>if_gain31</key> + <value>20</value> </param> <param> - <key>constellation</key> - <value>MOD_64QAM</value> + <key>gain31</key> + <value>10</value> </param> <param> - <key>rotation</key> - <value>ROTATION_ON</value> + <key>ant3</key> + <value></value> </param> <param> - <key>fecblocks</key> - <value>31</value> + <key>bb_gain3</key> + <value>20</value> </param> <param> - <key>tiblocks</key> - <value>3</value> + <key>bw3</key> + <value>0</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_NORMAL</value> + <key>corr3</key> + <value>0</value> </param> <param> - <key>fftsize1</key> - <value>FFTSIZE_4K</value> + <key>freq3</key> + <value>100e6</value> </param> <param> - <key>fftsize2</key> - <value>FFTSIZE_2K</value> + <key>if_gain3</key> + <value>20</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_32</value> + <key>gain3</key> + <value>10</value> </param> <param> - <key>l1constellation</key> - <value>L1_MOD_16QAM</value> + <key>ant4</key> + <value></value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP7</value> + <key>bb_gain4</key> + <value>20</value> </param> <param> - <key>t2frames</key> - <value>2</value> + <key>bw4</key> + <value>0</value> </param> <param> - <key>numdatasyms</key> - <value>100</value> + <key>corr4</key> + <value>0</value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>freq4</key> + <value>100e6</value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>if_gain4</key> + <value>20</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>gain4</key> + <value>10</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>ant5</key> + <value></value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>bb_gain5</key> + <value>20</value> </param> <param> - <key>inputmode</key> - <value>FECFRAME_NORMAL</value> + <key>bw5</key> + <value>0</value> </param> <param> - <key>reservedbiasbits</key> - <value>RESERVED_OFF</value> + <key>corr5</key> + <value>0</value> </param> <param> - <key>l1scrambled</key> - <value>L1_SCRAMBLED_OFF</value> + <key>freq5</key> + <value>100e6</value> </param> <param> - <key>inband</key> - <value>INBAND_OFF</value> + <key>if_gain5</key> + <value>20</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain5</key> + <value>10</value> </param> <param> - <key>affinity</key> + <key>ant6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>bb_gain6</key> + <value>20</value> </param> <param> - <key>maxoutbuf</key> + <key>bw6</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(712, 147)</value> - </param> - <param> - <key>_rotation</key> + <key>corr6</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_freqinterleaver_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_freqinterleaver_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>carriermode</key> - <value>CARRIERS_NORMAL</value> - </param> - <param> - <key>fftsize</key> - <value>FFTSIZE_4K</value> + <key>freq6</key> + <value>100e6</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP7</value> + <key>if_gain6</key> + <value>20</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_32</value> + <key>gain6</key> + <value>10</value> </param> <param> - <key>numdatasyms</key> - <value>100</value> + <key>ant7</key> + <value></value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>bb_gain7</key> + <value>20</value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>bw7</key> + <value>0</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>corr7</key> + <value>0</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_SISO</value> + <key>freq7</key> + <value>100e6</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>if_gain7</key> + <value>20</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain7</key> + <value>10</value> </param> <param> - <key>affinity</key> + <key>ant8</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>bb_gain8</key> + <value>20</value> </param> <param> - <key>maxoutbuf</key> + <key>bw8</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(992, 211)</value> - </param> - <param> - <key>_rotation</key> + <key>corr8</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_interleaver_bb</key> - <param> - <key>id</key> - <value>dtv_dvbt2_interleaver_bb_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> - </param> <param> - <key>rate</key> - <value>C2_3</value> + <key>freq8</key> + <value>100e6</value> </param> <param> - <key>constellation</key> - <value>MOD_64QAM</value> + <key>if_gain8</key> + <value>20</value> </param> <param> - <key>alias</key> - <value></value> + <key>gain8</key> + <value>10</value> </param> <param> - <key>affinity</key> + <key>ant9</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>bb_gain9</key> + <value>20</value> </param> <param> - <key>maxoutbuf</key> + <key>bw9</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(48, 203)</value> - </param> - <param> - <key>_rotation</key> + <key>corr9</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_modulator_bc</key> <param> - <key>id</key> - <value>dtv_dvbt2_modulator_bc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>freq9</key> + <value>100e6</value> </param> <param> - <key>constellation</key> - <value>MOD_64QAM</value> + <key>if_gain9</key> + <value>20</value> </param> <param> - <key>rotation</key> - <value>ROTATION_ON</value> + <key>gain9</key> + <value>10</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -1954,165 +2103,155 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>args</key> + <value>bladerf=0,buffers=128,buflen=32768</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(264, 203)</value> + <value>(1048, 428)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_cellinterleaver_cc</key> <param> <key>id</key> - <value>dtv_dvbt2_cellinterleaver_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>osmosdr_sink_0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>constellation</key> - <value>MOD_64QAM</value> + <key>clock_source0</key> + <value></value> </param> <param> - <key>fecblocks</key> - <value>31</value> + <key>time_source0</key> + <value></value> </param> <param> - <key>tiblocks</key> - <value>3</value> + <key>clock_source1</key> + <value></value> </param> <param> - <key>alias</key> + <key>time_source1</key> <value></value> </param> <param> - <key>affinity</key> + <key>clock_source2</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>time_source2</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>clock_source3</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(488, 195)</value> + <key>time_source3</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>clock_source4</key> + <value></value> </param> - </block> - <block> - <key>blocks_file_sink</key> <param> - <key>id</key> - <value>blocks_file_sink_0</value> + <key>time_source4</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>False</value> + <key>clock_source5</key> + <value></value> </param> <param> - <key>file</key> - <value>vv.cfile</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>clock_source6</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>unbuffered</key> - <value>False</value> + <key>clock_source7</key> + <value></value> </param> <param> - <key>append</key> - <value>False</value> + <key>time_source7</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>nchan</key> + <value>1</value> </param> <param> - <key>affinity</key> - <value></value> + <key>num_mboards</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(832, 459)</value> + <key>sample_rate</key> + <value>samp_rate</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>sync</key> + <value></value> </param> </block> <connection> - <source_block_id>dtv_dvb_bch_bb_0</source_block_id> - <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id> + <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> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id> - <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id> + <source_block_id>blocks_multiply_const_xx_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>dtv_dvb_ldpc_bb_0</source_block_id> - <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id> + <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> + <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id> - <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id> + <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id> + <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id> - <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id> + <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id> + <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id> - <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id> + <source_block_id>dtv_dvb_bch_bb_0</source_block_id> + <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvb_bbheader_bb_0</source_block_id> - <sink_block_id>dtv_dvb_bbscrambler_bb_0</sink_block_id> + <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id> + <sink_block_id>dtv_dvbt2_interleaver_bb_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_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id> + <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2129,32 +2268,32 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> - <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id> + <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id> + <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id> - <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> + <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id> + <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_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_multiply_const_vxx_0</source_block_id> - <sink_block_id>osmosdr_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> + <sink_block_id>blocks_multiply_const_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> - <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_pilotgenerator_cc_0</source_block_id> + <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-dtv/examples/vv018-miso.grc b/gr-dtv/examples/vv018-miso.grc index 2eb011bf3f..b8d296b505 100644 --- a/gr-dtv/examples/vv018-miso.grc +++ b/gr-dtv/examples/vv018-miso.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.11'?> <flow_graph> <timestamp>Mon Dec 29 01:02:46 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>vv018_miso</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,188 +25,179 @@ <value></value> </param> <param> - <key>window_size</key> - <value>1280, 1024</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(8, 11)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>vv018_miso</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>alias</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(8, 11)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>samp_rate</value> + <key>run_options</key> + <value>prompt</value> </param> <param> - <key>_enabled</key> + <key>run</key> <value>True</value> </param> <param> - <key>value</key> - <value>(8000000.0) * 8 / 7</value> - </param> - <param> - <key>alias</key> + <key>thread_safe_setters</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(8, 75)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> + <key>title</key> + <value></value> </param> </block> <block> - <key>dtv_dvb_bbheader_bb</key> + <key>variable</key> <param> - <key>id</key> - <value>dtv_dvb_bbheader_bb_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> + <key>_coordinate</key> + <value>(176, 12)</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>rate1</key> - <value>C5_6</value> + <key>id</key> + <value>center_freq</value> </param> <param> - <key>rate2</key> - <value>C1_3</value> + <key>value</key> + <value>429e6</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>rate3</key> - <value>C1_4</value> + <key>comment</key> + <value></value> </param> <param> - <key>rate4</key> - <value>C1_4</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>rolloff</key> - <value>RO_0_35</value> + <key>_coordinate</key> + <value>(8, 75)</value> </param> <param> - <key>mode</key> - <value>FECFRAME_SHORT</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>inband</key> - <value>INBAND_OFF</value> + <key>id</key> + <value>samp_rate</value> </param> <param> - <key>fecblocks</key> - <value>168</value> + <key>value</key> + <value>(8000000.0) * 8 / 7</value> </param> + </block> + <block> + <key>blocks_file_sink</key> <param> - <key>tsrate</key> - <value>4000000</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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>file</key> + <value>vvtx1.cfile</value> </param> <param> <key>_coordinate</key> - <value>(336, 11)</value> + <value>(616, 348)</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> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> + <value>blocks_file_sink_0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>rate1</key> - <value>C5_6</value> + <key>unbuffered</key> + <value>False</value> </param> <param> - <key>rate2</key> - <value>C1_3</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_file_sink</key> <param> - <key>rate3</key> - <value>C1_4</value> + <key>append</key> + <value>False</value> </param> <param> - <key>rate4</key> - <value>C1_4</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -214,58 +205,46 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>file</key> + <value>vvtx2.cfile</value> </param> <param> <key>_coordinate</key> - <value>(632, 27)</value> + <value>(616, 548)</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> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> - </param> - <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <value>blocks_file_sink_0_0</value> </param> <param> - <key>rate1</key> - <value>C5_6</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>rate2</key> - <value>C1_3</value> + <key>unbuffered</key> + <value>False</value> </param> <param> - <key>rate3</key> - <value>C1_4</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_file_source</key> <param> - <key>rate4</key> - <value>C1_4</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -273,156 +252,156 @@ <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>file</key> + <value>/run/shm/adv32kmiso.ts</value> </param> <param> <key>_coordinate</key> - <value>(848, 27)</value> + <value>(112, 75)</value> </param> <param> <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> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blocks_file_source_0</value> </param> <param> - <key>standard</key> - <value>STANDARD_DVBT2</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>rate1</key> - <value>C5_6</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>rate2</key> - <value>C1_3</value> + <key>repeat</key> + <value>True</value> </param> <param> - <key>rate3</key> - <value>C1_4</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_multiply_const_xx</key> <param> - <key>rate4</key> - <value>C1_4</value> + <key>alias</key> + <value></value> </param> <param> - <key>constellation</key> - <value>MOD_OTHER</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>const</key> + <value>0.2</value> </param> <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(1056, 27)</value> + <value>(616, 452)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_interleaver_bb</key> <param> <key>id</key> - <value>dtv_dvbt2_interleaver_bb_0</value> + <value>blocks_multiply_const_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>rate</key> - <value>C5_6</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_null_sink</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>bus_conns</key> + <value>[[0,],]</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(1056, 115)</value> + <value>(816, 416)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_modulator_bc</key> <param> <key>id</key> - <value>dtv_dvbt2_modulator_bc_0</value> + <value>blocks_null_sink_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>num_inputs</key> + <value>1</value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>digital_ofdm_cyclic_prefixer</key> <param> - <key>rotation</key> - <value>ROTATION_ON</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>cp_len</key> + <value>32768/16</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> @@ -430,50 +409,54 @@ <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>input_size</key> + <value>32768</value> </param> <param> <key>_coordinate</key> - <value>(808, 115)</value> + <value>(56, 528)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_cellinterleaver_cc</key> <param> <key>id</key> - <value>dtv_dvbt2_cellinterleaver_cc_0</value> + <value>digital_ofdm_cyclic_prefixer_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>tagname</key> + <value></value> </param> <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>fecblocks</key> - <value>61</value> + <key>rolloff</key> + <value>0</value> </param> + </block> + <block> + <key>digital_ofdm_cyclic_prefixer</key> <param> - <key>tiblocks</key> - <value>1</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>cp_len</key> + <value>32768/16</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> @@ -481,177 +464,161 @@ <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>input_size</key> + <value>32768</value> </param> <param> <key>_coordinate</key> - <value>(576, 107)</value> + <value>(56, 408)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_framemapper_cc</key> <param> <key>id</key> - <value>dtv_dvbt2_framemapper_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>framesize</key> - <value>FECFRAME_NORMAL</value> - </param> - <param> - <key>rate</key> - <value>C5_6</value> + <value>digital_ofdm_cyclic_prefixer_0_0</value> </param> <param> - <key>constellation</key> - <value>MOD_256QAM</value> + <key>tagname</key> + <value></value> </param> <param> - <key>rotation</key> - <value>ROTATION_ON</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>fecblocks</key> - <value>61</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>tiblocks</key> - <value>1</value> + <key>rolloff</key> + <value>0</value> </param> + </block> + <block> + <key>dtv_dvb_bbheader_bb</key> <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <key>mode</key> + <value>INPUTMODE_HIEFF</value> </param> <param> - <key>fftsize1</key> - <value>FFTSIZE_32K</value> + <key>alias</key> + <value></value> </param> <param> - <key>fftsize2</key> - <value>FFTSIZE_2K</value> + <key>rate1</key> + <value>C5_6</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_16</value> + <key>rate2</key> + <value>C1_3</value> </param> <param> - <key>l1constellation</key> - <value>L1_MOD_64QAM</value> + <key>rate3</key> + <value>C1_4</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP2</value> + <key>rate4</key> + <value>C1_5_MEDIUM</value> </param> <param> - <key>t2frames</key> - <value>2</value> + <key>rate5</key> + <value>C1_4</value> </param> <param> - <key>numdatasyms</key> - <value>19</value> + <key>comment</key> + <value></value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>affinity</key> + <value></value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>fecblocks</key> + <value>168</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_MISO</value> + <key>framesize1</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>inputmode</key> - <value>FECFRAME_NORMAL</value> + <key>_coordinate</key> + <value>(336, 8)</value> </param> <param> - <key>reservedbiasbits</key> - <value>RESERVED_OFF</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>l1scrambled</key> - <value>L1_SCRAMBLED_OFF</value> + <key>id</key> + <value>dtv_dvb_bbheader_bb_0</value> </param> <param> <key>inband</key> <value>INBAND_OFF</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>rolloff</key> + <value>RO_0_35</value> </param> <param> - <key>_coordinate</key> - <value>(48, 155)</value> + <key>standard</key> + <value>STANDARD_DVBT2</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>tsrate</key> + <value>4000000</value> </param> </block> <block> - <key>digital_ofdm_cyclic_prefixer</key> + <key>dtv_dvb_bbscrambler_bb</key> <param> - <key>id</key> - <value>digital_ofdm_cyclic_prefixer_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>rate1</key> + <value>C5_6</value> </param> <param> - <key>input_size</key> - <value>32768</value> + <key>rate2</key> + <value>C1_3</value> </param> <param> - <key>cp_len</key> - <value>32768/16</value> + <key>rate3</key> + <value>C1_4</value> </param> <param> - <key>rolloff</key> - <value>0</value> + <key>rate4</key> + <value>C1_5_MEDIUM</value> </param> <param> - <key>tagname</key> - <value></value> + <key>rate5</key> + <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -659,74 +626,70 @@ <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>framesize1</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(56, 451)</value> + <value>(640, 20)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_freqinterleaver_cc</key> <param> <key>id</key> - <value>dtv_dvbt2_freqinterleaver_cc_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <value>dtv_dvb_bbscrambler_bb_0</value> </param> <param> - <key>fftsize</key> - <value>FFTSIZE_32K</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP2</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_16</value> + <key>standard</key> + <value>STANDARD_DVBT2</value> </param> + </block> + <block> + <key>dtv_dvb_bch_bb</key> <param> - <key>numdatasyms</key> - <value>19</value> + <key>alias</key> + <value></value> </param> <param> - <key>paprmode1</key> - <value>PAPR_OFF</value> + <key>rate1</key> + <value>C5_6</value> </param> <param> - <key>paprmode2</key> - <value>PAPR_OFF</value> + <key>rate2</key> + <value>C1_3</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>rate3</key> + <value>C1_4</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_MISO</value> + <key>rate4</key> + <value>C1_5_MEDIUM</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>rate5</key> + <value>C1_4</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -734,267 +697,261 @@ <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>framesize1</key> + <value>FECFRAME_NORMAL</value> + </param> + <param> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(328, 195)</value> + <value>(848, 20)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_p1insertion_cc</key> <param> <key>id</key> - <value>dtv_dvbt2_p1insertion_cc_0</value> + <value>dtv_dvb_bch_bb_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>fftsize1</key> - <value>FFTSIZE_32K</value> + <key>standard</key> + <value>STANDARD_DVBT2</value> </param> + </block> + <block> + <key>dtv_dvb_ldpc_bb</key> <param> - <key>fftsize2</key> - <value>FFTSIZE_2K</value> + <key>alias</key> + <value></value> </param> <param> - <key>guardinterval</key> - <value>GI_1_16</value> + <key>rate1</key> + <value>C5_6</value> </param> <param> - <key>numdatasyms</key> - <value>19</value> + <key>rate2</key> + <value>C1_3</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>rate3</key> + <value>C1_4</value> </param> <param> - <key>preamble1</key> - <value>PREAMBLE_T2_MISO</value> + <key>rate4</key> + <value>C1_5_MEDIUM</value> </param> <param> - <key>preamble2</key> - <value>PREAMBLE_T2_SISO</value> + <key>rate5</key> + <value>C1_4</value> </param> <param> - <key>showlevels</key> - <value>SHOWLEVELS_OFF</value> + <key>comment</key> + <value></value> </param> <param> - <key>vclip</key> - <value>3.3</value> + <key>constellation</key> + <value>MOD_OTHER</value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>framesize1</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>framesize2</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(312, 523)</value> + <value>(1056, 20)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_ofdm_cyclic_prefixer</key> <param> <key>id</key> - <value>digital_ofdm_cyclic_prefixer_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>input_size</key> - <value>32768</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>cp_len</key> - <value>32768/16</value> + <key>standard</key> + <value>STANDARD_DVBT2</value> </param> + </block> + <block> + <key>dtv_dvbt2_cellinterleaver_cc</key> <param> - <key>rolloff</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> - <key>tagname</key> + <key>comment</key> <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>constellation</key> + <value>MOD_256QAM</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>fecblocks</key> + <value>61</value> + </param> + <param> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>_coordinate</key> - <value>(56, 579)</value> + <value>(576, 104)</value> </param> <param> <key>_rotation</key> - <value>0</value> + <value>180</value> </param> - </block> - <block> - <key>blocks_file_sink</key> <param> <key>id</key> - <value>blocks_file_sink_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>False</value> + <value>dtv_dvbt2_cellinterleaver_cc_0</value> </param> <param> - <key>file</key> - <value>vvtx2.cfile</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>vlen</key> + <key>tiblocks</key> <value>1</value> </param> + </block> + <block> + <key>dtv_dvbt2_framemapper_cc</key> <param> - <key>unbuffered</key> - <value>False</value> - </param> - <param> - <key>append</key> - <value>False</value> + <key>inputmode</key> + <value>FECFRAME_NORMAL</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>rate</key> + <value>C5_6</value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(616, 579)</value> + <key>rotation</key> + <value>ROTATION_ON</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>constellation</key> + <value>MOD_256QAM</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>const</key> - <value>0.2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> + <key>carriermode</key> + <value>CARRIERS_EXTENDED</value> </param> <param> - <key>alias</key> - <value></value> + <key>fecblocks</key> + <value>61</value> </param> <param> - <key>affinity</key> - <value></value> + <key>framesize</key> + <value>FECFRAME_NORMAL</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>fftsize1</key> + <value>FFTSIZE_32K</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fftsize2</key> + <value>FFTSIZE_2K</value> </param> <param> <key>_coordinate</key> - <value>(616, 499)</value> + <value>(48, 148)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>dtv_dvbt2_pilotgenerator_cc</key> + <param> + <key>guardinterval</key> + <value>GI_1_16</value> + </param> <param> <key>id</key> - <value>dtv_dvbt2_pilotgenerator_cc_0</value> + <value>dtv_dvbt2_framemapper_cc_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>inband</key> + <value>INBAND_OFF</value> </param> <param> - <key>carriermode</key> - <value>CARRIERS_EXTENDED</value> + <key>l1constellation</key> + <value>L1_MOD_64QAM</value> </param> <param> - <key>fftsize</key> - <value>FFTSIZE_32K</value> + <key>l1scrambled</key> + <value>L1_SCRAMBLED_OFF</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP2</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>guardinterval</key> - <value>GI_1_16</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>numdatasyms</key> @@ -1009,8 +966,8 @@ <value>PAPR_OFF</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>pilotpattern</key> + <value>PILOT_PP2</value> </param> <param> <key>preamble1</key> @@ -1021,47 +978,35 @@ <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>misogroup</key> - <value>MISO_TX2</value> + <key>reservedbiasbits</key> + <value>RESERVED_OFF</value> </param> <param> - <key>equalization</key> - <value>EQUALIZATION_ON</value> + <key>version</key> + <value>VERSION_111</value> </param> <param> - <key>bandwidth</key> - <value>BANDWIDTH_8_0_MHZ</value> + <key>t2frames</key> + <value>2</value> </param> <param> - <key>alias</key> - <value></value> + <key>tiblocks</key> + <value>1</value> </param> + </block> + <block> + <key>dtv_dvbt2_freqinterleaver_cc</key> <param> - <key>affinity</key> + <key>alias</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(1016, 411)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> + <key>comment</key> + <value></value> </param> - </block> - <block> - <key>dtv_dvbt2_pilotgenerator_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_pilotgenerator_cc_1</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> @@ -1076,14 +1021,30 @@ <value>FFTSIZE_32K</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP2</value> + <key>_coordinate</key> + <value>(344, 204)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> <key>guardinterval</key> <value>GI_1_16</value> </param> <param> + <key>id</key> + <value>dtv_dvbt2_freqinterleaver_cc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> <key>numdatasyms</key> <value>19</value> </param> @@ -1096,8 +1057,8 @@ <value>PAPR_OFF</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>pilotpattern</key> + <value>PILOT_PP2</value> </param> <param> <key>preamble1</key> @@ -1108,47 +1069,74 @@ <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>misogroup</key> - <value>MISO_TX1</value> + <key>version</key> + <value>VERSION_111</value> </param> + </block> + <block> + <key>dtv_dvbt2_interleaver_bb</key> <param> - <key>equalization</key> - <value>EQUALIZATION_ON</value> + <key>alias</key> + <value></value> </param> <param> - <key>bandwidth</key> - <value>BANDWIDTH_8_0_MHZ</value> + <key>rate</key> + <value>C5_6</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>constellation</key> + <value>MOD_256QAM</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>(1016, 203)</value> + <value>(1056, 108)</value> </param> <param> <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt2_interleaver_bb_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> <value>0</value> </param> </block> <block> <key>dtv_dvbt2_miso_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_miso_cc_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> @@ -1163,14 +1151,30 @@ <value>FFTSIZE_32K</value> </param> <param> - <key>pilotpattern</key> - <value>PILOT_PP2</value> + <key>_coordinate</key> + <value>(640, 208)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> <key>guardinterval</key> <value>GI_1_16</value> </param> <param> + <key>id</key> + <value>dtv_dvbt2_miso_cc_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> <key>numdatasyms</key> <value>19</value> </param> @@ -1183,39 +1187,78 @@ <value>PAPR_OFF</value> </param> <param> + <key>pilotpattern</key> + <value>PILOT_PP2</value> + </param> + <param> <key>version</key> <value>VERSION_111</value> </param> + </block> + <block> + <key>dtv_dvbt2_modulator_bc</key> <param> <key>alias</key> <value></value> </param> <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>rotation</key> + <value>ROTATION_ON</value> + </param> + <param> + <key>constellation</key> + <value>MOD_256QAM</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>(640, 203)</value> + <value>(808, 108)</value> </param> <param> <key>_rotation</key> + <value>180</value> + </param> + <param> + <key>id</key> + <value>dtv_dvbt2_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_dvbt2_p1insertion_cc</key> <param> - <key>id</key> - <value>dtv_dvbt2_p1insertion_cc_0_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> @@ -1234,16 +1277,32 @@ <value>FFTSIZE_2K</value> </param> <param> + <key>_coordinate</key> + <value>(312, 504)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> <key>guardinterval</key> <value>GI_1_16</value> </param> <param> - <key>numdatasyms</key> - <value>19</value> + <key>id</key> + <value>dtv_dvbt2_p1insertion_cc_0</value> </param> <param> - <key>version</key> - <value>VERSION_111</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>numdatasyms</key> + <value>19</value> </param> <param> <key>preamble1</key> @@ -1258,1077 +1317,1179 @@ <value>SHOWLEVELS_OFF</value> </param> <param> + <key>version</key> + <value>VERSION_111</value> + </param> + <param> <key>vclip</key> <value>3.3</value> </param> + </block> + <block> + <key>dtv_dvbt2_p1insertion_cc</key> <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>carriermode</key> + <value>CARRIERS_EXTENDED</value> + </param> + <param> + <key>fftsize1</key> + <value>FFTSIZE_32K</value> + </param> + <param> + <key>fftsize2</key> + <value>FFTSIZE_2K</value> </param> <param> <key>_coordinate</key> - <value>(312, 379)</value> + <value>(312, 368)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_file_sink</key> + <param> + <key>guardinterval</key> + <value>GI_1_16</value> + </param> <param> <key>id</key> - <value>blocks_file_sink_0</value> + <value>dtv_dvbt2_p1insertion_cc_0_0</value> </param> <param> - <key>_enabled</key> - <value>False</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>file</key> - <value>vvtx1.cfile</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>numdatasyms</key> + <value>19</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>preamble1</key> + <value>PREAMBLE_T2_MISO</value> </param> <param> - <key>unbuffered</key> - <value>False</value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>append</key> - <value>False</value> + <key>showlevels</key> + <value>SHOWLEVELS_OFF</value> + </param> + <param> + <key>version</key> + <value>VERSION_111</value> + </param> + <param> + <key>vclip</key> + <value>3.3</value> + </param> + </block> + <block> + <key>dtv_dvbt2_pilotgenerator_cc</key> + <param> + <key>bandwidth</key> + <value>BANDWIDTH_8_0_MHZ</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>carriermode</key> + <value>CARRIERS_EXTENDED</value> + </param> + <param> + <key>fftsize</key> + <value>FFTSIZE_32K</value> + </param> + <param> <key>_coordinate</key> - <value>(616, 411)</value> + <value>(1016, 380)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>osmosdr_sink</key> + <param> + <key>guardinterval</key> + <value>GI_1_16</value> + </param> <param> <key>id</key> - <value>osmosdr_sink_0</value> + <value>dtv_dvbt2_pilotgenerator_cc_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>misogroup</key> + <value>MISO_TX2</value> </param> <param> - <key>type</key> - <value>fc32</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>args</key> - <value>bladerf=0,buffers=128,buflen=32768</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>sync</key> - <value></value> + <key>numdatasyms</key> + <value>19</value> </param> <param> - <key>num_mboards</key> - <value>1</value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>clock_source0</key> - <value></value> + <key>paprmode2</key> + <value>PAPR_OFF</value> </param> <param> - <key>time_source0</key> - <value></value> + <key>pilotpattern</key> + <value>PILOT_PP2</value> </param> <param> - <key>clock_source1</key> - <value></value> + <key>preamble1</key> + <value>PREAMBLE_T2_MISO</value> </param> <param> - <key>time_source1</key> - <value></value> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> </param> <param> - <key>clock_source2</key> - <value></value> + <key>equalization</key> + <value>EQUALIZATION_ON</value> </param> <param> - <key>time_source2</key> - <value></value> + <key>version</key> + <value>VERSION_111</value> </param> + </block> + <block> + <key>dtv_dvbt2_pilotgenerator_cc</key> <param> - <key>clock_source3</key> - <value></value> + <key>bandwidth</key> + <value>BANDWIDTH_8_0_MHZ</value> </param> <param> - <key>time_source3</key> + <key>alias</key> <value></value> </param> <param> - <key>clock_source4</key> + <key>comment</key> <value></value> </param> <param> - <key>time_source4</key> + <key>affinity</key> <value></value> </param> <param> - <key>clock_source5</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>time_source5</key> - <value></value> + <key>carriermode</key> + <value>CARRIERS_EXTENDED</value> </param> <param> - <key>clock_source6</key> - <value></value> + <key>fftsize</key> + <value>FFTSIZE_32K</value> </param> <param> - <key>time_source6</key> - <value></value> + <key>_coordinate</key> + <value>(1016, 188)</value> </param> <param> - <key>clock_source7</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>time_source7</key> - <value></value> + <key>guardinterval</key> + <value>GI_1_16</value> </param> <param> - <key>nchan</key> - <value>1</value> + <key>id</key> + <value>dtv_dvbt2_pilotgenerator_cc_1</value> </param> <param> - <key>sample_rate</key> - <value>samp_rate</value> + <key>misogroup</key> + <value>MISO_TX1</value> </param> <param> - <key>freq0</key> - <value>429e6</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>corr0</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>gain0</key> - <value>18</value> + <key>numdatasyms</key> + <value>19</value> </param> <param> - <key>if_gain0</key> - <value>0</value> + <key>paprmode1</key> + <value>PAPR_OFF</value> </param> <param> - <key>bb_gain0</key> - <value>-8</value> + <key>paprmode2</key> + <value>PAPR_OFF</value> + </param> + <param> + <key>pilotpattern</key> + <value>PILOT_PP2</value> + </param> + <param> + <key>preamble1</key> + <value>PREAMBLE_T2_MISO</value> + </param> + <param> + <key>preamble2</key> + <value>PREAMBLE_T2_SISO</value> + </param> + <param> + <key>equalization</key> + <value>EQUALIZATION_ON</value> + </param> + <param> + <key>version</key> + <value>VERSION_111</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>-8</value> + </param> + <param> <key>bw0</key> <value>8750000</value> </param> <param> - <key>freq1</key> - <value>100e6</value> + <key>corr0</key> + <value>0</value> </param> <param> - <key>corr1</key> + <key>freq0</key> + <value>center_freq</value> + </param> + <param> + <key>if_gain0</key> <value>0</value> </param> <param> - <key>gain1</key> + <key>gain0</key> <value>10</value> </param> <param> - <key>if_gain1</key> - <value>20</value> + <key>ant10</key> + <value></value> </param> <param> - <key>bb_gain1</key> + <key>bb_gain10</key> <value>20</value> </param> <param> - <key>ant1</key> - <value></value> + <key>bw10</key> + <value>0</value> </param> <param> - <key>bw1</key> + <key>corr10</key> <value>0</value> </param> <param> - <key>freq2</key> + <key>freq10</key> <value>100e6</value> </param> <param> - <key>corr2</key> - <value>0</value> + <key>if_gain10</key> + <value>20</value> </param> <param> - <key>gain2</key> + <key>gain10</key> <value>10</value> </param> <param> - <key>if_gain2</key> - <value>20</value> + <key>ant11</key> + <value></value> </param> <param> - <key>bb_gain2</key> + <key>bb_gain11</key> <value>20</value> </param> <param> - <key>ant2</key> - <value></value> + <key>bw11</key> + <value>0</value> </param> <param> - <key>bw2</key> + <key>corr11</key> <value>0</value> </param> <param> - <key>freq3</key> + <key>freq11</key> <value>100e6</value> </param> <param> - <key>corr3</key> - <value>0</value> + <key>if_gain11</key> + <value>20</value> </param> <param> - <key>gain3</key> + <key>gain11</key> <value>10</value> </param> <param> - <key>if_gain3</key> - <value>20</value> + <key>ant12</key> + <value></value> </param> <param> - <key>bb_gain3</key> + <key>bb_gain12</key> <value>20</value> </param> <param> - <key>ant3</key> - <value></value> + <key>bw12</key> + <value>0</value> </param> <param> - <key>bw3</key> + <key>corr12</key> <value>0</value> </param> <param> - <key>freq4</key> + <key>freq12</key> <value>100e6</value> </param> <param> - <key>corr4</key> - <value>0</value> + <key>if_gain12</key> + <value>20</value> </param> <param> - <key>gain4</key> + <key>gain12</key> <value>10</value> </param> <param> - <key>if_gain4</key> - <value>20</value> + <key>ant13</key> + <value></value> </param> <param> - <key>bb_gain4</key> + <key>bb_gain13</key> <value>20</value> </param> <param> - <key>ant4</key> - <value></value> + <key>bw13</key> + <value>0</value> </param> <param> - <key>bw4</key> + <key>corr13</key> <value>0</value> </param> <param> - <key>freq5</key> + <key>freq13</key> <value>100e6</value> </param> <param> - <key>corr5</key> - <value>0</value> + <key>if_gain13</key> + <value>20</value> </param> <param> - <key>gain5</key> + <key>gain13</key> <value>10</value> </param> <param> - <key>if_gain5</key> - <value>20</value> + <key>ant14</key> + <value></value> </param> <param> - <key>bb_gain5</key> + <key>bb_gain14</key> <value>20</value> </param> <param> - <key>ant5</key> - <value></value> + <key>bw14</key> + <value>0</value> </param> <param> - <key>bw5</key> + <key>corr14</key> <value>0</value> </param> <param> - <key>freq6</key> + <key>freq14</key> <value>100e6</value> </param> <param> - <key>corr6</key> - <value>0</value> + <key>if_gain14</key> + <value>20</value> </param> <param> - <key>gain6</key> + <key>gain14</key> <value>10</value> </param> <param> - <key>if_gain6</key> - <value>20</value> + <key>ant15</key> + <value></value> </param> <param> - <key>bb_gain6</key> + <key>bb_gain15</key> <value>20</value> </param> <param> - <key>ant6</key> - <value></value> + <key>bw15</key> + <value>0</value> </param> <param> - <key>bw6</key> + <key>corr15</key> <value>0</value> </param> <param> - <key>freq7</key> + <key>freq15</key> <value>100e6</value> </param> <param> - <key>corr7</key> - <value>0</value> + <key>if_gain15</key> + <value>20</value> </param> <param> - <key>gain7</key> + <key>gain15</key> <value>10</value> </param> <param> - <key>if_gain7</key> - <value>20</value> + <key>ant16</key> + <value></value> </param> <param> - <key>bb_gain7</key> + <key>bb_gain16</key> <value>20</value> </param> <param> - <key>ant7</key> - <value></value> + <key>bw16</key> + <value>0</value> </param> <param> - <key>bw7</key> + <key>corr16</key> <value>0</value> </param> <param> - <key>freq8</key> + <key>freq16</key> <value>100e6</value> </param> <param> - <key>corr8</key> - <value>0</value> + <key>if_gain16</key> + <value>20</value> </param> <param> - <key>gain8</key> + <key>gain16</key> <value>10</value> </param> <param> - <key>if_gain8</key> - <value>20</value> + <key>ant17</key> + <value></value> </param> <param> - <key>bb_gain8</key> + <key>bb_gain17</key> <value>20</value> </param> <param> - <key>ant8</key> - <value></value> + <key>bw17</key> + <value>0</value> </param> <param> - <key>bw8</key> + <key>corr17</key> <value>0</value> </param> <param> - <key>freq9</key> + <key>freq17</key> <value>100e6</value> </param> <param> - <key>corr9</key> - <value>0</value> + <key>if_gain17</key> + <value>20</value> </param> <param> - <key>gain9</key> + <key>gain17</key> <value>10</value> </param> <param> - <key>if_gain9</key> - <value>20</value> + <key>ant18</key> + <value></value> </param> <param> - <key>bb_gain9</key> + <key>bb_gain18</key> <value>20</value> </param> <param> - <key>ant9</key> - <value></value> + <key>bw18</key> + <value>0</value> </param> <param> - <key>bw9</key> + <key>corr18</key> <value>0</value> </param> <param> - <key>freq10</key> + <key>freq18</key> <value>100e6</value> </param> <param> - <key>corr10</key> - <value>0</value> + <key>if_gain18</key> + <value>20</value> </param> <param> - <key>gain10</key> + <key>gain18</key> <value>10</value> </param> <param> - <key>if_gain10</key> - <value>20</value> + <key>ant19</key> + <value></value> </param> <param> - <key>bb_gain10</key> + <key>bb_gain19</key> <value>20</value> </param> <param> - <key>ant10</key> - <value></value> + <key>bw19</key> + <value>0</value> </param> <param> - <key>bw10</key> + <key>corr19</key> <value>0</value> </param> <param> - <key>freq11</key> + <key>freq19</key> <value>100e6</value> </param> <param> - <key>corr11</key> - <value>0</value> + <key>if_gain19</key> + <value>20</value> </param> <param> - <key>gain11</key> + <key>gain19</key> <value>10</value> </param> <param> - <key>if_gain11</key> - <value>20</value> + <key>ant1</key> + <value></value> </param> <param> - <key>bb_gain11</key> + <key>bb_gain1</key> <value>20</value> </param> <param> - <key>ant11</key> - <value></value> + <key>bw1</key> + <value>0</value> </param> <param> - <key>bw11</key> + <key>corr1</key> <value>0</value> </param> <param> - <key>freq12</key> + <key>freq1</key> <value>100e6</value> </param> <param> - <key>corr12</key> - <value>0</value> + <key>if_gain1</key> + <value>20</value> </param> <param> - <key>gain12</key> + <key>gain1</key> <value>10</value> </param> <param> - <key>if_gain12</key> - <value>20</value> + <key>ant20</key> + <value></value> </param> <param> - <key>bb_gain12</key> + <key>bb_gain20</key> <value>20</value> </param> <param> - <key>ant12</key> - <value></value> + <key>bw20</key> + <value>0</value> </param> <param> - <key>bw12</key> + <key>corr20</key> <value>0</value> </param> <param> - <key>freq13</key> + <key>freq20</key> <value>100e6</value> </param> <param> - <key>corr13</key> - <value>0</value> + <key>if_gain20</key> + <value>20</value> </param> <param> - <key>gain13</key> + <key>gain20</key> <value>10</value> </param> <param> - <key>if_gain13</key> - <value>20</value> + <key>ant21</key> + <value></value> </param> <param> - <key>bb_gain13</key> + <key>bb_gain21</key> <value>20</value> </param> <param> - <key>ant13</key> - <value></value> + <key>bw21</key> + <value>0</value> </param> <param> - <key>bw13</key> + <key>corr21</key> <value>0</value> </param> <param> - <key>freq14</key> + <key>freq21</key> <value>100e6</value> </param> <param> - <key>corr14</key> - <value>0</value> + <key>if_gain21</key> + <value>20</value> </param> <param> - <key>gain14</key> + <key>gain21</key> <value>10</value> </param> <param> - <key>if_gain14</key> - <value>20</value> + <key>ant22</key> + <value></value> </param> <param> - <key>bb_gain14</key> + <key>bb_gain22</key> <value>20</value> </param> <param> - <key>ant14</key> - <value></value> + <key>bw22</key> + <value>0</value> </param> <param> - <key>bw14</key> + <key>corr22</key> <value>0</value> </param> <param> - <key>freq15</key> + <key>freq22</key> <value>100e6</value> </param> <param> - <key>corr15</key> - <value>0</value> + <key>if_gain22</key> + <value>20</value> </param> <param> - <key>gain15</key> + <key>gain22</key> <value>10</value> </param> <param> - <key>if_gain15</key> - <value>20</value> + <key>ant23</key> + <value></value> </param> <param> - <key>bb_gain15</key> + <key>bb_gain23</key> <value>20</value> </param> <param> - <key>ant15</key> - <value></value> + <key>bw23</key> + <value>0</value> </param> <param> - <key>bw15</key> + <key>corr23</key> <value>0</value> </param> <param> - <key>freq16</key> + <key>freq23</key> <value>100e6</value> </param> <param> - <key>corr16</key> - <value>0</value> + <key>if_gain23</key> + <value>20</value> </param> <param> - <key>gain16</key> + <key>gain23</key> <value>10</value> </param> <param> - <key>if_gain16</key> - <value>20</value> + <key>ant24</key> + <value></value> </param> <param> - <key>bb_gain16</key> + <key>bb_gain24</key> <value>20</value> </param> <param> - <key>ant16</key> - <value></value> + <key>bw24</key> + <value>0</value> </param> <param> - <key>bw16</key> + <key>corr24</key> <value>0</value> </param> <param> - <key>freq17</key> + <key>freq24</key> <value>100e6</value> </param> <param> - <key>corr17</key> - <value>0</value> + <key>if_gain24</key> + <value>20</value> </param> <param> - <key>gain17</key> + <key>gain24</key> <value>10</value> </param> <param> - <key>if_gain17</key> - <value>20</value> + <key>ant25</key> + <value></value> </param> <param> - <key>bb_gain17</key> + <key>bb_gain25</key> <value>20</value> </param> <param> - <key>ant17</key> - <value></value> + <key>bw25</key> + <value>0</value> </param> <param> - <key>bw17</key> + <key>corr25</key> <value>0</value> </param> <param> - <key>freq18</key> + <key>freq25</key> <value>100e6</value> </param> <param> - <key>corr18</key> - <value>0</value> + <key>if_gain25</key> + <value>20</value> </param> <param> - <key>gain18</key> + <key>gain25</key> <value>10</value> </param> <param> - <key>if_gain18</key> - <value>20</value> + <key>ant26</key> + <value></value> </param> <param> - <key>bb_gain18</key> + <key>bb_gain26</key> <value>20</value> </param> <param> - <key>ant18</key> - <value></value> + <key>bw26</key> + <value>0</value> </param> <param> - <key>bw18</key> + <key>corr26</key> <value>0</value> </param> <param> - <key>freq19</key> + <key>freq26</key> <value>100e6</value> </param> <param> - <key>corr19</key> - <value>0</value> + <key>if_gain26</key> + <value>20</value> </param> <param> - <key>gain19</key> + <key>gain26</key> <value>10</value> </param> <param> - <key>if_gain19</key> - <value>20</value> + <key>ant27</key> + <value></value> </param> <param> - <key>bb_gain19</key> + <key>bb_gain27</key> <value>20</value> </param> <param> - <key>ant19</key> - <value></value> + <key>bw27</key> + <value>0</value> </param> <param> - <key>bw19</key> + <key>corr27</key> <value>0</value> </param> <param> - <key>freq20</key> + <key>freq27</key> <value>100e6</value> </param> <param> - <key>corr20</key> - <value>0</value> + <key>if_gain27</key> + <value>20</value> </param> <param> - <key>gain20</key> + <key>gain27</key> <value>10</value> </param> <param> - <key>if_gain20</key> - <value>20</value> + <key>ant28</key> + <value></value> </param> <param> - <key>bb_gain20</key> + <key>bb_gain28</key> <value>20</value> </param> <param> - <key>ant20</key> - <value></value> + <key>bw28</key> + <value>0</value> </param> <param> - <key>bw20</key> + <key>corr28</key> <value>0</value> </param> <param> - <key>freq21</key> + <key>freq28</key> <value>100e6</value> </param> <param> - <key>corr21</key> - <value>0</value> + <key>if_gain28</key> + <value>20</value> </param> <param> - <key>gain21</key> + <key>gain28</key> <value>10</value> </param> <param> - <key>if_gain21</key> - <value>20</value> + <key>ant29</key> + <value></value> </param> <param> - <key>bb_gain21</key> + <key>bb_gain29</key> <value>20</value> </param> <param> - <key>ant21</key> - <value></value> + <key>bw29</key> + <value>0</value> </param> <param> - <key>bw21</key> + <key>corr29</key> <value>0</value> </param> <param> - <key>freq22</key> + <key>freq29</key> <value>100e6</value> </param> <param> - <key>corr22</key> - <value>0</value> + <key>if_gain29</key> + <value>20</value> </param> <param> - <key>gain22</key> + <key>gain29</key> <value>10</value> </param> <param> - <key>if_gain22</key> - <value>20</value> + <key>ant2</key> + <value></value> </param> <param> - <key>bb_gain22</key> + <key>bb_gain2</key> <value>20</value> </param> <param> - <key>ant22</key> - <value></value> + <key>bw2</key> + <value>0</value> </param> <param> - <key>bw22</key> + <key>corr2</key> <value>0</value> </param> <param> - <key>freq23</key> + <key>freq2</key> <value>100e6</value> </param> <param> - <key>corr23</key> - <value>0</value> + <key>if_gain2</key> + <value>20</value> </param> <param> - <key>gain23</key> + <key>gain2</key> <value>10</value> </param> <param> - <key>if_gain23</key> - <value>20</value> + <key>ant30</key> + <value></value> </param> <param> - <key>bb_gain23</key> + <key>bb_gain30</key> <value>20</value> </param> <param> - <key>ant23</key> - <value></value> + <key>bw30</key> + <value>0</value> </param> <param> - <key>bw23</key> + <key>corr30</key> <value>0</value> </param> <param> - <key>freq24</key> + <key>freq30</key> <value>100e6</value> </param> <param> - <key>corr24</key> - <value>0</value> + <key>if_gain30</key> + <value>20</value> </param> <param> - <key>gain24</key> + <key>gain30</key> <value>10</value> </param> <param> - <key>if_gain24</key> - <value>20</value> + <key>ant31</key> + <value></value> </param> <param> - <key>bb_gain24</key> + <key>bb_gain31</key> <value>20</value> </param> <param> - <key>ant24</key> - <value></value> + <key>bw31</key> + <value>0</value> </param> <param> - <key>bw24</key> + <key>corr31</key> <value>0</value> </param> <param> - <key>freq25</key> + <key>freq31</key> <value>100e6</value> </param> <param> - <key>corr25</key> - <value>0</value> + <key>if_gain31</key> + <value>20</value> </param> <param> - <key>gain25</key> + <key>gain31</key> <value>10</value> </param> <param> - <key>if_gain25</key> - <value>20</value> + <key>ant3</key> + <value></value> </param> <param> - <key>bb_gain25</key> + <key>bb_gain3</key> <value>20</value> </param> <param> - <key>ant25</key> - <value></value> + <key>bw3</key> + <value>0</value> </param> <param> - <key>bw25</key> + <key>corr3</key> <value>0</value> </param> <param> - <key>freq26</key> + <key>freq3</key> <value>100e6</value> </param> <param> - <key>corr26</key> - <value>0</value> + <key>if_gain3</key> + <value>20</value> </param> <param> - <key>gain26</key> + <key>gain3</key> <value>10</value> </param> <param> - <key>if_gain26</key> - <value>20</value> + <key>ant4</key> + <value></value> </param> <param> - <key>bb_gain26</key> + <key>bb_gain4</key> <value>20</value> </param> <param> - <key>ant26</key> - <value></value> + <key>bw4</key> + <value>0</value> </param> <param> - <key>bw26</key> + <key>corr4</key> <value>0</value> </param> <param> - <key>freq27</key> + <key>freq4</key> <value>100e6</value> </param> <param> - <key>corr27</key> - <value>0</value> + <key>if_gain4</key> + <value>20</value> </param> <param> - <key>gain27</key> + <key>gain4</key> <value>10</value> </param> <param> - <key>if_gain27</key> - <value>20</value> + <key>ant5</key> + <value></value> </param> <param> - <key>bb_gain27</key> + <key>bb_gain5</key> <value>20</value> </param> <param> - <key>ant27</key> - <value></value> + <key>bw5</key> + <value>0</value> </param> <param> - <key>bw27</key> + <key>corr5</key> <value>0</value> </param> <param> - <key>freq28</key> + <key>freq5</key> <value>100e6</value> </param> <param> - <key>corr28</key> - <value>0</value> + <key>if_gain5</key> + <value>20</value> </param> <param> - <key>gain28</key> + <key>gain5</key> <value>10</value> </param> <param> - <key>if_gain28</key> - <value>20</value> + <key>ant6</key> + <value></value> </param> <param> - <key>bb_gain28</key> + <key>bb_gain6</key> <value>20</value> </param> <param> - <key>ant28</key> - <value></value> + <key>bw6</key> + <value>0</value> </param> <param> - <key>bw28</key> + <key>corr6</key> <value>0</value> </param> <param> - <key>freq29</key> + <key>freq6</key> <value>100e6</value> </param> <param> - <key>corr29</key> - <value>0</value> + <key>if_gain6</key> + <value>20</value> </param> <param> - <key>gain29</key> + <key>gain6</key> <value>10</value> </param> <param> - <key>if_gain29</key> - <value>20</value> + <key>ant7</key> + <value></value> </param> <param> - <key>bb_gain29</key> + <key>bb_gain7</key> <value>20</value> </param> <param> - <key>ant29</key> - <value></value> + <key>bw7</key> + <value>0</value> </param> <param> - <key>bw29</key> + <key>corr7</key> <value>0</value> </param> <param> - <key>freq30</key> + <key>freq7</key> <value>100e6</value> </param> <param> - <key>corr30</key> - <value>0</value> + <key>if_gain7</key> + <value>20</value> </param> <param> - <key>gain30</key> + <key>gain7</key> <value>10</value> </param> <param> - <key>if_gain30</key> - <value>20</value> + <key>ant8</key> + <value></value> </param> <param> - <key>bb_gain30</key> + <key>bb_gain8</key> <value>20</value> </param> <param> - <key>ant30</key> - <value></value> + <key>bw8</key> + <value>0</value> </param> <param> - <key>bw30</key> + <key>corr8</key> <value>0</value> </param> <param> - <key>freq31</key> + <key>freq8</key> <value>100e6</value> </param> <param> - <key>corr31</key> - <value>0</value> + <key>if_gain8</key> + <value>20</value> </param> <param> - <key>gain31</key> + <key>gain8</key> <value>10</value> </param> <param> - <key>if_gain31</key> - <value>20</value> + <key>ant9</key> + <value></value> </param> <param> - <key>bb_gain31</key> + <key>bb_gain9</key> <value>20</value> </param> <param> - <key>ant31</key> - <value></value> + <key>bw9</key> + <value>0</value> </param> <param> - <key>bw31</key> + <key>corr9</key> <value>0</value> </param> <param> - <key>alias</key> + <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> @@ -2336,141 +2497,131 @@ <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>(792, 443)</value> + <value>(816, 484)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_file_source</key> <param> <key>id</key> - <value>blocks_file_source_0</value> + <value>osmosdr_sink_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>fc32</value> </param> <param> - <key>file</key> - <value>/run/shm/adv32kmiso.ts</value> + <key>clock_source0</key> + <value></value> </param> <param> - <key>type</key> - <value>byte</value> + <key>time_source0</key> + <value></value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>clock_source1</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>time_source1</key> + <value></value> </param> <param> - <key>alias</key> + <key>clock_source2</key> <value></value> </param> <param> - <key>affinity</key> + <key>time_source2</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>clock_source3</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>time_source3</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(112, 75)</value> + <key>clock_source4</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>time_source4</key> + <value></value> </param> - </block> - <block> - <key>blocks_null_sink</key> <param> - <key>id</key> - <value>blocks_null_sink_0</value> + <key>clock_source5</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>time_source5</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>clock_source6</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>time_source6</key> + <value></value> </param> <param> - <key>num_inputs</key> - <value>1</value> + <key>clock_source7</key> + <value></value> </param> <param> - <key>bus_conns</key> - <value>[[0,],]</value> + <key>time_source7</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>nchan</key> + <value>1</value> </param> <param> - <key>affinity</key> - <value></value> + <key>num_mboards</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(616, 352)</value> + <key>sample_rate</key> + <value>samp_rate</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>sync</key> + <value></value> </param> </block> <connection> - <source_block_id>dtv_dvb_bch_bb_0</source_block_id> - <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id> - <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id> - <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id> + <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> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id> - <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id> + <source_block_id>blocks_multiply_const_xx_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>dtv_dvbt2_modulator_bc_0</source_block_id> - <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id> + <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> + <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id> - <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id> + <source_block_id>digital_ofdm_cyclic_prefixer_0_0</source_block_id> + <sink_block_id>dtv_dvbt2_p1insertion_cc_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2481,50 +2632,44 @@ <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> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>dtv_dvbt2_framemapper_cc_0</source_block_id> - <sink_block_id>dtv_dvbt2_freqinterleaver_cc_0</sink_block_id> + <source_block_id>dtv_dvb_bbscrambler_bb_0</source_block_id> + <sink_block_id>dtv_dvb_bch_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id> - <sink_block_id>dtv_dvbt2_p1insertion_cc_0</sink_block_id> + <source_block_id>dtv_dvb_bch_bb_0</source_block_id> + <sink_block_id>dtv_dvb_ldpc_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_pilotgenerator_cc_1</source_block_id> - <sink_block_id>digital_ofdm_cyclic_prefixer_0_0</sink_block_id> + <source_block_id>dtv_dvb_ldpc_bb_0</source_block_id> + <sink_block_id>dtv_dvbt2_interleaver_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_ofdm_cyclic_prefixer_0_0</source_block_id> - <sink_block_id>dtv_dvbt2_p1insertion_cc_0_0</sink_block_id> + <source_block_id>dtv_dvbt2_cellinterleaver_cc_0</source_block_id> + <sink_block_id>dtv_dvbt2_framemapper_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_p1insertion_cc_0_0</source_block_id> - <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_framemapper_cc_0</source_block_id> + <sink_block_id>dtv_dvbt2_freqinterleaver_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_0</source_block_id> - <sink_block_id>osmosdr_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_freqinterleaver_cc_0</source_block_id> + <sink_block_id>dtv_dvbt2_miso_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_freqinterleaver_cc_0</source_block_id> - <sink_block_id>dtv_dvbt2_miso_cc_0</sink_block_id> + <source_block_id>dtv_dvbt2_interleaver_bb_0</source_block_id> + <sink_block_id>dtv_dvbt2_modulator_bc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2541,8 +2686,8 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>dtv_dvbt2_p1insertion_cc_0_0</source_block_id> - <sink_block_id>blocks_null_sink_0</sink_block_id> + <source_block_id>dtv_dvbt2_modulator_bc_0</source_block_id> + <sink_block_id>dtv_dvbt2_cellinterleaver_cc_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2554,7 +2699,19 @@ </connection> <connection> <source_block_id>dtv_dvbt2_p1insertion_cc_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> + <sink_block_id>blocks_multiply_const_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>dtv_dvbt2_p1insertion_cc_0_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>dtv_dvbt2_p1insertion_cc_0_0</source_block_id> + <sink_block_id>blocks_null_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2564,4 +2721,10 @@ <source_key>0</source_key> <sink_key>0</sink_key> </connection> + <connection> + <source_block_id>dtv_dvbt2_pilotgenerator_cc_1</source_block_id> + <sink_block_id>digital_ofdm_cyclic_prefixer_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> </flow_graph> diff --git a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml index 5f848ec82d..28284169fd 100644 --- a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml +++ b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml @@ -21,6 +21,7 @@ $constellation.val, $interpolation.val)</make> <name>FECFRAME size</name> <key>framesize</key> <type>enum</type> + <hide>$constellation.hide_dvb</hide> <option> <name>Normal</name> <key>FECFRAME_NORMAL</key> @@ -50,7 +51,7 @@ $constellation.val, $interpolation.val)</make> <name>Code rate</name> <key>rate1</key> <type>enum</type> - <hide>$framesize.hide_normal</hide> + <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' then $constellation.hide_dvb else $framesize.hide_normal</hide> <option> <name>1/4</name> <key>C1_4</key> @@ -231,7 +232,7 @@ $constellation.val, $interpolation.val)</make> <name>Code rate</name> <key>rate2</key> <type>enum</type> - <hide>$framesize.hide_medium</hide> + <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' then $constellation.hide_dvb else $framesize.hide_medium</hide> <option> <name>1/5</name> <key>C1_5_MEDIUM</key> @@ -252,7 +253,7 @@ $constellation.val, $interpolation.val)</make> <name>Code rate</name> <key>rate3</key> <type>enum</type> - <hide>$framesize.hide_short</hide> + <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' then $constellation.hide_dvb else $framesize.hide_short</hide> <option> <name>1/4</name> <key>C1_4</key> @@ -372,81 +373,103 @@ $constellation.val, $interpolation.val)</make> <name>QPSK</name> <key>MOD_QPSK</key> <opt>val:dtv.MOD_QPSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>8PSK</name> <key>MOD_8PSK</key> <opt>val:dtv.MOD_8PSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>8APSK</name> <key>MOD_8APSK</key> <opt>val:dtv.MOD_8APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>16APSK</name> <key>MOD_16APSK</key> <opt>val:dtv.MOD_16APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>8+8APSK</name> <key>MOD_8_8APSK</key> <opt>val:dtv.MOD_8_8APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>32APSK</name> <key>MOD_32APSK</key> <opt>val:dtv.MOD_32APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>4+12+16rbAPSK</name> <key>MOD_4_12_16APSK</key> <opt>val:dtv.MOD_4_12_16APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>4+8+4+16APSK</name> <key>MOD_4_8_4_16APSK</key> <opt>val:dtv.MOD_4_8_4_16APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>64APSK</name> <key>MOD_64APSK</key> <opt>val:dtv.MOD_64APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>8+16+20+20APSK</name> <key>MOD_8_16_20_20APSK</key> <opt>val:dtv.MOD_8_16_20_20APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>4+12+20+28APSK</name> <key>MOD_4_12_20_28APSK</key> <opt>val:dtv.MOD_4_12_20_28APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>128APSK</name> <key>MOD_128APSK</key> <opt>val:dtv.MOD_128APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>256APSK</name> <key>MOD_256APSK</key> <opt>val:dtv.MOD_256APSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>64QAM (ITU-T J.83B)</name> <key>MOD_64QAM</key> <opt>val:dtv.MOD_64QAM</opt> + <opt>hide_dvb:all</opt> </option> <option> <name>PI/2 BPSK</name> <key>MOD_BPSK</key> <opt>val:dtv.MOD_BPSK</opt> + <opt>hide_dvb:</opt> </option> <option> <name>PI/2 BPSK-SF2</name> <key>MOD_BPSK_SF2</key> <opt>val:dtv.MOD_BPSK_SF2</opt> + <opt>hide_dvb:</opt> + </option> + <option> + <name>8VSB (ATSC)</name> + <key>MOD_8VSB</key> + <opt>val:dtv.MOD_8VSB</opt> + <opt>hide_dvb:all</opt> </option> </param> <param> diff --git a/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml b/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml index 8cfb4908b6..e795c8a1dc 100644 --- a/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml +++ b/gr-dtv/grc/dtv_dvbt2_framemapper_cc.xml @@ -494,12 +494,12 @@ $inputmode.val, $reservedbiasbits.val, $l1scrambled.val, $inband.val)</make> <hide>$version.hide_131</hide> <option> <name>Normal</name> - <key>FECFRAME_NORMAL</key> + <key>INPUTMODE_NORMAL</key> <opt>val:dtv.INPUTMODE_NORMAL</opt> </option> <option> <name>High Efficiency</name> - <key>FECFRAME_SHORT</key> + <key>INPUTMODE_HIEFF</key> <opt>val:dtv.INPUTMODE_HIEFF</opt> </option> </param> diff --git a/gr-dtv/include/gnuradio/dtv/dvb_config.h b/gr-dtv/include/gnuradio/dtv/dvb_config.h index 601fd5c569..68010e43b6 100644 --- a/gr-dtv/include/gnuradio/dtv/dvb_config.h +++ b/gr-dtv/include/gnuradio/dtv/dvb_config.h @@ -107,6 +107,7 @@ namespace gr { MOD_256APSK, MOD_BPSK, MOD_BPSK_SF2, + MOD_8VSB, MOD_OTHER, }; diff --git a/gr-dtv/lib/CMakeLists.txt b/gr-dtv/lib/CMakeLists.txt index fec48990a2..4aa6d49d6d 100644 --- a/gr-dtv/lib/CMakeLists.txt +++ b/gr-dtv/lib/CMakeLists.txt @@ -38,27 +38,9 @@ if(ENABLE_GR_CTRLPORT) endif(ENABLE_GR_CTRLPORT) ######################################################################## -# Generate viterbi mux source -# http://www.vtk.org/Wiki/CMake_Cross_Compiling#Using_executables_in_the_build_created_during_the_build -######################################################################## -if(NOT CMAKE_CROSSCOMPILING) - add_executable(atsc_viterbi_gen atsc/atsc_viterbi_gen.cc) - export(TARGETS atsc_viterbi_gen APPEND FILE ${EXPORT_FILE}) -endif() - -set(atsc_viterbi_mux_cc ${CMAKE_CURRENT_BINARY_DIR}/atsc_viterbi_mux.cc) - -add_custom_command( - OUTPUT ${atsc_viterbi_mux_cc} - DEPENDS atsc_viterbi_gen - COMMAND atsc_viterbi_gen -o ${atsc_viterbi_mux_cc} -) - -######################################################################## # Setup library ######################################################################## list(APPEND dtv_sources - ${atsc_viterbi_mux_cc} atsc/atsc_deinterleaver_impl.cc atsc/atsc_depad_impl.cc atsc/atsc_derandomizer_impl.cc @@ -95,7 +77,6 @@ list(APPEND dtv_sources dvbs2/dvbs2_modulator_bc_impl.cc dvbs2/dvbs2_physical_cc_impl.cc dvbt/dvbt_energy_dispersal_impl.cc - dvbt/dvbt_reed_solomon.cc dvbt/dvbt_reed_solomon_enc_impl.cc dvbt/dvbt_convolutional_interleaver_impl.cc dvbt/dvbt_configure.cc diff --git a/gr-dtv/lib/atsc/atsc_interleaver_impl.cc b/gr-dtv/lib/atsc/atsc_interleaver_impl.cc index e628fbf30d..cfc9e2996c 100644 --- a/gr-dtv/lib/atsc/atsc_interleaver_impl.cc +++ b/gr-dtv/lib/atsc/atsc_interleaver_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 @@ -24,7 +24,6 @@ #include "atsc_interleaver_impl.h" #include "gnuradio/dtv/atsc_consts.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -45,14 +44,15 @@ namespace gr { J = 4; registers = (unsigned char *) malloc(sizeof(unsigned char) * I * ((I - 1) * J)); if (registers == NULL) { - fprintf(stderr, "Out of memory.\n"); - exit(1); + GR_LOG_FATAL(d_logger, "ATSC Interleaver, cannot allocate memory for registers."); + throw std::bad_alloc(); } pointers = (int *) malloc(sizeof(int) * I); if (pointers == NULL) { - fprintf(stderr, "Out of memory.\n"); - exit(1); + free(registers); + GR_LOG_FATAL(d_logger, "ATSC Interleaver, cannot allocate memory for pointers"); + throw std::bad_alloc(); } memset(registers, 0, sizeof(unsigned char) * I * ((I - 1) * J)); diff --git a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc index 2284372dfb..bf1e86c9f8 100644 --- a/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc +++ b/gr-dtv/lib/atsc/atsc_viterbi_decoder_impl.cc @@ -27,7 +27,7 @@ #include <gnuradio/io_signature.h> #include "atsc_viterbi_decoder_impl.h" #include "atsc_types.h" -#include <atsc_viterbi_mux.cc> // machine generated +#include "atsc_viterbi_mux.h" namespace gr { namespace dtv { diff --git a/gr-dtv/lib/atsc/atsc_viterbi_mux.h b/gr-dtv/lib/atsc/atsc_viterbi_mux.h new file mode 100644 index 0000000000..07ec557544 --- /dev/null +++ b/gr-dtv/lib/atsc/atsc_viterbi_mux.h @@ -0,0 +1,2539 @@ +/* + * Data structures for knowing which symbols are fed to which + * Viterbi decoders, and then where to put the resulting output dibits. + * + * Generated by 'atsc_viterbi_gen.cc'. + */ + +const unsigned int sync_symbol_indices_max = 12; +const unsigned int sync_symbol_indices[12] = { + 0, 832, 1664, 2496, 3328, 4160, 4992, 5824, + 6656, 7488, 8320, 9152, }; + +const unsigned int enco_which_max = 828; +const unsigned int enco_which_syms[12][828] = { + /* 0 */ + {4, 16, 28, 40, 52, 64, 76, 88, + 100, 112, 124, 136, 148, 160, 172, 184, + 196, 208, 220, 232, 244, 256, 268, 280, + 292, 304, 316, 328, 340, 352, 364, 376, + 388, 400, 412, 424, 436, 448, 460, 472, + 484, 496, 508, 520, 532, 544, 556, 568, + 580, 592, 604, 616, 628, 640, 652, 664, + 676, 688, 700, 712, 724, 736, 748, 760, + 772, 784, 796, 808, 820, 844, 856, 868, + 880, 892, 904, 916, 928, 940, 952, 964, + 976, 988, 1000, 1012, 1024, 1036, 1048, 1060, + 1072, 1084, 1096, 1108, 1120, 1132, 1144, 1156, + 1168, 1180, 1192, 1204, 1216, 1228, 1240, 1252, + 1264, 1276, 1288, 1300, 1312, 1324, 1336, 1348, + 1360, 1372, 1384, 1396, 1408, 1420, 1432, 1444, + 1456, 1468, 1480, 1492, 1504, 1516, 1528, 1540, + 1552, 1564, 1576, 1588, 1600, 1612, 1624, 1636, + 1648, 1660, 1672, 1684, 1696, 1708, 1720, 1732, + 1744, 1756, 1768, 1780, 1792, 1804, 1816, 1828, + 1840, 1852, 1864, 1876, 1888, 1900, 1912, 1924, + 1936, 1948, 1960, 1972, 1984, 1996, 2008, 2020, + 2032, 2044, 2056, 2068, 2080, 2092, 2104, 2116, + 2128, 2140, 2152, 2164, 2176, 2188, 2200, 2212, + 2224, 2236, 2248, 2260, 2272, 2284, 2296, 2308, + 2320, 2332, 2344, 2356, 2368, 2380, 2392, 2404, + 2416, 2428, 2440, 2452, 2464, 2476, 2488, 2500, + 2512, 2524, 2536, 2548, 2560, 2572, 2584, 2596, + 2608, 2620, 2632, 2644, 2656, 2668, 2680, 2692, + 2704, 2716, 2728, 2740, 2752, 2764, 2776, 2788, + 2800, 2812, 2824, 2836, 2848, 2860, 2872, 2884, + 2896, 2908, 2920, 2932, 2944, 2956, 2968, 2980, + 2992, 3004, 3016, 3028, 3040, 3052, 3064, 3076, + 3088, 3100, 3112, 3124, 3136, 3148, 3160, 3172, + 3184, 3196, 3208, 3220, 3232, 3244, 3256, 3268, + 3280, 3292, 3304, 3316, 3340, 3352, 3364, 3376, + 3388, 3400, 3412, 3424, 3436, 3448, 3460, 3472, + 3484, 3496, 3508, 3520, 3532, 3544, 3556, 3568, + 3580, 3592, 3604, 3616, 3628, 3640, 3652, 3664, + 3676, 3688, 3700, 3712, 3724, 3736, 3748, 3760, + 3772, 3784, 3796, 3808, 3820, 3832, 3844, 3856, + 3868, 3880, 3892, 3904, 3916, 3928, 3940, 3952, + 3964, 3976, 3988, 4000, 4012, 4024, 4036, 4048, + 4060, 4072, 4084, 4096, 4108, 4120, 4132, 4144, + 4156, 4168, 4180, 4192, 4204, 4216, 4228, 4240, + 4252, 4264, 4276, 4288, 4300, 4312, 4324, 4336, + 4348, 4360, 4372, 4384, 4396, 4408, 4420, 4432, + 4444, 4456, 4468, 4480, 4492, 4504, 4516, 4528, + 4540, 4552, 4564, 4576, 4588, 4600, 4612, 4624, + 4636, 4648, 4660, 4672, 4684, 4696, 4708, 4720, + 4732, 4744, 4756, 4768, 4780, 4792, 4804, 4816, + 4828, 4840, 4852, 4864, 4876, 4888, 4900, 4912, + 4924, 4936, 4948, 4960, 4972, 4984, 4996, 5008, + 5020, 5032, 5044, 5056, 5068, 5080, 5092, 5104, + 5116, 5128, 5140, 5152, 5164, 5176, 5188, 5200, + 5212, 5224, 5236, 5248, 5260, 5272, 5284, 5296, + 5308, 5320, 5332, 5344, 5356, 5368, 5380, 5392, + 5404, 5416, 5428, 5440, 5452, 5464, 5476, 5488, + 5500, 5512, 5524, 5536, 5548, 5560, 5572, 5584, + 5596, 5608, 5620, 5632, 5644, 5656, 5668, 5680, + 5692, 5704, 5716, 5728, 5740, 5752, 5764, 5776, + 5788, 5800, 5812, 5836, 5848, 5860, 5872, 5884, + 5896, 5908, 5920, 5932, 5944, 5956, 5968, 5980, + 5992, 6004, 6016, 6028, 6040, 6052, 6064, 6076, + 6088, 6100, 6112, 6124, 6136, 6148, 6160, 6172, + 6184, 6196, 6208, 6220, 6232, 6244, 6256, 6268, + 6280, 6292, 6304, 6316, 6328, 6340, 6352, 6364, + 6376, 6388, 6400, 6412, 6424, 6436, 6448, 6460, + 6472, 6484, 6496, 6508, 6520, 6532, 6544, 6556, + 6568, 6580, 6592, 6604, 6616, 6628, 6640, 6652, + 6664, 6676, 6688, 6700, 6712, 6724, 6736, 6748, + 6760, 6772, 6784, 6796, 6808, 6820, 6832, 6844, + 6856, 6868, 6880, 6892, 6904, 6916, 6928, 6940, + 6952, 6964, 6976, 6988, 7000, 7012, 7024, 7036, + 7048, 7060, 7072, 7084, 7096, 7108, 7120, 7132, + 7144, 7156, 7168, 7180, 7192, 7204, 7216, 7228, + 7240, 7252, 7264, 7276, 7288, 7300, 7312, 7324, + 7336, 7348, 7360, 7372, 7384, 7396, 7408, 7420, + 7432, 7444, 7456, 7468, 7480, 7492, 7504, 7516, + 7528, 7540, 7552, 7564, 7576, 7588, 7600, 7612, + 7624, 7636, 7648, 7660, 7672, 7684, 7696, 7708, + 7720, 7732, 7744, 7756, 7768, 7780, 7792, 7804, + 7816, 7828, 7840, 7852, 7864, 7876, 7888, 7900, + 7912, 7924, 7936, 7948, 7960, 7972, 7984, 7996, + 8008, 8020, 8032, 8044, 8056, 8068, 8080, 8092, + 8104, 8116, 8128, 8140, 8152, 8164, 8176, 8188, + 8200, 8212, 8224, 8236, 8248, 8260, 8272, 8284, + 8296, 8308, 8332, 8344, 8356, 8368, 8380, 8392, + 8404, 8416, 8428, 8440, 8452, 8464, 8476, 8488, + 8500, 8512, 8524, 8536, 8548, 8560, 8572, 8584, + 8596, 8608, 8620, 8632, 8644, 8656, 8668, 8680, + 8692, 8704, 8716, 8728, 8740, 8752, 8764, 8776, + 8788, 8800, 8812, 8824, 8836, 8848, 8860, 8872, + 8884, 8896, 8908, 8920, 8932, 8944, 8956, 8968, + 8980, 8992, 9004, 9016, 9028, 9040, 9052, 9064, + 9076, 9088, 9100, 9112, 9124, 9136, 9148, 9160, + 9172, 9184, 9196, 9208, 9220, 9232, 9244, 9256, + 9268, 9280, 9292, 9304, 9316, 9328, 9340, 9352, + 9364, 9376, 9388, 9400, 9412, 9424, 9436, 9448, + 9460, 9472, 9484, 9496, 9508, 9520, 9532, 9544, + 9556, 9568, 9580, 9592, 9604, 9616, 9628, 9640, + 9652, 9664, 9676, 9688, 9700, 9712, 9724, 9736, + 9748, 9760, 9772, 9784, 9796, 9808, 9820, 9832, + 9844, 9856, 9868, 9880, 9892, 9904, 9916, 9928, + 9940, 9952, 9964, 9976, }, + /* 1 */ + {5, 17, 29, 41, 53, 65, 77, 89, + 101, 113, 125, 137, 149, 161, 173, 185, + 197, 209, 221, 233, 245, 257, 269, 281, + 293, 305, 317, 329, 341, 353, 365, 377, + 389, 401, 413, 425, 437, 449, 461, 473, + 485, 497, 509, 521, 533, 545, 557, 569, + 581, 593, 605, 617, 629, 641, 653, 665, + 677, 689, 701, 713, 725, 737, 749, 761, + 773, 785, 797, 809, 821, 845, 857, 869, + 881, 893, 905, 917, 929, 941, 953, 965, + 977, 989, 1001, 1013, 1025, 1037, 1049, 1061, + 1073, 1085, 1097, 1109, 1121, 1133, 1145, 1157, + 1169, 1181, 1193, 1205, 1217, 1229, 1241, 1253, + 1265, 1277, 1289, 1301, 1313, 1325, 1337, 1349, + 1361, 1373, 1385, 1397, 1409, 1421, 1433, 1445, + 1457, 1469, 1481, 1493, 1505, 1517, 1529, 1541, + 1553, 1565, 1577, 1589, 1601, 1613, 1625, 1637, + 1649, 1661, 1673, 1685, 1697, 1709, 1721, 1733, + 1745, 1757, 1769, 1781, 1793, 1805, 1817, 1829, + 1841, 1853, 1865, 1877, 1889, 1901, 1913, 1925, + 1937, 1949, 1961, 1973, 1985, 1997, 2009, 2021, + 2033, 2045, 2057, 2069, 2081, 2093, 2105, 2117, + 2129, 2141, 2153, 2165, 2177, 2189, 2201, 2213, + 2225, 2237, 2249, 2261, 2273, 2285, 2297, 2309, + 2321, 2333, 2345, 2357, 2369, 2381, 2393, 2405, + 2417, 2429, 2441, 2453, 2465, 2477, 2489, 2501, + 2513, 2525, 2537, 2549, 2561, 2573, 2585, 2597, + 2609, 2621, 2633, 2645, 2657, 2669, 2681, 2693, + 2705, 2717, 2729, 2741, 2753, 2765, 2777, 2789, + 2801, 2813, 2825, 2837, 2849, 2861, 2873, 2885, + 2897, 2909, 2921, 2933, 2945, 2957, 2969, 2981, + 2993, 3005, 3017, 3029, 3041, 3053, 3065, 3077, + 3089, 3101, 3113, 3125, 3137, 3149, 3161, 3173, + 3185, 3197, 3209, 3221, 3233, 3245, 3257, 3269, + 3281, 3293, 3305, 3317, 3341, 3353, 3365, 3377, + 3389, 3401, 3413, 3425, 3437, 3449, 3461, 3473, + 3485, 3497, 3509, 3521, 3533, 3545, 3557, 3569, + 3581, 3593, 3605, 3617, 3629, 3641, 3653, 3665, + 3677, 3689, 3701, 3713, 3725, 3737, 3749, 3761, + 3773, 3785, 3797, 3809, 3821, 3833, 3845, 3857, + 3869, 3881, 3893, 3905, 3917, 3929, 3941, 3953, + 3965, 3977, 3989, 4001, 4013, 4025, 4037, 4049, + 4061, 4073, 4085, 4097, 4109, 4121, 4133, 4145, + 4157, 4169, 4181, 4193, 4205, 4217, 4229, 4241, + 4253, 4265, 4277, 4289, 4301, 4313, 4325, 4337, + 4349, 4361, 4373, 4385, 4397, 4409, 4421, 4433, + 4445, 4457, 4469, 4481, 4493, 4505, 4517, 4529, + 4541, 4553, 4565, 4577, 4589, 4601, 4613, 4625, + 4637, 4649, 4661, 4673, 4685, 4697, 4709, 4721, + 4733, 4745, 4757, 4769, 4781, 4793, 4805, 4817, + 4829, 4841, 4853, 4865, 4877, 4889, 4901, 4913, + 4925, 4937, 4949, 4961, 4973, 4985, 4997, 5009, + 5021, 5033, 5045, 5057, 5069, 5081, 5093, 5105, + 5117, 5129, 5141, 5153, 5165, 5177, 5189, 5201, + 5213, 5225, 5237, 5249, 5261, 5273, 5285, 5297, + 5309, 5321, 5333, 5345, 5357, 5369, 5381, 5393, + 5405, 5417, 5429, 5441, 5453, 5465, 5477, 5489, + 5501, 5513, 5525, 5537, 5549, 5561, 5573, 5585, + 5597, 5609, 5621, 5633, 5645, 5657, 5669, 5681, + 5693, 5705, 5717, 5729, 5741, 5753, 5765, 5777, + 5789, 5801, 5813, 5837, 5849, 5861, 5873, 5885, + 5897, 5909, 5921, 5933, 5945, 5957, 5969, 5981, + 5993, 6005, 6017, 6029, 6041, 6053, 6065, 6077, + 6089, 6101, 6113, 6125, 6137, 6149, 6161, 6173, + 6185, 6197, 6209, 6221, 6233, 6245, 6257, 6269, + 6281, 6293, 6305, 6317, 6329, 6341, 6353, 6365, + 6377, 6389, 6401, 6413, 6425, 6437, 6449, 6461, + 6473, 6485, 6497, 6509, 6521, 6533, 6545, 6557, + 6569, 6581, 6593, 6605, 6617, 6629, 6641, 6653, + 6665, 6677, 6689, 6701, 6713, 6725, 6737, 6749, + 6761, 6773, 6785, 6797, 6809, 6821, 6833, 6845, + 6857, 6869, 6881, 6893, 6905, 6917, 6929, 6941, + 6953, 6965, 6977, 6989, 7001, 7013, 7025, 7037, + 7049, 7061, 7073, 7085, 7097, 7109, 7121, 7133, + 7145, 7157, 7169, 7181, 7193, 7205, 7217, 7229, + 7241, 7253, 7265, 7277, 7289, 7301, 7313, 7325, + 7337, 7349, 7361, 7373, 7385, 7397, 7409, 7421, + 7433, 7445, 7457, 7469, 7481, 7493, 7505, 7517, + 7529, 7541, 7553, 7565, 7577, 7589, 7601, 7613, + 7625, 7637, 7649, 7661, 7673, 7685, 7697, 7709, + 7721, 7733, 7745, 7757, 7769, 7781, 7793, 7805, + 7817, 7829, 7841, 7853, 7865, 7877, 7889, 7901, + 7913, 7925, 7937, 7949, 7961, 7973, 7985, 7997, + 8009, 8021, 8033, 8045, 8057, 8069, 8081, 8093, + 8105, 8117, 8129, 8141, 8153, 8165, 8177, 8189, + 8201, 8213, 8225, 8237, 8249, 8261, 8273, 8285, + 8297, 8309, 8333, 8345, 8357, 8369, 8381, 8393, + 8405, 8417, 8429, 8441, 8453, 8465, 8477, 8489, + 8501, 8513, 8525, 8537, 8549, 8561, 8573, 8585, + 8597, 8609, 8621, 8633, 8645, 8657, 8669, 8681, + 8693, 8705, 8717, 8729, 8741, 8753, 8765, 8777, + 8789, 8801, 8813, 8825, 8837, 8849, 8861, 8873, + 8885, 8897, 8909, 8921, 8933, 8945, 8957, 8969, + 8981, 8993, 9005, 9017, 9029, 9041, 9053, 9065, + 9077, 9089, 9101, 9113, 9125, 9137, 9149, 9161, + 9173, 9185, 9197, 9209, 9221, 9233, 9245, 9257, + 9269, 9281, 9293, 9305, 9317, 9329, 9341, 9353, + 9365, 9377, 9389, 9401, 9413, 9425, 9437, 9449, + 9461, 9473, 9485, 9497, 9509, 9521, 9533, 9545, + 9557, 9569, 9581, 9593, 9605, 9617, 9629, 9641, + 9653, 9665, 9677, 9689, 9701, 9713, 9725, 9737, + 9749, 9761, 9773, 9785, 9797, 9809, 9821, 9833, + 9845, 9857, 9869, 9881, 9893, 9905, 9917, 9929, + 9941, 9953, 9965, 9977, }, + /* 2 */ + {6, 18, 30, 42, 54, 66, 78, 90, + 102, 114, 126, 138, 150, 162, 174, 186, + 198, 210, 222, 234, 246, 258, 270, 282, + 294, 306, 318, 330, 342, 354, 366, 378, + 390, 402, 414, 426, 438, 450, 462, 474, + 486, 498, 510, 522, 534, 546, 558, 570, + 582, 594, 606, 618, 630, 642, 654, 666, + 678, 690, 702, 714, 726, 738, 750, 762, + 774, 786, 798, 810, 822, 846, 858, 870, + 882, 894, 906, 918, 930, 942, 954, 966, + 978, 990, 1002, 1014, 1026, 1038, 1050, 1062, + 1074, 1086, 1098, 1110, 1122, 1134, 1146, 1158, + 1170, 1182, 1194, 1206, 1218, 1230, 1242, 1254, + 1266, 1278, 1290, 1302, 1314, 1326, 1338, 1350, + 1362, 1374, 1386, 1398, 1410, 1422, 1434, 1446, + 1458, 1470, 1482, 1494, 1506, 1518, 1530, 1542, + 1554, 1566, 1578, 1590, 1602, 1614, 1626, 1638, + 1650, 1662, 1674, 1686, 1698, 1710, 1722, 1734, + 1746, 1758, 1770, 1782, 1794, 1806, 1818, 1830, + 1842, 1854, 1866, 1878, 1890, 1902, 1914, 1926, + 1938, 1950, 1962, 1974, 1986, 1998, 2010, 2022, + 2034, 2046, 2058, 2070, 2082, 2094, 2106, 2118, + 2130, 2142, 2154, 2166, 2178, 2190, 2202, 2214, + 2226, 2238, 2250, 2262, 2274, 2286, 2298, 2310, + 2322, 2334, 2346, 2358, 2370, 2382, 2394, 2406, + 2418, 2430, 2442, 2454, 2466, 2478, 2490, 2502, + 2514, 2526, 2538, 2550, 2562, 2574, 2586, 2598, + 2610, 2622, 2634, 2646, 2658, 2670, 2682, 2694, + 2706, 2718, 2730, 2742, 2754, 2766, 2778, 2790, + 2802, 2814, 2826, 2838, 2850, 2862, 2874, 2886, + 2898, 2910, 2922, 2934, 2946, 2958, 2970, 2982, + 2994, 3006, 3018, 3030, 3042, 3054, 3066, 3078, + 3090, 3102, 3114, 3126, 3138, 3150, 3162, 3174, + 3186, 3198, 3210, 3222, 3234, 3246, 3258, 3270, + 3282, 3294, 3306, 3318, 3342, 3354, 3366, 3378, + 3390, 3402, 3414, 3426, 3438, 3450, 3462, 3474, + 3486, 3498, 3510, 3522, 3534, 3546, 3558, 3570, + 3582, 3594, 3606, 3618, 3630, 3642, 3654, 3666, + 3678, 3690, 3702, 3714, 3726, 3738, 3750, 3762, + 3774, 3786, 3798, 3810, 3822, 3834, 3846, 3858, + 3870, 3882, 3894, 3906, 3918, 3930, 3942, 3954, + 3966, 3978, 3990, 4002, 4014, 4026, 4038, 4050, + 4062, 4074, 4086, 4098, 4110, 4122, 4134, 4146, + 4158, 4170, 4182, 4194, 4206, 4218, 4230, 4242, + 4254, 4266, 4278, 4290, 4302, 4314, 4326, 4338, + 4350, 4362, 4374, 4386, 4398, 4410, 4422, 4434, + 4446, 4458, 4470, 4482, 4494, 4506, 4518, 4530, + 4542, 4554, 4566, 4578, 4590, 4602, 4614, 4626, + 4638, 4650, 4662, 4674, 4686, 4698, 4710, 4722, + 4734, 4746, 4758, 4770, 4782, 4794, 4806, 4818, + 4830, 4842, 4854, 4866, 4878, 4890, 4902, 4914, + 4926, 4938, 4950, 4962, 4974, 4986, 4998, 5010, + 5022, 5034, 5046, 5058, 5070, 5082, 5094, 5106, + 5118, 5130, 5142, 5154, 5166, 5178, 5190, 5202, + 5214, 5226, 5238, 5250, 5262, 5274, 5286, 5298, + 5310, 5322, 5334, 5346, 5358, 5370, 5382, 5394, + 5406, 5418, 5430, 5442, 5454, 5466, 5478, 5490, + 5502, 5514, 5526, 5538, 5550, 5562, 5574, 5586, + 5598, 5610, 5622, 5634, 5646, 5658, 5670, 5682, + 5694, 5706, 5718, 5730, 5742, 5754, 5766, 5778, + 5790, 5802, 5814, 5838, 5850, 5862, 5874, 5886, + 5898, 5910, 5922, 5934, 5946, 5958, 5970, 5982, + 5994, 6006, 6018, 6030, 6042, 6054, 6066, 6078, + 6090, 6102, 6114, 6126, 6138, 6150, 6162, 6174, + 6186, 6198, 6210, 6222, 6234, 6246, 6258, 6270, + 6282, 6294, 6306, 6318, 6330, 6342, 6354, 6366, + 6378, 6390, 6402, 6414, 6426, 6438, 6450, 6462, + 6474, 6486, 6498, 6510, 6522, 6534, 6546, 6558, + 6570, 6582, 6594, 6606, 6618, 6630, 6642, 6654, + 6666, 6678, 6690, 6702, 6714, 6726, 6738, 6750, + 6762, 6774, 6786, 6798, 6810, 6822, 6834, 6846, + 6858, 6870, 6882, 6894, 6906, 6918, 6930, 6942, + 6954, 6966, 6978, 6990, 7002, 7014, 7026, 7038, + 7050, 7062, 7074, 7086, 7098, 7110, 7122, 7134, + 7146, 7158, 7170, 7182, 7194, 7206, 7218, 7230, + 7242, 7254, 7266, 7278, 7290, 7302, 7314, 7326, + 7338, 7350, 7362, 7374, 7386, 7398, 7410, 7422, + 7434, 7446, 7458, 7470, 7482, 7494, 7506, 7518, + 7530, 7542, 7554, 7566, 7578, 7590, 7602, 7614, + 7626, 7638, 7650, 7662, 7674, 7686, 7698, 7710, + 7722, 7734, 7746, 7758, 7770, 7782, 7794, 7806, + 7818, 7830, 7842, 7854, 7866, 7878, 7890, 7902, + 7914, 7926, 7938, 7950, 7962, 7974, 7986, 7998, + 8010, 8022, 8034, 8046, 8058, 8070, 8082, 8094, + 8106, 8118, 8130, 8142, 8154, 8166, 8178, 8190, + 8202, 8214, 8226, 8238, 8250, 8262, 8274, 8286, + 8298, 8310, 8334, 8346, 8358, 8370, 8382, 8394, + 8406, 8418, 8430, 8442, 8454, 8466, 8478, 8490, + 8502, 8514, 8526, 8538, 8550, 8562, 8574, 8586, + 8598, 8610, 8622, 8634, 8646, 8658, 8670, 8682, + 8694, 8706, 8718, 8730, 8742, 8754, 8766, 8778, + 8790, 8802, 8814, 8826, 8838, 8850, 8862, 8874, + 8886, 8898, 8910, 8922, 8934, 8946, 8958, 8970, + 8982, 8994, 9006, 9018, 9030, 9042, 9054, 9066, + 9078, 9090, 9102, 9114, 9126, 9138, 9150, 9162, + 9174, 9186, 9198, 9210, 9222, 9234, 9246, 9258, + 9270, 9282, 9294, 9306, 9318, 9330, 9342, 9354, + 9366, 9378, 9390, 9402, 9414, 9426, 9438, 9450, + 9462, 9474, 9486, 9498, 9510, 9522, 9534, 9546, + 9558, 9570, 9582, 9594, 9606, 9618, 9630, 9642, + 9654, 9666, 9678, 9690, 9702, 9714, 9726, 9738, + 9750, 9762, 9774, 9786, 9798, 9810, 9822, 9834, + 9846, 9858, 9870, 9882, 9894, 9906, 9918, 9930, + 9942, 9954, 9966, 9978, }, + /* 3 */ + {7, 19, 31, 43, 55, 67, 79, 91, + 103, 115, 127, 139, 151, 163, 175, 187, + 199, 211, 223, 235, 247, 259, 271, 283, + 295, 307, 319, 331, 343, 355, 367, 379, + 391, 403, 415, 427, 439, 451, 463, 475, + 487, 499, 511, 523, 535, 547, 559, 571, + 583, 595, 607, 619, 631, 643, 655, 667, + 679, 691, 703, 715, 727, 739, 751, 763, + 775, 787, 799, 811, 823, 847, 859, 871, + 883, 895, 907, 919, 931, 943, 955, 967, + 979, 991, 1003, 1015, 1027, 1039, 1051, 1063, + 1075, 1087, 1099, 1111, 1123, 1135, 1147, 1159, + 1171, 1183, 1195, 1207, 1219, 1231, 1243, 1255, + 1267, 1279, 1291, 1303, 1315, 1327, 1339, 1351, + 1363, 1375, 1387, 1399, 1411, 1423, 1435, 1447, + 1459, 1471, 1483, 1495, 1507, 1519, 1531, 1543, + 1555, 1567, 1579, 1591, 1603, 1615, 1627, 1639, + 1651, 1663, 1675, 1687, 1699, 1711, 1723, 1735, + 1747, 1759, 1771, 1783, 1795, 1807, 1819, 1831, + 1843, 1855, 1867, 1879, 1891, 1903, 1915, 1927, + 1939, 1951, 1963, 1975, 1987, 1999, 2011, 2023, + 2035, 2047, 2059, 2071, 2083, 2095, 2107, 2119, + 2131, 2143, 2155, 2167, 2179, 2191, 2203, 2215, + 2227, 2239, 2251, 2263, 2275, 2287, 2299, 2311, + 2323, 2335, 2347, 2359, 2371, 2383, 2395, 2407, + 2419, 2431, 2443, 2455, 2467, 2479, 2491, 2503, + 2515, 2527, 2539, 2551, 2563, 2575, 2587, 2599, + 2611, 2623, 2635, 2647, 2659, 2671, 2683, 2695, + 2707, 2719, 2731, 2743, 2755, 2767, 2779, 2791, + 2803, 2815, 2827, 2839, 2851, 2863, 2875, 2887, + 2899, 2911, 2923, 2935, 2947, 2959, 2971, 2983, + 2995, 3007, 3019, 3031, 3043, 3055, 3067, 3079, + 3091, 3103, 3115, 3127, 3139, 3151, 3163, 3175, + 3187, 3199, 3211, 3223, 3235, 3247, 3259, 3271, + 3283, 3295, 3307, 3319, 3343, 3355, 3367, 3379, + 3391, 3403, 3415, 3427, 3439, 3451, 3463, 3475, + 3487, 3499, 3511, 3523, 3535, 3547, 3559, 3571, + 3583, 3595, 3607, 3619, 3631, 3643, 3655, 3667, + 3679, 3691, 3703, 3715, 3727, 3739, 3751, 3763, + 3775, 3787, 3799, 3811, 3823, 3835, 3847, 3859, + 3871, 3883, 3895, 3907, 3919, 3931, 3943, 3955, + 3967, 3979, 3991, 4003, 4015, 4027, 4039, 4051, + 4063, 4075, 4087, 4099, 4111, 4123, 4135, 4147, + 4159, 4171, 4183, 4195, 4207, 4219, 4231, 4243, + 4255, 4267, 4279, 4291, 4303, 4315, 4327, 4339, + 4351, 4363, 4375, 4387, 4399, 4411, 4423, 4435, + 4447, 4459, 4471, 4483, 4495, 4507, 4519, 4531, + 4543, 4555, 4567, 4579, 4591, 4603, 4615, 4627, + 4639, 4651, 4663, 4675, 4687, 4699, 4711, 4723, + 4735, 4747, 4759, 4771, 4783, 4795, 4807, 4819, + 4831, 4843, 4855, 4867, 4879, 4891, 4903, 4915, + 4927, 4939, 4951, 4963, 4975, 4987, 4999, 5011, + 5023, 5035, 5047, 5059, 5071, 5083, 5095, 5107, + 5119, 5131, 5143, 5155, 5167, 5179, 5191, 5203, + 5215, 5227, 5239, 5251, 5263, 5275, 5287, 5299, + 5311, 5323, 5335, 5347, 5359, 5371, 5383, 5395, + 5407, 5419, 5431, 5443, 5455, 5467, 5479, 5491, + 5503, 5515, 5527, 5539, 5551, 5563, 5575, 5587, + 5599, 5611, 5623, 5635, 5647, 5659, 5671, 5683, + 5695, 5707, 5719, 5731, 5743, 5755, 5767, 5779, + 5791, 5803, 5815, 5839, 5851, 5863, 5875, 5887, + 5899, 5911, 5923, 5935, 5947, 5959, 5971, 5983, + 5995, 6007, 6019, 6031, 6043, 6055, 6067, 6079, + 6091, 6103, 6115, 6127, 6139, 6151, 6163, 6175, + 6187, 6199, 6211, 6223, 6235, 6247, 6259, 6271, + 6283, 6295, 6307, 6319, 6331, 6343, 6355, 6367, + 6379, 6391, 6403, 6415, 6427, 6439, 6451, 6463, + 6475, 6487, 6499, 6511, 6523, 6535, 6547, 6559, + 6571, 6583, 6595, 6607, 6619, 6631, 6643, 6655, + 6667, 6679, 6691, 6703, 6715, 6727, 6739, 6751, + 6763, 6775, 6787, 6799, 6811, 6823, 6835, 6847, + 6859, 6871, 6883, 6895, 6907, 6919, 6931, 6943, + 6955, 6967, 6979, 6991, 7003, 7015, 7027, 7039, + 7051, 7063, 7075, 7087, 7099, 7111, 7123, 7135, + 7147, 7159, 7171, 7183, 7195, 7207, 7219, 7231, + 7243, 7255, 7267, 7279, 7291, 7303, 7315, 7327, + 7339, 7351, 7363, 7375, 7387, 7399, 7411, 7423, + 7435, 7447, 7459, 7471, 7483, 7495, 7507, 7519, + 7531, 7543, 7555, 7567, 7579, 7591, 7603, 7615, + 7627, 7639, 7651, 7663, 7675, 7687, 7699, 7711, + 7723, 7735, 7747, 7759, 7771, 7783, 7795, 7807, + 7819, 7831, 7843, 7855, 7867, 7879, 7891, 7903, + 7915, 7927, 7939, 7951, 7963, 7975, 7987, 7999, + 8011, 8023, 8035, 8047, 8059, 8071, 8083, 8095, + 8107, 8119, 8131, 8143, 8155, 8167, 8179, 8191, + 8203, 8215, 8227, 8239, 8251, 8263, 8275, 8287, + 8299, 8311, 8335, 8347, 8359, 8371, 8383, 8395, + 8407, 8419, 8431, 8443, 8455, 8467, 8479, 8491, + 8503, 8515, 8527, 8539, 8551, 8563, 8575, 8587, + 8599, 8611, 8623, 8635, 8647, 8659, 8671, 8683, + 8695, 8707, 8719, 8731, 8743, 8755, 8767, 8779, + 8791, 8803, 8815, 8827, 8839, 8851, 8863, 8875, + 8887, 8899, 8911, 8923, 8935, 8947, 8959, 8971, + 8983, 8995, 9007, 9019, 9031, 9043, 9055, 9067, + 9079, 9091, 9103, 9115, 9127, 9139, 9151, 9163, + 9175, 9187, 9199, 9211, 9223, 9235, 9247, 9259, + 9271, 9283, 9295, 9307, 9319, 9331, 9343, 9355, + 9367, 9379, 9391, 9403, 9415, 9427, 9439, 9451, + 9463, 9475, 9487, 9499, 9511, 9523, 9535, 9547, + 9559, 9571, 9583, 9595, 9607, 9619, 9631, 9643, + 9655, 9667, 9679, 9691, 9703, 9715, 9727, 9739, + 9751, 9763, 9775, 9787, 9799, 9811, 9823, 9835, + 9847, 9859, 9871, 9883, 9895, 9907, 9919, 9931, + 9943, 9955, 9967, 9979, }, + /* 4 */ + {8, 20, 32, 44, 56, 68, 80, 92, + 104, 116, 128, 140, 152, 164, 176, 188, + 200, 212, 224, 236, 248, 260, 272, 284, + 296, 308, 320, 332, 344, 356, 368, 380, + 392, 404, 416, 428, 440, 452, 464, 476, + 488, 500, 512, 524, 536, 548, 560, 572, + 584, 596, 608, 620, 632, 644, 656, 668, + 680, 692, 704, 716, 728, 740, 752, 764, + 776, 788, 800, 812, 824, 836, 848, 860, + 872, 884, 896, 908, 920, 932, 944, 956, + 968, 980, 992, 1004, 1016, 1028, 1040, 1052, + 1064, 1076, 1088, 1100, 1112, 1124, 1136, 1148, + 1160, 1172, 1184, 1196, 1208, 1220, 1232, 1244, + 1256, 1268, 1280, 1292, 1304, 1316, 1328, 1340, + 1352, 1364, 1376, 1388, 1400, 1412, 1424, 1436, + 1448, 1460, 1472, 1484, 1496, 1508, 1520, 1532, + 1544, 1556, 1568, 1580, 1592, 1604, 1616, 1628, + 1640, 1652, 1676, 1688, 1700, 1712, 1724, 1736, + 1748, 1760, 1772, 1784, 1796, 1808, 1820, 1832, + 1844, 1856, 1868, 1880, 1892, 1904, 1916, 1928, + 1940, 1952, 1964, 1976, 1988, 2000, 2012, 2024, + 2036, 2048, 2060, 2072, 2084, 2096, 2108, 2120, + 2132, 2144, 2156, 2168, 2180, 2192, 2204, 2216, + 2228, 2240, 2252, 2264, 2276, 2288, 2300, 2312, + 2324, 2336, 2348, 2360, 2372, 2384, 2396, 2408, + 2420, 2432, 2444, 2456, 2468, 2480, 2492, 2504, + 2516, 2528, 2540, 2552, 2564, 2576, 2588, 2600, + 2612, 2624, 2636, 2648, 2660, 2672, 2684, 2696, + 2708, 2720, 2732, 2744, 2756, 2768, 2780, 2792, + 2804, 2816, 2828, 2840, 2852, 2864, 2876, 2888, + 2900, 2912, 2924, 2936, 2948, 2960, 2972, 2984, + 2996, 3008, 3020, 3032, 3044, 3056, 3068, 3080, + 3092, 3104, 3116, 3128, 3140, 3152, 3164, 3176, + 3188, 3200, 3212, 3224, 3236, 3248, 3260, 3272, + 3284, 3296, 3308, 3320, 3332, 3344, 3356, 3368, + 3380, 3392, 3404, 3416, 3428, 3440, 3452, 3464, + 3476, 3488, 3500, 3512, 3524, 3536, 3548, 3560, + 3572, 3584, 3596, 3608, 3620, 3632, 3644, 3656, + 3668, 3680, 3692, 3704, 3716, 3728, 3740, 3752, + 3764, 3776, 3788, 3800, 3812, 3824, 3836, 3848, + 3860, 3872, 3884, 3896, 3908, 3920, 3932, 3944, + 3956, 3968, 3980, 3992, 4004, 4016, 4028, 4040, + 4052, 4064, 4076, 4088, 4100, 4112, 4124, 4136, + 4148, 4172, 4184, 4196, 4208, 4220, 4232, 4244, + 4256, 4268, 4280, 4292, 4304, 4316, 4328, 4340, + 4352, 4364, 4376, 4388, 4400, 4412, 4424, 4436, + 4448, 4460, 4472, 4484, 4496, 4508, 4520, 4532, + 4544, 4556, 4568, 4580, 4592, 4604, 4616, 4628, + 4640, 4652, 4664, 4676, 4688, 4700, 4712, 4724, + 4736, 4748, 4760, 4772, 4784, 4796, 4808, 4820, + 4832, 4844, 4856, 4868, 4880, 4892, 4904, 4916, + 4928, 4940, 4952, 4964, 4976, 4988, 5000, 5012, + 5024, 5036, 5048, 5060, 5072, 5084, 5096, 5108, + 5120, 5132, 5144, 5156, 5168, 5180, 5192, 5204, + 5216, 5228, 5240, 5252, 5264, 5276, 5288, 5300, + 5312, 5324, 5336, 5348, 5360, 5372, 5384, 5396, + 5408, 5420, 5432, 5444, 5456, 5468, 5480, 5492, + 5504, 5516, 5528, 5540, 5552, 5564, 5576, 5588, + 5600, 5612, 5624, 5636, 5648, 5660, 5672, 5684, + 5696, 5708, 5720, 5732, 5744, 5756, 5768, 5780, + 5792, 5804, 5816, 5828, 5840, 5852, 5864, 5876, + 5888, 5900, 5912, 5924, 5936, 5948, 5960, 5972, + 5984, 5996, 6008, 6020, 6032, 6044, 6056, 6068, + 6080, 6092, 6104, 6116, 6128, 6140, 6152, 6164, + 6176, 6188, 6200, 6212, 6224, 6236, 6248, 6260, + 6272, 6284, 6296, 6308, 6320, 6332, 6344, 6356, + 6368, 6380, 6392, 6404, 6416, 6428, 6440, 6452, + 6464, 6476, 6488, 6500, 6512, 6524, 6536, 6548, + 6560, 6572, 6584, 6596, 6608, 6620, 6632, 6644, + 6668, 6680, 6692, 6704, 6716, 6728, 6740, 6752, + 6764, 6776, 6788, 6800, 6812, 6824, 6836, 6848, + 6860, 6872, 6884, 6896, 6908, 6920, 6932, 6944, + 6956, 6968, 6980, 6992, 7004, 7016, 7028, 7040, + 7052, 7064, 7076, 7088, 7100, 7112, 7124, 7136, + 7148, 7160, 7172, 7184, 7196, 7208, 7220, 7232, + 7244, 7256, 7268, 7280, 7292, 7304, 7316, 7328, + 7340, 7352, 7364, 7376, 7388, 7400, 7412, 7424, + 7436, 7448, 7460, 7472, 7484, 7496, 7508, 7520, + 7532, 7544, 7556, 7568, 7580, 7592, 7604, 7616, + 7628, 7640, 7652, 7664, 7676, 7688, 7700, 7712, + 7724, 7736, 7748, 7760, 7772, 7784, 7796, 7808, + 7820, 7832, 7844, 7856, 7868, 7880, 7892, 7904, + 7916, 7928, 7940, 7952, 7964, 7976, 7988, 8000, + 8012, 8024, 8036, 8048, 8060, 8072, 8084, 8096, + 8108, 8120, 8132, 8144, 8156, 8168, 8180, 8192, + 8204, 8216, 8228, 8240, 8252, 8264, 8276, 8288, + 8300, 8312, 8324, 8336, 8348, 8360, 8372, 8384, + 8396, 8408, 8420, 8432, 8444, 8456, 8468, 8480, + 8492, 8504, 8516, 8528, 8540, 8552, 8564, 8576, + 8588, 8600, 8612, 8624, 8636, 8648, 8660, 8672, + 8684, 8696, 8708, 8720, 8732, 8744, 8756, 8768, + 8780, 8792, 8804, 8816, 8828, 8840, 8852, 8864, + 8876, 8888, 8900, 8912, 8924, 8936, 8948, 8960, + 8972, 8984, 8996, 9008, 9020, 9032, 9044, 9056, + 9068, 9080, 9092, 9104, 9116, 9128, 9140, 9164, + 9176, 9188, 9200, 9212, 9224, 9236, 9248, 9260, + 9272, 9284, 9296, 9308, 9320, 9332, 9344, 9356, + 9368, 9380, 9392, 9404, 9416, 9428, 9440, 9452, + 9464, 9476, 9488, 9500, 9512, 9524, 9536, 9548, + 9560, 9572, 9584, 9596, 9608, 9620, 9632, 9644, + 9656, 9668, 9680, 9692, 9704, 9716, 9728, 9740, + 9752, 9764, 9776, 9788, 9800, 9812, 9824, 9836, + 9848, 9860, 9872, 9884, 9896, 9908, 9920, 9932, + 9944, 9956, 9968, 9980, }, + /* 5 */ + {9, 21, 33, 45, 57, 69, 81, 93, + 105, 117, 129, 141, 153, 165, 177, 189, + 201, 213, 225, 237, 249, 261, 273, 285, + 297, 309, 321, 333, 345, 357, 369, 381, + 393, 405, 417, 429, 441, 453, 465, 477, + 489, 501, 513, 525, 537, 549, 561, 573, + 585, 597, 609, 621, 633, 645, 657, 669, + 681, 693, 705, 717, 729, 741, 753, 765, + 777, 789, 801, 813, 825, 837, 849, 861, + 873, 885, 897, 909, 921, 933, 945, 957, + 969, 981, 993, 1005, 1017, 1029, 1041, 1053, + 1065, 1077, 1089, 1101, 1113, 1125, 1137, 1149, + 1161, 1173, 1185, 1197, 1209, 1221, 1233, 1245, + 1257, 1269, 1281, 1293, 1305, 1317, 1329, 1341, + 1353, 1365, 1377, 1389, 1401, 1413, 1425, 1437, + 1449, 1461, 1473, 1485, 1497, 1509, 1521, 1533, + 1545, 1557, 1569, 1581, 1593, 1605, 1617, 1629, + 1641, 1653, 1677, 1689, 1701, 1713, 1725, 1737, + 1749, 1761, 1773, 1785, 1797, 1809, 1821, 1833, + 1845, 1857, 1869, 1881, 1893, 1905, 1917, 1929, + 1941, 1953, 1965, 1977, 1989, 2001, 2013, 2025, + 2037, 2049, 2061, 2073, 2085, 2097, 2109, 2121, + 2133, 2145, 2157, 2169, 2181, 2193, 2205, 2217, + 2229, 2241, 2253, 2265, 2277, 2289, 2301, 2313, + 2325, 2337, 2349, 2361, 2373, 2385, 2397, 2409, + 2421, 2433, 2445, 2457, 2469, 2481, 2493, 2505, + 2517, 2529, 2541, 2553, 2565, 2577, 2589, 2601, + 2613, 2625, 2637, 2649, 2661, 2673, 2685, 2697, + 2709, 2721, 2733, 2745, 2757, 2769, 2781, 2793, + 2805, 2817, 2829, 2841, 2853, 2865, 2877, 2889, + 2901, 2913, 2925, 2937, 2949, 2961, 2973, 2985, + 2997, 3009, 3021, 3033, 3045, 3057, 3069, 3081, + 3093, 3105, 3117, 3129, 3141, 3153, 3165, 3177, + 3189, 3201, 3213, 3225, 3237, 3249, 3261, 3273, + 3285, 3297, 3309, 3321, 3333, 3345, 3357, 3369, + 3381, 3393, 3405, 3417, 3429, 3441, 3453, 3465, + 3477, 3489, 3501, 3513, 3525, 3537, 3549, 3561, + 3573, 3585, 3597, 3609, 3621, 3633, 3645, 3657, + 3669, 3681, 3693, 3705, 3717, 3729, 3741, 3753, + 3765, 3777, 3789, 3801, 3813, 3825, 3837, 3849, + 3861, 3873, 3885, 3897, 3909, 3921, 3933, 3945, + 3957, 3969, 3981, 3993, 4005, 4017, 4029, 4041, + 4053, 4065, 4077, 4089, 4101, 4113, 4125, 4137, + 4149, 4173, 4185, 4197, 4209, 4221, 4233, 4245, + 4257, 4269, 4281, 4293, 4305, 4317, 4329, 4341, + 4353, 4365, 4377, 4389, 4401, 4413, 4425, 4437, + 4449, 4461, 4473, 4485, 4497, 4509, 4521, 4533, + 4545, 4557, 4569, 4581, 4593, 4605, 4617, 4629, + 4641, 4653, 4665, 4677, 4689, 4701, 4713, 4725, + 4737, 4749, 4761, 4773, 4785, 4797, 4809, 4821, + 4833, 4845, 4857, 4869, 4881, 4893, 4905, 4917, + 4929, 4941, 4953, 4965, 4977, 4989, 5001, 5013, + 5025, 5037, 5049, 5061, 5073, 5085, 5097, 5109, + 5121, 5133, 5145, 5157, 5169, 5181, 5193, 5205, + 5217, 5229, 5241, 5253, 5265, 5277, 5289, 5301, + 5313, 5325, 5337, 5349, 5361, 5373, 5385, 5397, + 5409, 5421, 5433, 5445, 5457, 5469, 5481, 5493, + 5505, 5517, 5529, 5541, 5553, 5565, 5577, 5589, + 5601, 5613, 5625, 5637, 5649, 5661, 5673, 5685, + 5697, 5709, 5721, 5733, 5745, 5757, 5769, 5781, + 5793, 5805, 5817, 5829, 5841, 5853, 5865, 5877, + 5889, 5901, 5913, 5925, 5937, 5949, 5961, 5973, + 5985, 5997, 6009, 6021, 6033, 6045, 6057, 6069, + 6081, 6093, 6105, 6117, 6129, 6141, 6153, 6165, + 6177, 6189, 6201, 6213, 6225, 6237, 6249, 6261, + 6273, 6285, 6297, 6309, 6321, 6333, 6345, 6357, + 6369, 6381, 6393, 6405, 6417, 6429, 6441, 6453, + 6465, 6477, 6489, 6501, 6513, 6525, 6537, 6549, + 6561, 6573, 6585, 6597, 6609, 6621, 6633, 6645, + 6669, 6681, 6693, 6705, 6717, 6729, 6741, 6753, + 6765, 6777, 6789, 6801, 6813, 6825, 6837, 6849, + 6861, 6873, 6885, 6897, 6909, 6921, 6933, 6945, + 6957, 6969, 6981, 6993, 7005, 7017, 7029, 7041, + 7053, 7065, 7077, 7089, 7101, 7113, 7125, 7137, + 7149, 7161, 7173, 7185, 7197, 7209, 7221, 7233, + 7245, 7257, 7269, 7281, 7293, 7305, 7317, 7329, + 7341, 7353, 7365, 7377, 7389, 7401, 7413, 7425, + 7437, 7449, 7461, 7473, 7485, 7497, 7509, 7521, + 7533, 7545, 7557, 7569, 7581, 7593, 7605, 7617, + 7629, 7641, 7653, 7665, 7677, 7689, 7701, 7713, + 7725, 7737, 7749, 7761, 7773, 7785, 7797, 7809, + 7821, 7833, 7845, 7857, 7869, 7881, 7893, 7905, + 7917, 7929, 7941, 7953, 7965, 7977, 7989, 8001, + 8013, 8025, 8037, 8049, 8061, 8073, 8085, 8097, + 8109, 8121, 8133, 8145, 8157, 8169, 8181, 8193, + 8205, 8217, 8229, 8241, 8253, 8265, 8277, 8289, + 8301, 8313, 8325, 8337, 8349, 8361, 8373, 8385, + 8397, 8409, 8421, 8433, 8445, 8457, 8469, 8481, + 8493, 8505, 8517, 8529, 8541, 8553, 8565, 8577, + 8589, 8601, 8613, 8625, 8637, 8649, 8661, 8673, + 8685, 8697, 8709, 8721, 8733, 8745, 8757, 8769, + 8781, 8793, 8805, 8817, 8829, 8841, 8853, 8865, + 8877, 8889, 8901, 8913, 8925, 8937, 8949, 8961, + 8973, 8985, 8997, 9009, 9021, 9033, 9045, 9057, + 9069, 9081, 9093, 9105, 9117, 9129, 9141, 9165, + 9177, 9189, 9201, 9213, 9225, 9237, 9249, 9261, + 9273, 9285, 9297, 9309, 9321, 9333, 9345, 9357, + 9369, 9381, 9393, 9405, 9417, 9429, 9441, 9453, + 9465, 9477, 9489, 9501, 9513, 9525, 9537, 9549, + 9561, 9573, 9585, 9597, 9609, 9621, 9633, 9645, + 9657, 9669, 9681, 9693, 9705, 9717, 9729, 9741, + 9753, 9765, 9777, 9789, 9801, 9813, 9825, 9837, + 9849, 9861, 9873, 9885, 9897, 9909, 9921, 9933, + 9945, 9957, 9969, 9981, }, + /* 6 */ + {10, 22, 34, 46, 58, 70, 82, 94, + 106, 118, 130, 142, 154, 166, 178, 190, + 202, 214, 226, 238, 250, 262, 274, 286, + 298, 310, 322, 334, 346, 358, 370, 382, + 394, 406, 418, 430, 442, 454, 466, 478, + 490, 502, 514, 526, 538, 550, 562, 574, + 586, 598, 610, 622, 634, 646, 658, 670, + 682, 694, 706, 718, 730, 742, 754, 766, + 778, 790, 802, 814, 826, 838, 850, 862, + 874, 886, 898, 910, 922, 934, 946, 958, + 970, 982, 994, 1006, 1018, 1030, 1042, 1054, + 1066, 1078, 1090, 1102, 1114, 1126, 1138, 1150, + 1162, 1174, 1186, 1198, 1210, 1222, 1234, 1246, + 1258, 1270, 1282, 1294, 1306, 1318, 1330, 1342, + 1354, 1366, 1378, 1390, 1402, 1414, 1426, 1438, + 1450, 1462, 1474, 1486, 1498, 1510, 1522, 1534, + 1546, 1558, 1570, 1582, 1594, 1606, 1618, 1630, + 1642, 1654, 1678, 1690, 1702, 1714, 1726, 1738, + 1750, 1762, 1774, 1786, 1798, 1810, 1822, 1834, + 1846, 1858, 1870, 1882, 1894, 1906, 1918, 1930, + 1942, 1954, 1966, 1978, 1990, 2002, 2014, 2026, + 2038, 2050, 2062, 2074, 2086, 2098, 2110, 2122, + 2134, 2146, 2158, 2170, 2182, 2194, 2206, 2218, + 2230, 2242, 2254, 2266, 2278, 2290, 2302, 2314, + 2326, 2338, 2350, 2362, 2374, 2386, 2398, 2410, + 2422, 2434, 2446, 2458, 2470, 2482, 2494, 2506, + 2518, 2530, 2542, 2554, 2566, 2578, 2590, 2602, + 2614, 2626, 2638, 2650, 2662, 2674, 2686, 2698, + 2710, 2722, 2734, 2746, 2758, 2770, 2782, 2794, + 2806, 2818, 2830, 2842, 2854, 2866, 2878, 2890, + 2902, 2914, 2926, 2938, 2950, 2962, 2974, 2986, + 2998, 3010, 3022, 3034, 3046, 3058, 3070, 3082, + 3094, 3106, 3118, 3130, 3142, 3154, 3166, 3178, + 3190, 3202, 3214, 3226, 3238, 3250, 3262, 3274, + 3286, 3298, 3310, 3322, 3334, 3346, 3358, 3370, + 3382, 3394, 3406, 3418, 3430, 3442, 3454, 3466, + 3478, 3490, 3502, 3514, 3526, 3538, 3550, 3562, + 3574, 3586, 3598, 3610, 3622, 3634, 3646, 3658, + 3670, 3682, 3694, 3706, 3718, 3730, 3742, 3754, + 3766, 3778, 3790, 3802, 3814, 3826, 3838, 3850, + 3862, 3874, 3886, 3898, 3910, 3922, 3934, 3946, + 3958, 3970, 3982, 3994, 4006, 4018, 4030, 4042, + 4054, 4066, 4078, 4090, 4102, 4114, 4126, 4138, + 4150, 4174, 4186, 4198, 4210, 4222, 4234, 4246, + 4258, 4270, 4282, 4294, 4306, 4318, 4330, 4342, + 4354, 4366, 4378, 4390, 4402, 4414, 4426, 4438, + 4450, 4462, 4474, 4486, 4498, 4510, 4522, 4534, + 4546, 4558, 4570, 4582, 4594, 4606, 4618, 4630, + 4642, 4654, 4666, 4678, 4690, 4702, 4714, 4726, + 4738, 4750, 4762, 4774, 4786, 4798, 4810, 4822, + 4834, 4846, 4858, 4870, 4882, 4894, 4906, 4918, + 4930, 4942, 4954, 4966, 4978, 4990, 5002, 5014, + 5026, 5038, 5050, 5062, 5074, 5086, 5098, 5110, + 5122, 5134, 5146, 5158, 5170, 5182, 5194, 5206, + 5218, 5230, 5242, 5254, 5266, 5278, 5290, 5302, + 5314, 5326, 5338, 5350, 5362, 5374, 5386, 5398, + 5410, 5422, 5434, 5446, 5458, 5470, 5482, 5494, + 5506, 5518, 5530, 5542, 5554, 5566, 5578, 5590, + 5602, 5614, 5626, 5638, 5650, 5662, 5674, 5686, + 5698, 5710, 5722, 5734, 5746, 5758, 5770, 5782, + 5794, 5806, 5818, 5830, 5842, 5854, 5866, 5878, + 5890, 5902, 5914, 5926, 5938, 5950, 5962, 5974, + 5986, 5998, 6010, 6022, 6034, 6046, 6058, 6070, + 6082, 6094, 6106, 6118, 6130, 6142, 6154, 6166, + 6178, 6190, 6202, 6214, 6226, 6238, 6250, 6262, + 6274, 6286, 6298, 6310, 6322, 6334, 6346, 6358, + 6370, 6382, 6394, 6406, 6418, 6430, 6442, 6454, + 6466, 6478, 6490, 6502, 6514, 6526, 6538, 6550, + 6562, 6574, 6586, 6598, 6610, 6622, 6634, 6646, + 6670, 6682, 6694, 6706, 6718, 6730, 6742, 6754, + 6766, 6778, 6790, 6802, 6814, 6826, 6838, 6850, + 6862, 6874, 6886, 6898, 6910, 6922, 6934, 6946, + 6958, 6970, 6982, 6994, 7006, 7018, 7030, 7042, + 7054, 7066, 7078, 7090, 7102, 7114, 7126, 7138, + 7150, 7162, 7174, 7186, 7198, 7210, 7222, 7234, + 7246, 7258, 7270, 7282, 7294, 7306, 7318, 7330, + 7342, 7354, 7366, 7378, 7390, 7402, 7414, 7426, + 7438, 7450, 7462, 7474, 7486, 7498, 7510, 7522, + 7534, 7546, 7558, 7570, 7582, 7594, 7606, 7618, + 7630, 7642, 7654, 7666, 7678, 7690, 7702, 7714, + 7726, 7738, 7750, 7762, 7774, 7786, 7798, 7810, + 7822, 7834, 7846, 7858, 7870, 7882, 7894, 7906, + 7918, 7930, 7942, 7954, 7966, 7978, 7990, 8002, + 8014, 8026, 8038, 8050, 8062, 8074, 8086, 8098, + 8110, 8122, 8134, 8146, 8158, 8170, 8182, 8194, + 8206, 8218, 8230, 8242, 8254, 8266, 8278, 8290, + 8302, 8314, 8326, 8338, 8350, 8362, 8374, 8386, + 8398, 8410, 8422, 8434, 8446, 8458, 8470, 8482, + 8494, 8506, 8518, 8530, 8542, 8554, 8566, 8578, + 8590, 8602, 8614, 8626, 8638, 8650, 8662, 8674, + 8686, 8698, 8710, 8722, 8734, 8746, 8758, 8770, + 8782, 8794, 8806, 8818, 8830, 8842, 8854, 8866, + 8878, 8890, 8902, 8914, 8926, 8938, 8950, 8962, + 8974, 8986, 8998, 9010, 9022, 9034, 9046, 9058, + 9070, 9082, 9094, 9106, 9118, 9130, 9142, 9166, + 9178, 9190, 9202, 9214, 9226, 9238, 9250, 9262, + 9274, 9286, 9298, 9310, 9322, 9334, 9346, 9358, + 9370, 9382, 9394, 9406, 9418, 9430, 9442, 9454, + 9466, 9478, 9490, 9502, 9514, 9526, 9538, 9550, + 9562, 9574, 9586, 9598, 9610, 9622, 9634, 9646, + 9658, 9670, 9682, 9694, 9706, 9718, 9730, 9742, + 9754, 9766, 9778, 9790, 9802, 9814, 9826, 9838, + 9850, 9862, 9874, 9886, 9898, 9910, 9922, 9934, + 9946, 9958, 9970, 9982, }, + /* 7 */ + {11, 23, 35, 47, 59, 71, 83, 95, + 107, 119, 131, 143, 155, 167, 179, 191, + 203, 215, 227, 239, 251, 263, 275, 287, + 299, 311, 323, 335, 347, 359, 371, 383, + 395, 407, 419, 431, 443, 455, 467, 479, + 491, 503, 515, 527, 539, 551, 563, 575, + 587, 599, 611, 623, 635, 647, 659, 671, + 683, 695, 707, 719, 731, 743, 755, 767, + 779, 791, 803, 815, 827, 839, 851, 863, + 875, 887, 899, 911, 923, 935, 947, 959, + 971, 983, 995, 1007, 1019, 1031, 1043, 1055, + 1067, 1079, 1091, 1103, 1115, 1127, 1139, 1151, + 1163, 1175, 1187, 1199, 1211, 1223, 1235, 1247, + 1259, 1271, 1283, 1295, 1307, 1319, 1331, 1343, + 1355, 1367, 1379, 1391, 1403, 1415, 1427, 1439, + 1451, 1463, 1475, 1487, 1499, 1511, 1523, 1535, + 1547, 1559, 1571, 1583, 1595, 1607, 1619, 1631, + 1643, 1655, 1679, 1691, 1703, 1715, 1727, 1739, + 1751, 1763, 1775, 1787, 1799, 1811, 1823, 1835, + 1847, 1859, 1871, 1883, 1895, 1907, 1919, 1931, + 1943, 1955, 1967, 1979, 1991, 2003, 2015, 2027, + 2039, 2051, 2063, 2075, 2087, 2099, 2111, 2123, + 2135, 2147, 2159, 2171, 2183, 2195, 2207, 2219, + 2231, 2243, 2255, 2267, 2279, 2291, 2303, 2315, + 2327, 2339, 2351, 2363, 2375, 2387, 2399, 2411, + 2423, 2435, 2447, 2459, 2471, 2483, 2495, 2507, + 2519, 2531, 2543, 2555, 2567, 2579, 2591, 2603, + 2615, 2627, 2639, 2651, 2663, 2675, 2687, 2699, + 2711, 2723, 2735, 2747, 2759, 2771, 2783, 2795, + 2807, 2819, 2831, 2843, 2855, 2867, 2879, 2891, + 2903, 2915, 2927, 2939, 2951, 2963, 2975, 2987, + 2999, 3011, 3023, 3035, 3047, 3059, 3071, 3083, + 3095, 3107, 3119, 3131, 3143, 3155, 3167, 3179, + 3191, 3203, 3215, 3227, 3239, 3251, 3263, 3275, + 3287, 3299, 3311, 3323, 3335, 3347, 3359, 3371, + 3383, 3395, 3407, 3419, 3431, 3443, 3455, 3467, + 3479, 3491, 3503, 3515, 3527, 3539, 3551, 3563, + 3575, 3587, 3599, 3611, 3623, 3635, 3647, 3659, + 3671, 3683, 3695, 3707, 3719, 3731, 3743, 3755, + 3767, 3779, 3791, 3803, 3815, 3827, 3839, 3851, + 3863, 3875, 3887, 3899, 3911, 3923, 3935, 3947, + 3959, 3971, 3983, 3995, 4007, 4019, 4031, 4043, + 4055, 4067, 4079, 4091, 4103, 4115, 4127, 4139, + 4151, 4175, 4187, 4199, 4211, 4223, 4235, 4247, + 4259, 4271, 4283, 4295, 4307, 4319, 4331, 4343, + 4355, 4367, 4379, 4391, 4403, 4415, 4427, 4439, + 4451, 4463, 4475, 4487, 4499, 4511, 4523, 4535, + 4547, 4559, 4571, 4583, 4595, 4607, 4619, 4631, + 4643, 4655, 4667, 4679, 4691, 4703, 4715, 4727, + 4739, 4751, 4763, 4775, 4787, 4799, 4811, 4823, + 4835, 4847, 4859, 4871, 4883, 4895, 4907, 4919, + 4931, 4943, 4955, 4967, 4979, 4991, 5003, 5015, + 5027, 5039, 5051, 5063, 5075, 5087, 5099, 5111, + 5123, 5135, 5147, 5159, 5171, 5183, 5195, 5207, + 5219, 5231, 5243, 5255, 5267, 5279, 5291, 5303, + 5315, 5327, 5339, 5351, 5363, 5375, 5387, 5399, + 5411, 5423, 5435, 5447, 5459, 5471, 5483, 5495, + 5507, 5519, 5531, 5543, 5555, 5567, 5579, 5591, + 5603, 5615, 5627, 5639, 5651, 5663, 5675, 5687, + 5699, 5711, 5723, 5735, 5747, 5759, 5771, 5783, + 5795, 5807, 5819, 5831, 5843, 5855, 5867, 5879, + 5891, 5903, 5915, 5927, 5939, 5951, 5963, 5975, + 5987, 5999, 6011, 6023, 6035, 6047, 6059, 6071, + 6083, 6095, 6107, 6119, 6131, 6143, 6155, 6167, + 6179, 6191, 6203, 6215, 6227, 6239, 6251, 6263, + 6275, 6287, 6299, 6311, 6323, 6335, 6347, 6359, + 6371, 6383, 6395, 6407, 6419, 6431, 6443, 6455, + 6467, 6479, 6491, 6503, 6515, 6527, 6539, 6551, + 6563, 6575, 6587, 6599, 6611, 6623, 6635, 6647, + 6671, 6683, 6695, 6707, 6719, 6731, 6743, 6755, + 6767, 6779, 6791, 6803, 6815, 6827, 6839, 6851, + 6863, 6875, 6887, 6899, 6911, 6923, 6935, 6947, + 6959, 6971, 6983, 6995, 7007, 7019, 7031, 7043, + 7055, 7067, 7079, 7091, 7103, 7115, 7127, 7139, + 7151, 7163, 7175, 7187, 7199, 7211, 7223, 7235, + 7247, 7259, 7271, 7283, 7295, 7307, 7319, 7331, + 7343, 7355, 7367, 7379, 7391, 7403, 7415, 7427, + 7439, 7451, 7463, 7475, 7487, 7499, 7511, 7523, + 7535, 7547, 7559, 7571, 7583, 7595, 7607, 7619, + 7631, 7643, 7655, 7667, 7679, 7691, 7703, 7715, + 7727, 7739, 7751, 7763, 7775, 7787, 7799, 7811, + 7823, 7835, 7847, 7859, 7871, 7883, 7895, 7907, + 7919, 7931, 7943, 7955, 7967, 7979, 7991, 8003, + 8015, 8027, 8039, 8051, 8063, 8075, 8087, 8099, + 8111, 8123, 8135, 8147, 8159, 8171, 8183, 8195, + 8207, 8219, 8231, 8243, 8255, 8267, 8279, 8291, + 8303, 8315, 8327, 8339, 8351, 8363, 8375, 8387, + 8399, 8411, 8423, 8435, 8447, 8459, 8471, 8483, + 8495, 8507, 8519, 8531, 8543, 8555, 8567, 8579, + 8591, 8603, 8615, 8627, 8639, 8651, 8663, 8675, + 8687, 8699, 8711, 8723, 8735, 8747, 8759, 8771, + 8783, 8795, 8807, 8819, 8831, 8843, 8855, 8867, + 8879, 8891, 8903, 8915, 8927, 8939, 8951, 8963, + 8975, 8987, 8999, 9011, 9023, 9035, 9047, 9059, + 9071, 9083, 9095, 9107, 9119, 9131, 9143, 9167, + 9179, 9191, 9203, 9215, 9227, 9239, 9251, 9263, + 9275, 9287, 9299, 9311, 9323, 9335, 9347, 9359, + 9371, 9383, 9395, 9407, 9419, 9431, 9443, 9455, + 9467, 9479, 9491, 9503, 9515, 9527, 9539, 9551, + 9563, 9575, 9587, 9599, 9611, 9623, 9635, 9647, + 9659, 9671, 9683, 9695, 9707, 9719, 9731, 9743, + 9755, 9767, 9779, 9791, 9803, 9815, 9827, 9839, + 9851, 9863, 9875, 9887, 9899, 9911, 9923, 9935, + 9947, 9959, 9971, 9983, }, + /* 8 */ + {12, 24, 36, 48, 60, 72, 84, 96, + 108, 120, 132, 144, 156, 168, 180, 192, + 204, 216, 228, 240, 252, 264, 276, 288, + 300, 312, 324, 336, 348, 360, 372, 384, + 396, 408, 420, 432, 444, 456, 468, 480, + 492, 504, 516, 528, 540, 552, 564, 576, + 588, 600, 612, 624, 636, 648, 660, 672, + 684, 696, 708, 720, 732, 744, 756, 768, + 780, 792, 804, 816, 828, 840, 852, 864, + 876, 888, 900, 912, 924, 936, 948, 960, + 972, 984, 996, 1008, 1020, 1032, 1044, 1056, + 1068, 1080, 1092, 1104, 1116, 1128, 1140, 1152, + 1164, 1176, 1188, 1200, 1212, 1224, 1236, 1248, + 1260, 1272, 1284, 1296, 1308, 1320, 1332, 1344, + 1356, 1368, 1380, 1392, 1404, 1416, 1428, 1440, + 1452, 1464, 1476, 1488, 1500, 1512, 1524, 1536, + 1548, 1560, 1572, 1584, 1596, 1608, 1620, 1632, + 1644, 1656, 1668, 1680, 1692, 1704, 1716, 1728, + 1740, 1752, 1764, 1776, 1788, 1800, 1812, 1824, + 1836, 1848, 1860, 1872, 1884, 1896, 1908, 1920, + 1932, 1944, 1956, 1968, 1980, 1992, 2004, 2016, + 2028, 2040, 2052, 2064, 2076, 2088, 2100, 2112, + 2124, 2136, 2148, 2160, 2172, 2184, 2196, 2208, + 2220, 2232, 2244, 2256, 2268, 2280, 2292, 2304, + 2316, 2328, 2340, 2352, 2364, 2376, 2388, 2400, + 2412, 2424, 2436, 2448, 2460, 2472, 2484, 2508, + 2520, 2532, 2544, 2556, 2568, 2580, 2592, 2604, + 2616, 2628, 2640, 2652, 2664, 2676, 2688, 2700, + 2712, 2724, 2736, 2748, 2760, 2772, 2784, 2796, + 2808, 2820, 2832, 2844, 2856, 2868, 2880, 2892, + 2904, 2916, 2928, 2940, 2952, 2964, 2976, 2988, + 3000, 3012, 3024, 3036, 3048, 3060, 3072, 3084, + 3096, 3108, 3120, 3132, 3144, 3156, 3168, 3180, + 3192, 3204, 3216, 3228, 3240, 3252, 3264, 3276, + 3288, 3300, 3312, 3324, 3336, 3348, 3360, 3372, + 3384, 3396, 3408, 3420, 3432, 3444, 3456, 3468, + 3480, 3492, 3504, 3516, 3528, 3540, 3552, 3564, + 3576, 3588, 3600, 3612, 3624, 3636, 3648, 3660, + 3672, 3684, 3696, 3708, 3720, 3732, 3744, 3756, + 3768, 3780, 3792, 3804, 3816, 3828, 3840, 3852, + 3864, 3876, 3888, 3900, 3912, 3924, 3936, 3948, + 3960, 3972, 3984, 3996, 4008, 4020, 4032, 4044, + 4056, 4068, 4080, 4092, 4104, 4116, 4128, 4140, + 4152, 4164, 4176, 4188, 4200, 4212, 4224, 4236, + 4248, 4260, 4272, 4284, 4296, 4308, 4320, 4332, + 4344, 4356, 4368, 4380, 4392, 4404, 4416, 4428, + 4440, 4452, 4464, 4476, 4488, 4500, 4512, 4524, + 4536, 4548, 4560, 4572, 4584, 4596, 4608, 4620, + 4632, 4644, 4656, 4668, 4680, 4692, 4704, 4716, + 4728, 4740, 4752, 4764, 4776, 4788, 4800, 4812, + 4824, 4836, 4848, 4860, 4872, 4884, 4896, 4908, + 4920, 4932, 4944, 4956, 4968, 4980, 5004, 5016, + 5028, 5040, 5052, 5064, 5076, 5088, 5100, 5112, + 5124, 5136, 5148, 5160, 5172, 5184, 5196, 5208, + 5220, 5232, 5244, 5256, 5268, 5280, 5292, 5304, + 5316, 5328, 5340, 5352, 5364, 5376, 5388, 5400, + 5412, 5424, 5436, 5448, 5460, 5472, 5484, 5496, + 5508, 5520, 5532, 5544, 5556, 5568, 5580, 5592, + 5604, 5616, 5628, 5640, 5652, 5664, 5676, 5688, + 5700, 5712, 5724, 5736, 5748, 5760, 5772, 5784, + 5796, 5808, 5820, 5832, 5844, 5856, 5868, 5880, + 5892, 5904, 5916, 5928, 5940, 5952, 5964, 5976, + 5988, 6000, 6012, 6024, 6036, 6048, 6060, 6072, + 6084, 6096, 6108, 6120, 6132, 6144, 6156, 6168, + 6180, 6192, 6204, 6216, 6228, 6240, 6252, 6264, + 6276, 6288, 6300, 6312, 6324, 6336, 6348, 6360, + 6372, 6384, 6396, 6408, 6420, 6432, 6444, 6456, + 6468, 6480, 6492, 6504, 6516, 6528, 6540, 6552, + 6564, 6576, 6588, 6600, 6612, 6624, 6636, 6648, + 6660, 6672, 6684, 6696, 6708, 6720, 6732, 6744, + 6756, 6768, 6780, 6792, 6804, 6816, 6828, 6840, + 6852, 6864, 6876, 6888, 6900, 6912, 6924, 6936, + 6948, 6960, 6972, 6984, 6996, 7008, 7020, 7032, + 7044, 7056, 7068, 7080, 7092, 7104, 7116, 7128, + 7140, 7152, 7164, 7176, 7188, 7200, 7212, 7224, + 7236, 7248, 7260, 7272, 7284, 7296, 7308, 7320, + 7332, 7344, 7356, 7368, 7380, 7392, 7404, 7416, + 7428, 7440, 7452, 7464, 7476, 7500, 7512, 7524, + 7536, 7548, 7560, 7572, 7584, 7596, 7608, 7620, + 7632, 7644, 7656, 7668, 7680, 7692, 7704, 7716, + 7728, 7740, 7752, 7764, 7776, 7788, 7800, 7812, + 7824, 7836, 7848, 7860, 7872, 7884, 7896, 7908, + 7920, 7932, 7944, 7956, 7968, 7980, 7992, 8004, + 8016, 8028, 8040, 8052, 8064, 8076, 8088, 8100, + 8112, 8124, 8136, 8148, 8160, 8172, 8184, 8196, + 8208, 8220, 8232, 8244, 8256, 8268, 8280, 8292, + 8304, 8316, 8328, 8340, 8352, 8364, 8376, 8388, + 8400, 8412, 8424, 8436, 8448, 8460, 8472, 8484, + 8496, 8508, 8520, 8532, 8544, 8556, 8568, 8580, + 8592, 8604, 8616, 8628, 8640, 8652, 8664, 8676, + 8688, 8700, 8712, 8724, 8736, 8748, 8760, 8772, + 8784, 8796, 8808, 8820, 8832, 8844, 8856, 8868, + 8880, 8892, 8904, 8916, 8928, 8940, 8952, 8964, + 8976, 8988, 9000, 9012, 9024, 9036, 9048, 9060, + 9072, 9084, 9096, 9108, 9120, 9132, 9144, 9156, + 9168, 9180, 9192, 9204, 9216, 9228, 9240, 9252, + 9264, 9276, 9288, 9300, 9312, 9324, 9336, 9348, + 9360, 9372, 9384, 9396, 9408, 9420, 9432, 9444, + 9456, 9468, 9480, 9492, 9504, 9516, 9528, 9540, + 9552, 9564, 9576, 9588, 9600, 9612, 9624, 9636, + 9648, 9660, 9672, 9684, 9696, 9708, 9720, 9732, + 9744, 9756, 9768, 9780, 9792, 9804, 9816, 9828, + 9840, 9852, 9864, 9876, 9888, 9900, 9912, 9924, + 9936, 9948, 9960, 9972, }, + /* 9 */ + {13, 25, 37, 49, 61, 73, 85, 97, + 109, 121, 133, 145, 157, 169, 181, 193, + 205, 217, 229, 241, 253, 265, 277, 289, + 301, 313, 325, 337, 349, 361, 373, 385, + 397, 409, 421, 433, 445, 457, 469, 481, + 493, 505, 517, 529, 541, 553, 565, 577, + 589, 601, 613, 625, 637, 649, 661, 673, + 685, 697, 709, 721, 733, 745, 757, 769, + 781, 793, 805, 817, 829, 841, 853, 865, + 877, 889, 901, 913, 925, 937, 949, 961, + 973, 985, 997, 1009, 1021, 1033, 1045, 1057, + 1069, 1081, 1093, 1105, 1117, 1129, 1141, 1153, + 1165, 1177, 1189, 1201, 1213, 1225, 1237, 1249, + 1261, 1273, 1285, 1297, 1309, 1321, 1333, 1345, + 1357, 1369, 1381, 1393, 1405, 1417, 1429, 1441, + 1453, 1465, 1477, 1489, 1501, 1513, 1525, 1537, + 1549, 1561, 1573, 1585, 1597, 1609, 1621, 1633, + 1645, 1657, 1669, 1681, 1693, 1705, 1717, 1729, + 1741, 1753, 1765, 1777, 1789, 1801, 1813, 1825, + 1837, 1849, 1861, 1873, 1885, 1897, 1909, 1921, + 1933, 1945, 1957, 1969, 1981, 1993, 2005, 2017, + 2029, 2041, 2053, 2065, 2077, 2089, 2101, 2113, + 2125, 2137, 2149, 2161, 2173, 2185, 2197, 2209, + 2221, 2233, 2245, 2257, 2269, 2281, 2293, 2305, + 2317, 2329, 2341, 2353, 2365, 2377, 2389, 2401, + 2413, 2425, 2437, 2449, 2461, 2473, 2485, 2509, + 2521, 2533, 2545, 2557, 2569, 2581, 2593, 2605, + 2617, 2629, 2641, 2653, 2665, 2677, 2689, 2701, + 2713, 2725, 2737, 2749, 2761, 2773, 2785, 2797, + 2809, 2821, 2833, 2845, 2857, 2869, 2881, 2893, + 2905, 2917, 2929, 2941, 2953, 2965, 2977, 2989, + 3001, 3013, 3025, 3037, 3049, 3061, 3073, 3085, + 3097, 3109, 3121, 3133, 3145, 3157, 3169, 3181, + 3193, 3205, 3217, 3229, 3241, 3253, 3265, 3277, + 3289, 3301, 3313, 3325, 3337, 3349, 3361, 3373, + 3385, 3397, 3409, 3421, 3433, 3445, 3457, 3469, + 3481, 3493, 3505, 3517, 3529, 3541, 3553, 3565, + 3577, 3589, 3601, 3613, 3625, 3637, 3649, 3661, + 3673, 3685, 3697, 3709, 3721, 3733, 3745, 3757, + 3769, 3781, 3793, 3805, 3817, 3829, 3841, 3853, + 3865, 3877, 3889, 3901, 3913, 3925, 3937, 3949, + 3961, 3973, 3985, 3997, 4009, 4021, 4033, 4045, + 4057, 4069, 4081, 4093, 4105, 4117, 4129, 4141, + 4153, 4165, 4177, 4189, 4201, 4213, 4225, 4237, + 4249, 4261, 4273, 4285, 4297, 4309, 4321, 4333, + 4345, 4357, 4369, 4381, 4393, 4405, 4417, 4429, + 4441, 4453, 4465, 4477, 4489, 4501, 4513, 4525, + 4537, 4549, 4561, 4573, 4585, 4597, 4609, 4621, + 4633, 4645, 4657, 4669, 4681, 4693, 4705, 4717, + 4729, 4741, 4753, 4765, 4777, 4789, 4801, 4813, + 4825, 4837, 4849, 4861, 4873, 4885, 4897, 4909, + 4921, 4933, 4945, 4957, 4969, 4981, 5005, 5017, + 5029, 5041, 5053, 5065, 5077, 5089, 5101, 5113, + 5125, 5137, 5149, 5161, 5173, 5185, 5197, 5209, + 5221, 5233, 5245, 5257, 5269, 5281, 5293, 5305, + 5317, 5329, 5341, 5353, 5365, 5377, 5389, 5401, + 5413, 5425, 5437, 5449, 5461, 5473, 5485, 5497, + 5509, 5521, 5533, 5545, 5557, 5569, 5581, 5593, + 5605, 5617, 5629, 5641, 5653, 5665, 5677, 5689, + 5701, 5713, 5725, 5737, 5749, 5761, 5773, 5785, + 5797, 5809, 5821, 5833, 5845, 5857, 5869, 5881, + 5893, 5905, 5917, 5929, 5941, 5953, 5965, 5977, + 5989, 6001, 6013, 6025, 6037, 6049, 6061, 6073, + 6085, 6097, 6109, 6121, 6133, 6145, 6157, 6169, + 6181, 6193, 6205, 6217, 6229, 6241, 6253, 6265, + 6277, 6289, 6301, 6313, 6325, 6337, 6349, 6361, + 6373, 6385, 6397, 6409, 6421, 6433, 6445, 6457, + 6469, 6481, 6493, 6505, 6517, 6529, 6541, 6553, + 6565, 6577, 6589, 6601, 6613, 6625, 6637, 6649, + 6661, 6673, 6685, 6697, 6709, 6721, 6733, 6745, + 6757, 6769, 6781, 6793, 6805, 6817, 6829, 6841, + 6853, 6865, 6877, 6889, 6901, 6913, 6925, 6937, + 6949, 6961, 6973, 6985, 6997, 7009, 7021, 7033, + 7045, 7057, 7069, 7081, 7093, 7105, 7117, 7129, + 7141, 7153, 7165, 7177, 7189, 7201, 7213, 7225, + 7237, 7249, 7261, 7273, 7285, 7297, 7309, 7321, + 7333, 7345, 7357, 7369, 7381, 7393, 7405, 7417, + 7429, 7441, 7453, 7465, 7477, 7501, 7513, 7525, + 7537, 7549, 7561, 7573, 7585, 7597, 7609, 7621, + 7633, 7645, 7657, 7669, 7681, 7693, 7705, 7717, + 7729, 7741, 7753, 7765, 7777, 7789, 7801, 7813, + 7825, 7837, 7849, 7861, 7873, 7885, 7897, 7909, + 7921, 7933, 7945, 7957, 7969, 7981, 7993, 8005, + 8017, 8029, 8041, 8053, 8065, 8077, 8089, 8101, + 8113, 8125, 8137, 8149, 8161, 8173, 8185, 8197, + 8209, 8221, 8233, 8245, 8257, 8269, 8281, 8293, + 8305, 8317, 8329, 8341, 8353, 8365, 8377, 8389, + 8401, 8413, 8425, 8437, 8449, 8461, 8473, 8485, + 8497, 8509, 8521, 8533, 8545, 8557, 8569, 8581, + 8593, 8605, 8617, 8629, 8641, 8653, 8665, 8677, + 8689, 8701, 8713, 8725, 8737, 8749, 8761, 8773, + 8785, 8797, 8809, 8821, 8833, 8845, 8857, 8869, + 8881, 8893, 8905, 8917, 8929, 8941, 8953, 8965, + 8977, 8989, 9001, 9013, 9025, 9037, 9049, 9061, + 9073, 9085, 9097, 9109, 9121, 9133, 9145, 9157, + 9169, 9181, 9193, 9205, 9217, 9229, 9241, 9253, + 9265, 9277, 9289, 9301, 9313, 9325, 9337, 9349, + 9361, 9373, 9385, 9397, 9409, 9421, 9433, 9445, + 9457, 9469, 9481, 9493, 9505, 9517, 9529, 9541, + 9553, 9565, 9577, 9589, 9601, 9613, 9625, 9637, + 9649, 9661, 9673, 9685, 9697, 9709, 9721, 9733, + 9745, 9757, 9769, 9781, 9793, 9805, 9817, 9829, + 9841, 9853, 9865, 9877, 9889, 9901, 9913, 9925, + 9937, 9949, 9961, 9973, }, + /* 10 */ + {14, 26, 38, 50, 62, 74, 86, 98, + 110, 122, 134, 146, 158, 170, 182, 194, + 206, 218, 230, 242, 254, 266, 278, 290, + 302, 314, 326, 338, 350, 362, 374, 386, + 398, 410, 422, 434, 446, 458, 470, 482, + 494, 506, 518, 530, 542, 554, 566, 578, + 590, 602, 614, 626, 638, 650, 662, 674, + 686, 698, 710, 722, 734, 746, 758, 770, + 782, 794, 806, 818, 830, 842, 854, 866, + 878, 890, 902, 914, 926, 938, 950, 962, + 974, 986, 998, 1010, 1022, 1034, 1046, 1058, + 1070, 1082, 1094, 1106, 1118, 1130, 1142, 1154, + 1166, 1178, 1190, 1202, 1214, 1226, 1238, 1250, + 1262, 1274, 1286, 1298, 1310, 1322, 1334, 1346, + 1358, 1370, 1382, 1394, 1406, 1418, 1430, 1442, + 1454, 1466, 1478, 1490, 1502, 1514, 1526, 1538, + 1550, 1562, 1574, 1586, 1598, 1610, 1622, 1634, + 1646, 1658, 1670, 1682, 1694, 1706, 1718, 1730, + 1742, 1754, 1766, 1778, 1790, 1802, 1814, 1826, + 1838, 1850, 1862, 1874, 1886, 1898, 1910, 1922, + 1934, 1946, 1958, 1970, 1982, 1994, 2006, 2018, + 2030, 2042, 2054, 2066, 2078, 2090, 2102, 2114, + 2126, 2138, 2150, 2162, 2174, 2186, 2198, 2210, + 2222, 2234, 2246, 2258, 2270, 2282, 2294, 2306, + 2318, 2330, 2342, 2354, 2366, 2378, 2390, 2402, + 2414, 2426, 2438, 2450, 2462, 2474, 2486, 2510, + 2522, 2534, 2546, 2558, 2570, 2582, 2594, 2606, + 2618, 2630, 2642, 2654, 2666, 2678, 2690, 2702, + 2714, 2726, 2738, 2750, 2762, 2774, 2786, 2798, + 2810, 2822, 2834, 2846, 2858, 2870, 2882, 2894, + 2906, 2918, 2930, 2942, 2954, 2966, 2978, 2990, + 3002, 3014, 3026, 3038, 3050, 3062, 3074, 3086, + 3098, 3110, 3122, 3134, 3146, 3158, 3170, 3182, + 3194, 3206, 3218, 3230, 3242, 3254, 3266, 3278, + 3290, 3302, 3314, 3326, 3338, 3350, 3362, 3374, + 3386, 3398, 3410, 3422, 3434, 3446, 3458, 3470, + 3482, 3494, 3506, 3518, 3530, 3542, 3554, 3566, + 3578, 3590, 3602, 3614, 3626, 3638, 3650, 3662, + 3674, 3686, 3698, 3710, 3722, 3734, 3746, 3758, + 3770, 3782, 3794, 3806, 3818, 3830, 3842, 3854, + 3866, 3878, 3890, 3902, 3914, 3926, 3938, 3950, + 3962, 3974, 3986, 3998, 4010, 4022, 4034, 4046, + 4058, 4070, 4082, 4094, 4106, 4118, 4130, 4142, + 4154, 4166, 4178, 4190, 4202, 4214, 4226, 4238, + 4250, 4262, 4274, 4286, 4298, 4310, 4322, 4334, + 4346, 4358, 4370, 4382, 4394, 4406, 4418, 4430, + 4442, 4454, 4466, 4478, 4490, 4502, 4514, 4526, + 4538, 4550, 4562, 4574, 4586, 4598, 4610, 4622, + 4634, 4646, 4658, 4670, 4682, 4694, 4706, 4718, + 4730, 4742, 4754, 4766, 4778, 4790, 4802, 4814, + 4826, 4838, 4850, 4862, 4874, 4886, 4898, 4910, + 4922, 4934, 4946, 4958, 4970, 4982, 5006, 5018, + 5030, 5042, 5054, 5066, 5078, 5090, 5102, 5114, + 5126, 5138, 5150, 5162, 5174, 5186, 5198, 5210, + 5222, 5234, 5246, 5258, 5270, 5282, 5294, 5306, + 5318, 5330, 5342, 5354, 5366, 5378, 5390, 5402, + 5414, 5426, 5438, 5450, 5462, 5474, 5486, 5498, + 5510, 5522, 5534, 5546, 5558, 5570, 5582, 5594, + 5606, 5618, 5630, 5642, 5654, 5666, 5678, 5690, + 5702, 5714, 5726, 5738, 5750, 5762, 5774, 5786, + 5798, 5810, 5822, 5834, 5846, 5858, 5870, 5882, + 5894, 5906, 5918, 5930, 5942, 5954, 5966, 5978, + 5990, 6002, 6014, 6026, 6038, 6050, 6062, 6074, + 6086, 6098, 6110, 6122, 6134, 6146, 6158, 6170, + 6182, 6194, 6206, 6218, 6230, 6242, 6254, 6266, + 6278, 6290, 6302, 6314, 6326, 6338, 6350, 6362, + 6374, 6386, 6398, 6410, 6422, 6434, 6446, 6458, + 6470, 6482, 6494, 6506, 6518, 6530, 6542, 6554, + 6566, 6578, 6590, 6602, 6614, 6626, 6638, 6650, + 6662, 6674, 6686, 6698, 6710, 6722, 6734, 6746, + 6758, 6770, 6782, 6794, 6806, 6818, 6830, 6842, + 6854, 6866, 6878, 6890, 6902, 6914, 6926, 6938, + 6950, 6962, 6974, 6986, 6998, 7010, 7022, 7034, + 7046, 7058, 7070, 7082, 7094, 7106, 7118, 7130, + 7142, 7154, 7166, 7178, 7190, 7202, 7214, 7226, + 7238, 7250, 7262, 7274, 7286, 7298, 7310, 7322, + 7334, 7346, 7358, 7370, 7382, 7394, 7406, 7418, + 7430, 7442, 7454, 7466, 7478, 7502, 7514, 7526, + 7538, 7550, 7562, 7574, 7586, 7598, 7610, 7622, + 7634, 7646, 7658, 7670, 7682, 7694, 7706, 7718, + 7730, 7742, 7754, 7766, 7778, 7790, 7802, 7814, + 7826, 7838, 7850, 7862, 7874, 7886, 7898, 7910, + 7922, 7934, 7946, 7958, 7970, 7982, 7994, 8006, + 8018, 8030, 8042, 8054, 8066, 8078, 8090, 8102, + 8114, 8126, 8138, 8150, 8162, 8174, 8186, 8198, + 8210, 8222, 8234, 8246, 8258, 8270, 8282, 8294, + 8306, 8318, 8330, 8342, 8354, 8366, 8378, 8390, + 8402, 8414, 8426, 8438, 8450, 8462, 8474, 8486, + 8498, 8510, 8522, 8534, 8546, 8558, 8570, 8582, + 8594, 8606, 8618, 8630, 8642, 8654, 8666, 8678, + 8690, 8702, 8714, 8726, 8738, 8750, 8762, 8774, + 8786, 8798, 8810, 8822, 8834, 8846, 8858, 8870, + 8882, 8894, 8906, 8918, 8930, 8942, 8954, 8966, + 8978, 8990, 9002, 9014, 9026, 9038, 9050, 9062, + 9074, 9086, 9098, 9110, 9122, 9134, 9146, 9158, + 9170, 9182, 9194, 9206, 9218, 9230, 9242, 9254, + 9266, 9278, 9290, 9302, 9314, 9326, 9338, 9350, + 9362, 9374, 9386, 9398, 9410, 9422, 9434, 9446, + 9458, 9470, 9482, 9494, 9506, 9518, 9530, 9542, + 9554, 9566, 9578, 9590, 9602, 9614, 9626, 9638, + 9650, 9662, 9674, 9686, 9698, 9710, 9722, 9734, + 9746, 9758, 9770, 9782, 9794, 9806, 9818, 9830, + 9842, 9854, 9866, 9878, 9890, 9902, 9914, 9926, + 9938, 9950, 9962, 9974, }, + /* 11 */ + {15, 27, 39, 51, 63, 75, 87, 99, + 111, 123, 135, 147, 159, 171, 183, 195, + 207, 219, 231, 243, 255, 267, 279, 291, + 303, 315, 327, 339, 351, 363, 375, 387, + 399, 411, 423, 435, 447, 459, 471, 483, + 495, 507, 519, 531, 543, 555, 567, 579, + 591, 603, 615, 627, 639, 651, 663, 675, + 687, 699, 711, 723, 735, 747, 759, 771, + 783, 795, 807, 819, 831, 843, 855, 867, + 879, 891, 903, 915, 927, 939, 951, 963, + 975, 987, 999, 1011, 1023, 1035, 1047, 1059, + 1071, 1083, 1095, 1107, 1119, 1131, 1143, 1155, + 1167, 1179, 1191, 1203, 1215, 1227, 1239, 1251, + 1263, 1275, 1287, 1299, 1311, 1323, 1335, 1347, + 1359, 1371, 1383, 1395, 1407, 1419, 1431, 1443, + 1455, 1467, 1479, 1491, 1503, 1515, 1527, 1539, + 1551, 1563, 1575, 1587, 1599, 1611, 1623, 1635, + 1647, 1659, 1671, 1683, 1695, 1707, 1719, 1731, + 1743, 1755, 1767, 1779, 1791, 1803, 1815, 1827, + 1839, 1851, 1863, 1875, 1887, 1899, 1911, 1923, + 1935, 1947, 1959, 1971, 1983, 1995, 2007, 2019, + 2031, 2043, 2055, 2067, 2079, 2091, 2103, 2115, + 2127, 2139, 2151, 2163, 2175, 2187, 2199, 2211, + 2223, 2235, 2247, 2259, 2271, 2283, 2295, 2307, + 2319, 2331, 2343, 2355, 2367, 2379, 2391, 2403, + 2415, 2427, 2439, 2451, 2463, 2475, 2487, 2511, + 2523, 2535, 2547, 2559, 2571, 2583, 2595, 2607, + 2619, 2631, 2643, 2655, 2667, 2679, 2691, 2703, + 2715, 2727, 2739, 2751, 2763, 2775, 2787, 2799, + 2811, 2823, 2835, 2847, 2859, 2871, 2883, 2895, + 2907, 2919, 2931, 2943, 2955, 2967, 2979, 2991, + 3003, 3015, 3027, 3039, 3051, 3063, 3075, 3087, + 3099, 3111, 3123, 3135, 3147, 3159, 3171, 3183, + 3195, 3207, 3219, 3231, 3243, 3255, 3267, 3279, + 3291, 3303, 3315, 3327, 3339, 3351, 3363, 3375, + 3387, 3399, 3411, 3423, 3435, 3447, 3459, 3471, + 3483, 3495, 3507, 3519, 3531, 3543, 3555, 3567, + 3579, 3591, 3603, 3615, 3627, 3639, 3651, 3663, + 3675, 3687, 3699, 3711, 3723, 3735, 3747, 3759, + 3771, 3783, 3795, 3807, 3819, 3831, 3843, 3855, + 3867, 3879, 3891, 3903, 3915, 3927, 3939, 3951, + 3963, 3975, 3987, 3999, 4011, 4023, 4035, 4047, + 4059, 4071, 4083, 4095, 4107, 4119, 4131, 4143, + 4155, 4167, 4179, 4191, 4203, 4215, 4227, 4239, + 4251, 4263, 4275, 4287, 4299, 4311, 4323, 4335, + 4347, 4359, 4371, 4383, 4395, 4407, 4419, 4431, + 4443, 4455, 4467, 4479, 4491, 4503, 4515, 4527, + 4539, 4551, 4563, 4575, 4587, 4599, 4611, 4623, + 4635, 4647, 4659, 4671, 4683, 4695, 4707, 4719, + 4731, 4743, 4755, 4767, 4779, 4791, 4803, 4815, + 4827, 4839, 4851, 4863, 4875, 4887, 4899, 4911, + 4923, 4935, 4947, 4959, 4971, 4983, 5007, 5019, + 5031, 5043, 5055, 5067, 5079, 5091, 5103, 5115, + 5127, 5139, 5151, 5163, 5175, 5187, 5199, 5211, + 5223, 5235, 5247, 5259, 5271, 5283, 5295, 5307, + 5319, 5331, 5343, 5355, 5367, 5379, 5391, 5403, + 5415, 5427, 5439, 5451, 5463, 5475, 5487, 5499, + 5511, 5523, 5535, 5547, 5559, 5571, 5583, 5595, + 5607, 5619, 5631, 5643, 5655, 5667, 5679, 5691, + 5703, 5715, 5727, 5739, 5751, 5763, 5775, 5787, + 5799, 5811, 5823, 5835, 5847, 5859, 5871, 5883, + 5895, 5907, 5919, 5931, 5943, 5955, 5967, 5979, + 5991, 6003, 6015, 6027, 6039, 6051, 6063, 6075, + 6087, 6099, 6111, 6123, 6135, 6147, 6159, 6171, + 6183, 6195, 6207, 6219, 6231, 6243, 6255, 6267, + 6279, 6291, 6303, 6315, 6327, 6339, 6351, 6363, + 6375, 6387, 6399, 6411, 6423, 6435, 6447, 6459, + 6471, 6483, 6495, 6507, 6519, 6531, 6543, 6555, + 6567, 6579, 6591, 6603, 6615, 6627, 6639, 6651, + 6663, 6675, 6687, 6699, 6711, 6723, 6735, 6747, + 6759, 6771, 6783, 6795, 6807, 6819, 6831, 6843, + 6855, 6867, 6879, 6891, 6903, 6915, 6927, 6939, + 6951, 6963, 6975, 6987, 6999, 7011, 7023, 7035, + 7047, 7059, 7071, 7083, 7095, 7107, 7119, 7131, + 7143, 7155, 7167, 7179, 7191, 7203, 7215, 7227, + 7239, 7251, 7263, 7275, 7287, 7299, 7311, 7323, + 7335, 7347, 7359, 7371, 7383, 7395, 7407, 7419, + 7431, 7443, 7455, 7467, 7479, 7503, 7515, 7527, + 7539, 7551, 7563, 7575, 7587, 7599, 7611, 7623, + 7635, 7647, 7659, 7671, 7683, 7695, 7707, 7719, + 7731, 7743, 7755, 7767, 7779, 7791, 7803, 7815, + 7827, 7839, 7851, 7863, 7875, 7887, 7899, 7911, + 7923, 7935, 7947, 7959, 7971, 7983, 7995, 8007, + 8019, 8031, 8043, 8055, 8067, 8079, 8091, 8103, + 8115, 8127, 8139, 8151, 8163, 8175, 8187, 8199, + 8211, 8223, 8235, 8247, 8259, 8271, 8283, 8295, + 8307, 8319, 8331, 8343, 8355, 8367, 8379, 8391, + 8403, 8415, 8427, 8439, 8451, 8463, 8475, 8487, + 8499, 8511, 8523, 8535, 8547, 8559, 8571, 8583, + 8595, 8607, 8619, 8631, 8643, 8655, 8667, 8679, + 8691, 8703, 8715, 8727, 8739, 8751, 8763, 8775, + 8787, 8799, 8811, 8823, 8835, 8847, 8859, 8871, + 8883, 8895, 8907, 8919, 8931, 8943, 8955, 8967, + 8979, 8991, 9003, 9015, 9027, 9039, 9051, 9063, + 9075, 9087, 9099, 9111, 9123, 9135, 9147, 9159, + 9171, 9183, 9195, 9207, 9219, 9231, 9243, 9255, + 9267, 9279, 9291, 9303, 9315, 9327, 9339, 9351, + 9363, 9375, 9387, 9399, 9411, 9423, 9435, 9447, + 9459, 9471, 9483, 9495, 9507, 9519, 9531, 9543, + 9555, 9567, 9579, 9591, 9603, 9615, 9627, 9639, + 9651, 9663, 9675, 9687, 9699, 9711, 9723, 9735, + 9747, 9759, 9771, 9783, 9795, 9807, 9819, 9831, + 9843, 9855, 9867, 9879, 9891, 9903, 9915, 9927, + 9939, 9951, 9963, 9975, }, +}; + +const unsigned int enco_which_dibits[12][828] = { + /* 0 */ + {6, 4, 2, 0, 102, 100, 98, 96, + 198, 196, 194, 192, 294, 292, 290, 288, + 390, 388, 386, 384, 486, 484, 482, 480, + 582, 580, 578, 576, 678, 676, 674, 672, + 774, 772, 770, 768, 870, 868, 866, 864, + 966, 964, 962, 960, 1062, 1060, 1058, 1056, + 1158, 1156, 1154, 1152, 1254, 1252, 1250, 1248, + 1350, 1348, 1346, 1344, 1446, 1444, 1442, 1440, + 1542, 1540, 1538, 1536, 1638, 1636, 1634, 1632, + 1798, 1796, 1794, 1792, 1894, 1892, 1890, 1888, + 1990, 1988, 1986, 1984, 2086, 2084, 2082, 2080, + 2182, 2180, 2178, 2176, 2278, 2276, 2274, 2272, + 2374, 2372, 2370, 2368, 2470, 2468, 2466, 2464, + 2566, 2564, 2562, 2560, 2662, 2660, 2658, 2656, + 2758, 2756, 2754, 2752, 2854, 2852, 2850, 2848, + 2950, 2948, 2946, 2944, 3046, 3044, 3042, 3040, + 3142, 3140, 3138, 3136, 3238, 3236, 3234, 3232, + 3334, 3332, 3330, 3328, 3398, 3396, 3394, 3392, + 3494, 3492, 3490, 3488, 3590, 3588, 3586, 3584, + 3686, 3684, 3682, 3680, 3782, 3780, 3778, 3776, + 3878, 3876, 3874, 3872, 3974, 3972, 3970, 3968, + 4070, 4068, 4066, 4064, 4166, 4164, 4162, 4160, + 4262, 4260, 4258, 4256, 4358, 4356, 4354, 4352, + 4454, 4452, 4450, 4448, 4550, 4548, 4546, 4544, + 4646, 4644, 4642, 4640, 4742, 4740, 4738, 4736, + 4838, 4836, 4834, 4832, 4934, 4932, 4930, 4928, + 4998, 4996, 4994, 4992, 5094, 5092, 5090, 5088, + 5190, 5188, 5186, 5184, 5286, 5284, 5282, 5280, + 5382, 5380, 5378, 5376, 5478, 5476, 5474, 5472, + 5574, 5572, 5570, 5568, 5670, 5668, 5666, 5664, + 5766, 5764, 5762, 5760, 5862, 5860, 5858, 5856, + 5958, 5956, 5954, 5952, 6054, 6052, 6050, 6048, + 6150, 6148, 6146, 6144, 6246, 6244, 6242, 6240, + 6342, 6340, 6338, 6336, 6438, 6436, 6434, 6432, + 6534, 6532, 6530, 6528, 6694, 6692, 6690, 6688, + 6790, 6788, 6786, 6784, 6886, 6884, 6882, 6880, + 6982, 6980, 6978, 6976, 7078, 7076, 7074, 7072, + 7174, 7172, 7170, 7168, 7270, 7268, 7266, 7264, + 7366, 7364, 7362, 7360, 7462, 7460, 7458, 7456, + 7558, 7556, 7554, 7552, 7654, 7652, 7650, 7648, + 7750, 7748, 7746, 7744, 7846, 7844, 7842, 7840, + 7942, 7940, 7938, 7936, 8038, 8036, 8034, 8032, + 8134, 8132, 8130, 8128, 8230, 8228, 8226, 8224, + 8326, 8324, 8322, 8320, 8390, 8388, 8386, 8384, + 8486, 8484, 8482, 8480, 8582, 8580, 8578, 8576, + 8678, 8676, 8674, 8672, 8774, 8772, 8770, 8768, + 8870, 8868, 8866, 8864, 8966, 8964, 8962, 8960, + 9062, 9060, 9058, 9056, 9158, 9156, 9154, 9152, + 9254, 9252, 9250, 9248, 9350, 9348, 9346, 9344, + 9446, 9444, 9442, 9440, 9542, 9540, 9538, 9536, + 9638, 9636, 9634, 9632, 9734, 9732, 9730, 9728, + 9830, 9828, 9826, 9824, 9926, 9924, 9922, 9920, + 9990, 9988, 9986, 9984, 10086, 10084, 10082, 10080, + 10182, 10180, 10178, 10176, 10278, 10276, 10274, 10272, + 10374, 10372, 10370, 10368, 10470, 10468, 10466, 10464, + 10566, 10564, 10562, 10560, 10662, 10660, 10658, 10656, + 10758, 10756, 10754, 10752, 10854, 10852, 10850, 10848, + 10950, 10948, 10946, 10944, 11046, 11044, 11042, 11040, + 11142, 11140, 11138, 11136, 11238, 11236, 11234, 11232, + 11334, 11332, 11330, 11328, 11430, 11428, 11426, 11424, + 11526, 11524, 11522, 11520, 11686, 11684, 11682, 11680, + 11782, 11780, 11778, 11776, 11878, 11876, 11874, 11872, + 11974, 11972, 11970, 11968, 12070, 12068, 12066, 12064, + 12166, 12164, 12162, 12160, 12262, 12260, 12258, 12256, + 12358, 12356, 12354, 12352, 12454, 12452, 12450, 12448, + 12550, 12548, 12546, 12544, 12646, 12644, 12642, 12640, + 12742, 12740, 12738, 12736, 12838, 12836, 12834, 12832, + 12934, 12932, 12930, 12928, 13030, 13028, 13026, 13024, + 13126, 13124, 13122, 13120, 13222, 13220, 13218, 13216, + 13286, 13284, 13282, 13280, 13382, 13380, 13378, 13376, + 13478, 13476, 13474, 13472, 13574, 13572, 13570, 13568, + 13670, 13668, 13666, 13664, 13766, 13764, 13762, 13760, + 13862, 13860, 13858, 13856, 13958, 13956, 13954, 13952, + 14054, 14052, 14050, 14048, 14150, 14148, 14146, 14144, + 14246, 14244, 14242, 14240, 14342, 14340, 14338, 14336, + 14438, 14436, 14434, 14432, 14534, 14532, 14530, 14528, + 14630, 14628, 14626, 14624, 14726, 14724, 14722, 14720, + 14822, 14820, 14818, 14816, 14918, 14916, 14914, 14912, + 14982, 14980, 14978, 14976, 15078, 15076, 15074, 15072, + 15174, 15172, 15170, 15168, 15270, 15268, 15266, 15264, + 15366, 15364, 15362, 15360, 15462, 15460, 15458, 15456, + 15558, 15556, 15554, 15552, 15654, 15652, 15650, 15648, + 15750, 15748, 15746, 15744, 15846, 15844, 15842, 15840, + 15942, 15940, 15938, 15936, 16038, 16036, 16034, 16032, + 16134, 16132, 16130, 16128, 16230, 16228, 16226, 16224, + 16326, 16324, 16322, 16320, 16422, 16420, 16418, 16416, + 16518, 16516, 16514, 16512, 16678, 16676, 16674, 16672, + 16774, 16772, 16770, 16768, 16870, 16868, 16866, 16864, + 16966, 16964, 16962, 16960, 17062, 17060, 17058, 17056, + 17158, 17156, 17154, 17152, 17254, 17252, 17250, 17248, + 17350, 17348, 17346, 17344, 17446, 17444, 17442, 17440, + 17542, 17540, 17538, 17536, 17638, 17636, 17634, 17632, + 17734, 17732, 17730, 17728, 17830, 17828, 17826, 17824, + 17926, 17924, 17922, 17920, 18022, 18020, 18018, 18016, + 18118, 18116, 18114, 18112, 18214, 18212, 18210, 18208, + 18278, 18276, 18274, 18272, 18374, 18372, 18370, 18368, + 18470, 18468, 18466, 18464, 18566, 18564, 18562, 18560, + 18662, 18660, 18658, 18656, 18758, 18756, 18754, 18752, + 18854, 18852, 18850, 18848, 18950, 18948, 18946, 18944, + 19046, 19044, 19042, 19040, 19142, 19140, 19138, 19136, + 19238, 19236, 19234, 19232, 19334, 19332, 19330, 19328, + 19430, 19428, 19426, 19424, 19526, 19524, 19522, 19520, + 19622, 19620, 19618, 19616, 19718, 19716, 19714, 19712, + 19814, 19812, 19810, 19808, }, + /* 1 */ + {14, 12, 10, 8, 110, 108, 106, 104, + 206, 204, 202, 200, 302, 300, 298, 296, + 398, 396, 394, 392, 494, 492, 490, 488, + 590, 588, 586, 584, 686, 684, 682, 680, + 782, 780, 778, 776, 878, 876, 874, 872, + 974, 972, 970, 968, 1070, 1068, 1066, 1064, + 1166, 1164, 1162, 1160, 1262, 1260, 1258, 1256, + 1358, 1356, 1354, 1352, 1454, 1452, 1450, 1448, + 1550, 1548, 1546, 1544, 1646, 1644, 1642, 1640, + 1806, 1804, 1802, 1800, 1902, 1900, 1898, 1896, + 1998, 1996, 1994, 1992, 2094, 2092, 2090, 2088, + 2190, 2188, 2186, 2184, 2286, 2284, 2282, 2280, + 2382, 2380, 2378, 2376, 2478, 2476, 2474, 2472, + 2574, 2572, 2570, 2568, 2670, 2668, 2666, 2664, + 2766, 2764, 2762, 2760, 2862, 2860, 2858, 2856, + 2958, 2956, 2954, 2952, 3054, 3052, 3050, 3048, + 3150, 3148, 3146, 3144, 3246, 3244, 3242, 3240, + 3342, 3340, 3338, 3336, 3406, 3404, 3402, 3400, + 3502, 3500, 3498, 3496, 3598, 3596, 3594, 3592, + 3694, 3692, 3690, 3688, 3790, 3788, 3786, 3784, + 3886, 3884, 3882, 3880, 3982, 3980, 3978, 3976, + 4078, 4076, 4074, 4072, 4174, 4172, 4170, 4168, + 4270, 4268, 4266, 4264, 4366, 4364, 4362, 4360, + 4462, 4460, 4458, 4456, 4558, 4556, 4554, 4552, + 4654, 4652, 4650, 4648, 4750, 4748, 4746, 4744, + 4846, 4844, 4842, 4840, 4942, 4940, 4938, 4936, + 5006, 5004, 5002, 5000, 5102, 5100, 5098, 5096, + 5198, 5196, 5194, 5192, 5294, 5292, 5290, 5288, + 5390, 5388, 5386, 5384, 5486, 5484, 5482, 5480, + 5582, 5580, 5578, 5576, 5678, 5676, 5674, 5672, + 5774, 5772, 5770, 5768, 5870, 5868, 5866, 5864, + 5966, 5964, 5962, 5960, 6062, 6060, 6058, 6056, + 6158, 6156, 6154, 6152, 6254, 6252, 6250, 6248, + 6350, 6348, 6346, 6344, 6446, 6444, 6442, 6440, + 6542, 6540, 6538, 6536, 6702, 6700, 6698, 6696, + 6798, 6796, 6794, 6792, 6894, 6892, 6890, 6888, + 6990, 6988, 6986, 6984, 7086, 7084, 7082, 7080, + 7182, 7180, 7178, 7176, 7278, 7276, 7274, 7272, + 7374, 7372, 7370, 7368, 7470, 7468, 7466, 7464, + 7566, 7564, 7562, 7560, 7662, 7660, 7658, 7656, + 7758, 7756, 7754, 7752, 7854, 7852, 7850, 7848, + 7950, 7948, 7946, 7944, 8046, 8044, 8042, 8040, + 8142, 8140, 8138, 8136, 8238, 8236, 8234, 8232, + 8334, 8332, 8330, 8328, 8398, 8396, 8394, 8392, + 8494, 8492, 8490, 8488, 8590, 8588, 8586, 8584, + 8686, 8684, 8682, 8680, 8782, 8780, 8778, 8776, + 8878, 8876, 8874, 8872, 8974, 8972, 8970, 8968, + 9070, 9068, 9066, 9064, 9166, 9164, 9162, 9160, + 9262, 9260, 9258, 9256, 9358, 9356, 9354, 9352, + 9454, 9452, 9450, 9448, 9550, 9548, 9546, 9544, + 9646, 9644, 9642, 9640, 9742, 9740, 9738, 9736, + 9838, 9836, 9834, 9832, 9934, 9932, 9930, 9928, + 9998, 9996, 9994, 9992, 10094, 10092, 10090, 10088, + 10190, 10188, 10186, 10184, 10286, 10284, 10282, 10280, + 10382, 10380, 10378, 10376, 10478, 10476, 10474, 10472, + 10574, 10572, 10570, 10568, 10670, 10668, 10666, 10664, + 10766, 10764, 10762, 10760, 10862, 10860, 10858, 10856, + 10958, 10956, 10954, 10952, 11054, 11052, 11050, 11048, + 11150, 11148, 11146, 11144, 11246, 11244, 11242, 11240, + 11342, 11340, 11338, 11336, 11438, 11436, 11434, 11432, + 11534, 11532, 11530, 11528, 11694, 11692, 11690, 11688, + 11790, 11788, 11786, 11784, 11886, 11884, 11882, 11880, + 11982, 11980, 11978, 11976, 12078, 12076, 12074, 12072, + 12174, 12172, 12170, 12168, 12270, 12268, 12266, 12264, + 12366, 12364, 12362, 12360, 12462, 12460, 12458, 12456, + 12558, 12556, 12554, 12552, 12654, 12652, 12650, 12648, + 12750, 12748, 12746, 12744, 12846, 12844, 12842, 12840, + 12942, 12940, 12938, 12936, 13038, 13036, 13034, 13032, + 13134, 13132, 13130, 13128, 13230, 13228, 13226, 13224, + 13294, 13292, 13290, 13288, 13390, 13388, 13386, 13384, + 13486, 13484, 13482, 13480, 13582, 13580, 13578, 13576, + 13678, 13676, 13674, 13672, 13774, 13772, 13770, 13768, + 13870, 13868, 13866, 13864, 13966, 13964, 13962, 13960, + 14062, 14060, 14058, 14056, 14158, 14156, 14154, 14152, + 14254, 14252, 14250, 14248, 14350, 14348, 14346, 14344, + 14446, 14444, 14442, 14440, 14542, 14540, 14538, 14536, + 14638, 14636, 14634, 14632, 14734, 14732, 14730, 14728, + 14830, 14828, 14826, 14824, 14926, 14924, 14922, 14920, + 14990, 14988, 14986, 14984, 15086, 15084, 15082, 15080, + 15182, 15180, 15178, 15176, 15278, 15276, 15274, 15272, + 15374, 15372, 15370, 15368, 15470, 15468, 15466, 15464, + 15566, 15564, 15562, 15560, 15662, 15660, 15658, 15656, + 15758, 15756, 15754, 15752, 15854, 15852, 15850, 15848, + 15950, 15948, 15946, 15944, 16046, 16044, 16042, 16040, + 16142, 16140, 16138, 16136, 16238, 16236, 16234, 16232, + 16334, 16332, 16330, 16328, 16430, 16428, 16426, 16424, + 16526, 16524, 16522, 16520, 16686, 16684, 16682, 16680, + 16782, 16780, 16778, 16776, 16878, 16876, 16874, 16872, + 16974, 16972, 16970, 16968, 17070, 17068, 17066, 17064, + 17166, 17164, 17162, 17160, 17262, 17260, 17258, 17256, + 17358, 17356, 17354, 17352, 17454, 17452, 17450, 17448, + 17550, 17548, 17546, 17544, 17646, 17644, 17642, 17640, + 17742, 17740, 17738, 17736, 17838, 17836, 17834, 17832, + 17934, 17932, 17930, 17928, 18030, 18028, 18026, 18024, + 18126, 18124, 18122, 18120, 18222, 18220, 18218, 18216, + 18286, 18284, 18282, 18280, 18382, 18380, 18378, 18376, + 18478, 18476, 18474, 18472, 18574, 18572, 18570, 18568, + 18670, 18668, 18666, 18664, 18766, 18764, 18762, 18760, + 18862, 18860, 18858, 18856, 18958, 18956, 18954, 18952, + 19054, 19052, 19050, 19048, 19150, 19148, 19146, 19144, + 19246, 19244, 19242, 19240, 19342, 19340, 19338, 19336, + 19438, 19436, 19434, 19432, 19534, 19532, 19530, 19528, + 19630, 19628, 19626, 19624, 19726, 19724, 19722, 19720, + 19822, 19820, 19818, 19816, }, + /* 2 */ + {22, 20, 18, 16, 118, 116, 114, 112, + 214, 212, 210, 208, 310, 308, 306, 304, + 406, 404, 402, 400, 502, 500, 498, 496, + 598, 596, 594, 592, 694, 692, 690, 688, + 790, 788, 786, 784, 886, 884, 882, 880, + 982, 980, 978, 976, 1078, 1076, 1074, 1072, + 1174, 1172, 1170, 1168, 1270, 1268, 1266, 1264, + 1366, 1364, 1362, 1360, 1462, 1460, 1458, 1456, + 1558, 1556, 1554, 1552, 1654, 1652, 1650, 1648, + 1814, 1812, 1810, 1808, 1910, 1908, 1906, 1904, + 2006, 2004, 2002, 2000, 2102, 2100, 2098, 2096, + 2198, 2196, 2194, 2192, 2294, 2292, 2290, 2288, + 2390, 2388, 2386, 2384, 2486, 2484, 2482, 2480, + 2582, 2580, 2578, 2576, 2678, 2676, 2674, 2672, + 2774, 2772, 2770, 2768, 2870, 2868, 2866, 2864, + 2966, 2964, 2962, 2960, 3062, 3060, 3058, 3056, + 3158, 3156, 3154, 3152, 3254, 3252, 3250, 3248, + 3350, 3348, 3346, 3344, 3414, 3412, 3410, 3408, + 3510, 3508, 3506, 3504, 3606, 3604, 3602, 3600, + 3702, 3700, 3698, 3696, 3798, 3796, 3794, 3792, + 3894, 3892, 3890, 3888, 3990, 3988, 3986, 3984, + 4086, 4084, 4082, 4080, 4182, 4180, 4178, 4176, + 4278, 4276, 4274, 4272, 4374, 4372, 4370, 4368, + 4470, 4468, 4466, 4464, 4566, 4564, 4562, 4560, + 4662, 4660, 4658, 4656, 4758, 4756, 4754, 4752, + 4854, 4852, 4850, 4848, 4950, 4948, 4946, 4944, + 5014, 5012, 5010, 5008, 5110, 5108, 5106, 5104, + 5206, 5204, 5202, 5200, 5302, 5300, 5298, 5296, + 5398, 5396, 5394, 5392, 5494, 5492, 5490, 5488, + 5590, 5588, 5586, 5584, 5686, 5684, 5682, 5680, + 5782, 5780, 5778, 5776, 5878, 5876, 5874, 5872, + 5974, 5972, 5970, 5968, 6070, 6068, 6066, 6064, + 6166, 6164, 6162, 6160, 6262, 6260, 6258, 6256, + 6358, 6356, 6354, 6352, 6454, 6452, 6450, 6448, + 6550, 6548, 6546, 6544, 6710, 6708, 6706, 6704, + 6806, 6804, 6802, 6800, 6902, 6900, 6898, 6896, + 6998, 6996, 6994, 6992, 7094, 7092, 7090, 7088, + 7190, 7188, 7186, 7184, 7286, 7284, 7282, 7280, + 7382, 7380, 7378, 7376, 7478, 7476, 7474, 7472, + 7574, 7572, 7570, 7568, 7670, 7668, 7666, 7664, + 7766, 7764, 7762, 7760, 7862, 7860, 7858, 7856, + 7958, 7956, 7954, 7952, 8054, 8052, 8050, 8048, + 8150, 8148, 8146, 8144, 8246, 8244, 8242, 8240, + 8342, 8340, 8338, 8336, 8406, 8404, 8402, 8400, + 8502, 8500, 8498, 8496, 8598, 8596, 8594, 8592, + 8694, 8692, 8690, 8688, 8790, 8788, 8786, 8784, + 8886, 8884, 8882, 8880, 8982, 8980, 8978, 8976, + 9078, 9076, 9074, 9072, 9174, 9172, 9170, 9168, + 9270, 9268, 9266, 9264, 9366, 9364, 9362, 9360, + 9462, 9460, 9458, 9456, 9558, 9556, 9554, 9552, + 9654, 9652, 9650, 9648, 9750, 9748, 9746, 9744, + 9846, 9844, 9842, 9840, 9942, 9940, 9938, 9936, + 10006, 10004, 10002, 10000, 10102, 10100, 10098, 10096, + 10198, 10196, 10194, 10192, 10294, 10292, 10290, 10288, + 10390, 10388, 10386, 10384, 10486, 10484, 10482, 10480, + 10582, 10580, 10578, 10576, 10678, 10676, 10674, 10672, + 10774, 10772, 10770, 10768, 10870, 10868, 10866, 10864, + 10966, 10964, 10962, 10960, 11062, 11060, 11058, 11056, + 11158, 11156, 11154, 11152, 11254, 11252, 11250, 11248, + 11350, 11348, 11346, 11344, 11446, 11444, 11442, 11440, + 11542, 11540, 11538, 11536, 11702, 11700, 11698, 11696, + 11798, 11796, 11794, 11792, 11894, 11892, 11890, 11888, + 11990, 11988, 11986, 11984, 12086, 12084, 12082, 12080, + 12182, 12180, 12178, 12176, 12278, 12276, 12274, 12272, + 12374, 12372, 12370, 12368, 12470, 12468, 12466, 12464, + 12566, 12564, 12562, 12560, 12662, 12660, 12658, 12656, + 12758, 12756, 12754, 12752, 12854, 12852, 12850, 12848, + 12950, 12948, 12946, 12944, 13046, 13044, 13042, 13040, + 13142, 13140, 13138, 13136, 13238, 13236, 13234, 13232, + 13302, 13300, 13298, 13296, 13398, 13396, 13394, 13392, + 13494, 13492, 13490, 13488, 13590, 13588, 13586, 13584, + 13686, 13684, 13682, 13680, 13782, 13780, 13778, 13776, + 13878, 13876, 13874, 13872, 13974, 13972, 13970, 13968, + 14070, 14068, 14066, 14064, 14166, 14164, 14162, 14160, + 14262, 14260, 14258, 14256, 14358, 14356, 14354, 14352, + 14454, 14452, 14450, 14448, 14550, 14548, 14546, 14544, + 14646, 14644, 14642, 14640, 14742, 14740, 14738, 14736, + 14838, 14836, 14834, 14832, 14934, 14932, 14930, 14928, + 14998, 14996, 14994, 14992, 15094, 15092, 15090, 15088, + 15190, 15188, 15186, 15184, 15286, 15284, 15282, 15280, + 15382, 15380, 15378, 15376, 15478, 15476, 15474, 15472, + 15574, 15572, 15570, 15568, 15670, 15668, 15666, 15664, + 15766, 15764, 15762, 15760, 15862, 15860, 15858, 15856, + 15958, 15956, 15954, 15952, 16054, 16052, 16050, 16048, + 16150, 16148, 16146, 16144, 16246, 16244, 16242, 16240, + 16342, 16340, 16338, 16336, 16438, 16436, 16434, 16432, + 16534, 16532, 16530, 16528, 16694, 16692, 16690, 16688, + 16790, 16788, 16786, 16784, 16886, 16884, 16882, 16880, + 16982, 16980, 16978, 16976, 17078, 17076, 17074, 17072, + 17174, 17172, 17170, 17168, 17270, 17268, 17266, 17264, + 17366, 17364, 17362, 17360, 17462, 17460, 17458, 17456, + 17558, 17556, 17554, 17552, 17654, 17652, 17650, 17648, + 17750, 17748, 17746, 17744, 17846, 17844, 17842, 17840, + 17942, 17940, 17938, 17936, 18038, 18036, 18034, 18032, + 18134, 18132, 18130, 18128, 18230, 18228, 18226, 18224, + 18294, 18292, 18290, 18288, 18390, 18388, 18386, 18384, + 18486, 18484, 18482, 18480, 18582, 18580, 18578, 18576, + 18678, 18676, 18674, 18672, 18774, 18772, 18770, 18768, + 18870, 18868, 18866, 18864, 18966, 18964, 18962, 18960, + 19062, 19060, 19058, 19056, 19158, 19156, 19154, 19152, + 19254, 19252, 19250, 19248, 19350, 19348, 19346, 19344, + 19446, 19444, 19442, 19440, 19542, 19540, 19538, 19536, + 19638, 19636, 19634, 19632, 19734, 19732, 19730, 19728, + 19830, 19828, 19826, 19824, }, + /* 3 */ + {30, 28, 26, 24, 126, 124, 122, 120, + 222, 220, 218, 216, 318, 316, 314, 312, + 414, 412, 410, 408, 510, 508, 506, 504, + 606, 604, 602, 600, 702, 700, 698, 696, + 798, 796, 794, 792, 894, 892, 890, 888, + 990, 988, 986, 984, 1086, 1084, 1082, 1080, + 1182, 1180, 1178, 1176, 1278, 1276, 1274, 1272, + 1374, 1372, 1370, 1368, 1470, 1468, 1466, 1464, + 1566, 1564, 1562, 1560, 1662, 1660, 1658, 1656, + 1822, 1820, 1818, 1816, 1918, 1916, 1914, 1912, + 2014, 2012, 2010, 2008, 2110, 2108, 2106, 2104, + 2206, 2204, 2202, 2200, 2302, 2300, 2298, 2296, + 2398, 2396, 2394, 2392, 2494, 2492, 2490, 2488, + 2590, 2588, 2586, 2584, 2686, 2684, 2682, 2680, + 2782, 2780, 2778, 2776, 2878, 2876, 2874, 2872, + 2974, 2972, 2970, 2968, 3070, 3068, 3066, 3064, + 3166, 3164, 3162, 3160, 3262, 3260, 3258, 3256, + 3358, 3356, 3354, 3352, 3422, 3420, 3418, 3416, + 3518, 3516, 3514, 3512, 3614, 3612, 3610, 3608, + 3710, 3708, 3706, 3704, 3806, 3804, 3802, 3800, + 3902, 3900, 3898, 3896, 3998, 3996, 3994, 3992, + 4094, 4092, 4090, 4088, 4190, 4188, 4186, 4184, + 4286, 4284, 4282, 4280, 4382, 4380, 4378, 4376, + 4478, 4476, 4474, 4472, 4574, 4572, 4570, 4568, + 4670, 4668, 4666, 4664, 4766, 4764, 4762, 4760, + 4862, 4860, 4858, 4856, 4958, 4956, 4954, 4952, + 5022, 5020, 5018, 5016, 5118, 5116, 5114, 5112, + 5214, 5212, 5210, 5208, 5310, 5308, 5306, 5304, + 5406, 5404, 5402, 5400, 5502, 5500, 5498, 5496, + 5598, 5596, 5594, 5592, 5694, 5692, 5690, 5688, + 5790, 5788, 5786, 5784, 5886, 5884, 5882, 5880, + 5982, 5980, 5978, 5976, 6078, 6076, 6074, 6072, + 6174, 6172, 6170, 6168, 6270, 6268, 6266, 6264, + 6366, 6364, 6362, 6360, 6462, 6460, 6458, 6456, + 6558, 6556, 6554, 6552, 6718, 6716, 6714, 6712, + 6814, 6812, 6810, 6808, 6910, 6908, 6906, 6904, + 7006, 7004, 7002, 7000, 7102, 7100, 7098, 7096, + 7198, 7196, 7194, 7192, 7294, 7292, 7290, 7288, + 7390, 7388, 7386, 7384, 7486, 7484, 7482, 7480, + 7582, 7580, 7578, 7576, 7678, 7676, 7674, 7672, + 7774, 7772, 7770, 7768, 7870, 7868, 7866, 7864, + 7966, 7964, 7962, 7960, 8062, 8060, 8058, 8056, + 8158, 8156, 8154, 8152, 8254, 8252, 8250, 8248, + 8350, 8348, 8346, 8344, 8414, 8412, 8410, 8408, + 8510, 8508, 8506, 8504, 8606, 8604, 8602, 8600, + 8702, 8700, 8698, 8696, 8798, 8796, 8794, 8792, + 8894, 8892, 8890, 8888, 8990, 8988, 8986, 8984, + 9086, 9084, 9082, 9080, 9182, 9180, 9178, 9176, + 9278, 9276, 9274, 9272, 9374, 9372, 9370, 9368, + 9470, 9468, 9466, 9464, 9566, 9564, 9562, 9560, + 9662, 9660, 9658, 9656, 9758, 9756, 9754, 9752, + 9854, 9852, 9850, 9848, 9950, 9948, 9946, 9944, + 10014, 10012, 10010, 10008, 10110, 10108, 10106, 10104, + 10206, 10204, 10202, 10200, 10302, 10300, 10298, 10296, + 10398, 10396, 10394, 10392, 10494, 10492, 10490, 10488, + 10590, 10588, 10586, 10584, 10686, 10684, 10682, 10680, + 10782, 10780, 10778, 10776, 10878, 10876, 10874, 10872, + 10974, 10972, 10970, 10968, 11070, 11068, 11066, 11064, + 11166, 11164, 11162, 11160, 11262, 11260, 11258, 11256, + 11358, 11356, 11354, 11352, 11454, 11452, 11450, 11448, + 11550, 11548, 11546, 11544, 11710, 11708, 11706, 11704, + 11806, 11804, 11802, 11800, 11902, 11900, 11898, 11896, + 11998, 11996, 11994, 11992, 12094, 12092, 12090, 12088, + 12190, 12188, 12186, 12184, 12286, 12284, 12282, 12280, + 12382, 12380, 12378, 12376, 12478, 12476, 12474, 12472, + 12574, 12572, 12570, 12568, 12670, 12668, 12666, 12664, + 12766, 12764, 12762, 12760, 12862, 12860, 12858, 12856, + 12958, 12956, 12954, 12952, 13054, 13052, 13050, 13048, + 13150, 13148, 13146, 13144, 13246, 13244, 13242, 13240, + 13310, 13308, 13306, 13304, 13406, 13404, 13402, 13400, + 13502, 13500, 13498, 13496, 13598, 13596, 13594, 13592, + 13694, 13692, 13690, 13688, 13790, 13788, 13786, 13784, + 13886, 13884, 13882, 13880, 13982, 13980, 13978, 13976, + 14078, 14076, 14074, 14072, 14174, 14172, 14170, 14168, + 14270, 14268, 14266, 14264, 14366, 14364, 14362, 14360, + 14462, 14460, 14458, 14456, 14558, 14556, 14554, 14552, + 14654, 14652, 14650, 14648, 14750, 14748, 14746, 14744, + 14846, 14844, 14842, 14840, 14942, 14940, 14938, 14936, + 15006, 15004, 15002, 15000, 15102, 15100, 15098, 15096, + 15198, 15196, 15194, 15192, 15294, 15292, 15290, 15288, + 15390, 15388, 15386, 15384, 15486, 15484, 15482, 15480, + 15582, 15580, 15578, 15576, 15678, 15676, 15674, 15672, + 15774, 15772, 15770, 15768, 15870, 15868, 15866, 15864, + 15966, 15964, 15962, 15960, 16062, 16060, 16058, 16056, + 16158, 16156, 16154, 16152, 16254, 16252, 16250, 16248, + 16350, 16348, 16346, 16344, 16446, 16444, 16442, 16440, + 16542, 16540, 16538, 16536, 16702, 16700, 16698, 16696, + 16798, 16796, 16794, 16792, 16894, 16892, 16890, 16888, + 16990, 16988, 16986, 16984, 17086, 17084, 17082, 17080, + 17182, 17180, 17178, 17176, 17278, 17276, 17274, 17272, + 17374, 17372, 17370, 17368, 17470, 17468, 17466, 17464, + 17566, 17564, 17562, 17560, 17662, 17660, 17658, 17656, + 17758, 17756, 17754, 17752, 17854, 17852, 17850, 17848, + 17950, 17948, 17946, 17944, 18046, 18044, 18042, 18040, + 18142, 18140, 18138, 18136, 18238, 18236, 18234, 18232, + 18302, 18300, 18298, 18296, 18398, 18396, 18394, 18392, + 18494, 18492, 18490, 18488, 18590, 18588, 18586, 18584, + 18686, 18684, 18682, 18680, 18782, 18780, 18778, 18776, + 18878, 18876, 18874, 18872, 18974, 18972, 18970, 18968, + 19070, 19068, 19066, 19064, 19166, 19164, 19162, 19160, + 19262, 19260, 19258, 19256, 19358, 19356, 19354, 19352, + 19454, 19452, 19450, 19448, 19550, 19548, 19546, 19544, + 19646, 19644, 19642, 19640, 19742, 19740, 19738, 19736, + 19838, 19836, 19834, 19832, }, + /* 4 */ + {38, 36, 34, 32, 134, 132, 130, 128, + 230, 228, 226, 224, 326, 324, 322, 320, + 422, 420, 418, 416, 518, 516, 514, 512, + 614, 612, 610, 608, 710, 708, 706, 704, + 806, 804, 802, 800, 902, 900, 898, 896, + 998, 996, 994, 992, 1094, 1092, 1090, 1088, + 1190, 1188, 1186, 1184, 1286, 1284, 1282, 1280, + 1382, 1380, 1378, 1376, 1478, 1476, 1474, 1472, + 1574, 1572, 1570, 1568, 1670, 1668, 1666, 1664, + 1734, 1732, 1730, 1728, 1830, 1828, 1826, 1824, + 1926, 1924, 1922, 1920, 2022, 2020, 2018, 2016, + 2118, 2116, 2114, 2112, 2214, 2212, 2210, 2208, + 2310, 2308, 2306, 2304, 2406, 2404, 2402, 2400, + 2502, 2500, 2498, 2496, 2598, 2596, 2594, 2592, + 2694, 2692, 2690, 2688, 2790, 2788, 2786, 2784, + 2886, 2884, 2882, 2880, 2982, 2980, 2978, 2976, + 3078, 3076, 3074, 3072, 3174, 3172, 3170, 3168, + 3270, 3268, 3266, 3264, 3430, 3428, 3426, 3424, + 3526, 3524, 3522, 3520, 3622, 3620, 3618, 3616, + 3718, 3716, 3714, 3712, 3814, 3812, 3810, 3808, + 3910, 3908, 3906, 3904, 4006, 4004, 4002, 4000, + 4102, 4100, 4098, 4096, 4198, 4196, 4194, 4192, + 4294, 4292, 4290, 4288, 4390, 4388, 4386, 4384, + 4486, 4484, 4482, 4480, 4582, 4580, 4578, 4576, + 4678, 4676, 4674, 4672, 4774, 4772, 4770, 4768, + 4870, 4868, 4866, 4864, 4966, 4964, 4962, 4960, + 5030, 5028, 5026, 5024, 5126, 5124, 5122, 5120, + 5222, 5220, 5218, 5216, 5318, 5316, 5314, 5312, + 5414, 5412, 5410, 5408, 5510, 5508, 5506, 5504, + 5606, 5604, 5602, 5600, 5702, 5700, 5698, 5696, + 5798, 5796, 5794, 5792, 5894, 5892, 5890, 5888, + 5990, 5988, 5986, 5984, 6086, 6084, 6082, 6080, + 6182, 6180, 6178, 6176, 6278, 6276, 6274, 6272, + 6374, 6372, 6370, 6368, 6470, 6468, 6466, 6464, + 6566, 6564, 6562, 6560, 6630, 6628, 6626, 6624, + 6726, 6724, 6722, 6720, 6822, 6820, 6818, 6816, + 6918, 6916, 6914, 6912, 7014, 7012, 7010, 7008, + 7110, 7108, 7106, 7104, 7206, 7204, 7202, 7200, + 7302, 7300, 7298, 7296, 7398, 7396, 7394, 7392, + 7494, 7492, 7490, 7488, 7590, 7588, 7586, 7584, + 7686, 7684, 7682, 7680, 7782, 7780, 7778, 7776, + 7878, 7876, 7874, 7872, 7974, 7972, 7970, 7968, + 8070, 8068, 8066, 8064, 8166, 8164, 8162, 8160, + 8262, 8260, 8258, 8256, 8422, 8420, 8418, 8416, + 8518, 8516, 8514, 8512, 8614, 8612, 8610, 8608, + 8710, 8708, 8706, 8704, 8806, 8804, 8802, 8800, + 8902, 8900, 8898, 8896, 8998, 8996, 8994, 8992, + 9094, 9092, 9090, 9088, 9190, 9188, 9186, 9184, + 9286, 9284, 9282, 9280, 9382, 9380, 9378, 9376, + 9478, 9476, 9474, 9472, 9574, 9572, 9570, 9568, + 9670, 9668, 9666, 9664, 9766, 9764, 9762, 9760, + 9862, 9860, 9858, 9856, 9958, 9956, 9954, 9952, + 10022, 10020, 10018, 10016, 10118, 10116, 10114, 10112, + 10214, 10212, 10210, 10208, 10310, 10308, 10306, 10304, + 10406, 10404, 10402, 10400, 10502, 10500, 10498, 10496, + 10598, 10596, 10594, 10592, 10694, 10692, 10690, 10688, + 10790, 10788, 10786, 10784, 10886, 10884, 10882, 10880, + 10982, 10980, 10978, 10976, 11078, 11076, 11074, 11072, + 11174, 11172, 11170, 11168, 11270, 11268, 11266, 11264, + 11366, 11364, 11362, 11360, 11462, 11460, 11458, 11456, + 11558, 11556, 11554, 11552, 11622, 11620, 11618, 11616, + 11718, 11716, 11714, 11712, 11814, 11812, 11810, 11808, + 11910, 11908, 11906, 11904, 12006, 12004, 12002, 12000, + 12102, 12100, 12098, 12096, 12198, 12196, 12194, 12192, + 12294, 12292, 12290, 12288, 12390, 12388, 12386, 12384, + 12486, 12484, 12482, 12480, 12582, 12580, 12578, 12576, + 12678, 12676, 12674, 12672, 12774, 12772, 12770, 12768, + 12870, 12868, 12866, 12864, 12966, 12964, 12962, 12960, + 13062, 13060, 13058, 13056, 13158, 13156, 13154, 13152, + 13318, 13316, 13314, 13312, 13414, 13412, 13410, 13408, + 13510, 13508, 13506, 13504, 13606, 13604, 13602, 13600, + 13702, 13700, 13698, 13696, 13798, 13796, 13794, 13792, + 13894, 13892, 13890, 13888, 13990, 13988, 13986, 13984, + 14086, 14084, 14082, 14080, 14182, 14180, 14178, 14176, + 14278, 14276, 14274, 14272, 14374, 14372, 14370, 14368, + 14470, 14468, 14466, 14464, 14566, 14564, 14562, 14560, + 14662, 14660, 14658, 14656, 14758, 14756, 14754, 14752, + 14854, 14852, 14850, 14848, 14950, 14948, 14946, 14944, + 15014, 15012, 15010, 15008, 15110, 15108, 15106, 15104, + 15206, 15204, 15202, 15200, 15302, 15300, 15298, 15296, + 15398, 15396, 15394, 15392, 15494, 15492, 15490, 15488, + 15590, 15588, 15586, 15584, 15686, 15684, 15682, 15680, + 15782, 15780, 15778, 15776, 15878, 15876, 15874, 15872, + 15974, 15972, 15970, 15968, 16070, 16068, 16066, 16064, + 16166, 16164, 16162, 16160, 16262, 16260, 16258, 16256, + 16358, 16356, 16354, 16352, 16454, 16452, 16450, 16448, + 16550, 16548, 16546, 16544, 16614, 16612, 16610, 16608, + 16710, 16708, 16706, 16704, 16806, 16804, 16802, 16800, + 16902, 16900, 16898, 16896, 16998, 16996, 16994, 16992, + 17094, 17092, 17090, 17088, 17190, 17188, 17186, 17184, + 17286, 17284, 17282, 17280, 17382, 17380, 17378, 17376, + 17478, 17476, 17474, 17472, 17574, 17572, 17570, 17568, + 17670, 17668, 17666, 17664, 17766, 17764, 17762, 17760, + 17862, 17860, 17858, 17856, 17958, 17956, 17954, 17952, + 18054, 18052, 18050, 18048, 18150, 18148, 18146, 18144, + 18310, 18308, 18306, 18304, 18406, 18404, 18402, 18400, + 18502, 18500, 18498, 18496, 18598, 18596, 18594, 18592, + 18694, 18692, 18690, 18688, 18790, 18788, 18786, 18784, + 18886, 18884, 18882, 18880, 18982, 18980, 18978, 18976, + 19078, 19076, 19074, 19072, 19174, 19172, 19170, 19168, + 19270, 19268, 19266, 19264, 19366, 19364, 19362, 19360, + 19462, 19460, 19458, 19456, 19558, 19556, 19554, 19552, + 19654, 19652, 19650, 19648, 19750, 19748, 19746, 19744, + 19846, 19844, 19842, 19840, }, + /* 5 */ + {46, 44, 42, 40, 142, 140, 138, 136, + 238, 236, 234, 232, 334, 332, 330, 328, + 430, 428, 426, 424, 526, 524, 522, 520, + 622, 620, 618, 616, 718, 716, 714, 712, + 814, 812, 810, 808, 910, 908, 906, 904, + 1006, 1004, 1002, 1000, 1102, 1100, 1098, 1096, + 1198, 1196, 1194, 1192, 1294, 1292, 1290, 1288, + 1390, 1388, 1386, 1384, 1486, 1484, 1482, 1480, + 1582, 1580, 1578, 1576, 1678, 1676, 1674, 1672, + 1742, 1740, 1738, 1736, 1838, 1836, 1834, 1832, + 1934, 1932, 1930, 1928, 2030, 2028, 2026, 2024, + 2126, 2124, 2122, 2120, 2222, 2220, 2218, 2216, + 2318, 2316, 2314, 2312, 2414, 2412, 2410, 2408, + 2510, 2508, 2506, 2504, 2606, 2604, 2602, 2600, + 2702, 2700, 2698, 2696, 2798, 2796, 2794, 2792, + 2894, 2892, 2890, 2888, 2990, 2988, 2986, 2984, + 3086, 3084, 3082, 3080, 3182, 3180, 3178, 3176, + 3278, 3276, 3274, 3272, 3438, 3436, 3434, 3432, + 3534, 3532, 3530, 3528, 3630, 3628, 3626, 3624, + 3726, 3724, 3722, 3720, 3822, 3820, 3818, 3816, + 3918, 3916, 3914, 3912, 4014, 4012, 4010, 4008, + 4110, 4108, 4106, 4104, 4206, 4204, 4202, 4200, + 4302, 4300, 4298, 4296, 4398, 4396, 4394, 4392, + 4494, 4492, 4490, 4488, 4590, 4588, 4586, 4584, + 4686, 4684, 4682, 4680, 4782, 4780, 4778, 4776, + 4878, 4876, 4874, 4872, 4974, 4972, 4970, 4968, + 5038, 5036, 5034, 5032, 5134, 5132, 5130, 5128, + 5230, 5228, 5226, 5224, 5326, 5324, 5322, 5320, + 5422, 5420, 5418, 5416, 5518, 5516, 5514, 5512, + 5614, 5612, 5610, 5608, 5710, 5708, 5706, 5704, + 5806, 5804, 5802, 5800, 5902, 5900, 5898, 5896, + 5998, 5996, 5994, 5992, 6094, 6092, 6090, 6088, + 6190, 6188, 6186, 6184, 6286, 6284, 6282, 6280, + 6382, 6380, 6378, 6376, 6478, 6476, 6474, 6472, + 6574, 6572, 6570, 6568, 6638, 6636, 6634, 6632, + 6734, 6732, 6730, 6728, 6830, 6828, 6826, 6824, + 6926, 6924, 6922, 6920, 7022, 7020, 7018, 7016, + 7118, 7116, 7114, 7112, 7214, 7212, 7210, 7208, + 7310, 7308, 7306, 7304, 7406, 7404, 7402, 7400, + 7502, 7500, 7498, 7496, 7598, 7596, 7594, 7592, + 7694, 7692, 7690, 7688, 7790, 7788, 7786, 7784, + 7886, 7884, 7882, 7880, 7982, 7980, 7978, 7976, + 8078, 8076, 8074, 8072, 8174, 8172, 8170, 8168, + 8270, 8268, 8266, 8264, 8430, 8428, 8426, 8424, + 8526, 8524, 8522, 8520, 8622, 8620, 8618, 8616, + 8718, 8716, 8714, 8712, 8814, 8812, 8810, 8808, + 8910, 8908, 8906, 8904, 9006, 9004, 9002, 9000, + 9102, 9100, 9098, 9096, 9198, 9196, 9194, 9192, + 9294, 9292, 9290, 9288, 9390, 9388, 9386, 9384, + 9486, 9484, 9482, 9480, 9582, 9580, 9578, 9576, + 9678, 9676, 9674, 9672, 9774, 9772, 9770, 9768, + 9870, 9868, 9866, 9864, 9966, 9964, 9962, 9960, + 10030, 10028, 10026, 10024, 10126, 10124, 10122, 10120, + 10222, 10220, 10218, 10216, 10318, 10316, 10314, 10312, + 10414, 10412, 10410, 10408, 10510, 10508, 10506, 10504, + 10606, 10604, 10602, 10600, 10702, 10700, 10698, 10696, + 10798, 10796, 10794, 10792, 10894, 10892, 10890, 10888, + 10990, 10988, 10986, 10984, 11086, 11084, 11082, 11080, + 11182, 11180, 11178, 11176, 11278, 11276, 11274, 11272, + 11374, 11372, 11370, 11368, 11470, 11468, 11466, 11464, + 11566, 11564, 11562, 11560, 11630, 11628, 11626, 11624, + 11726, 11724, 11722, 11720, 11822, 11820, 11818, 11816, + 11918, 11916, 11914, 11912, 12014, 12012, 12010, 12008, + 12110, 12108, 12106, 12104, 12206, 12204, 12202, 12200, + 12302, 12300, 12298, 12296, 12398, 12396, 12394, 12392, + 12494, 12492, 12490, 12488, 12590, 12588, 12586, 12584, + 12686, 12684, 12682, 12680, 12782, 12780, 12778, 12776, + 12878, 12876, 12874, 12872, 12974, 12972, 12970, 12968, + 13070, 13068, 13066, 13064, 13166, 13164, 13162, 13160, + 13326, 13324, 13322, 13320, 13422, 13420, 13418, 13416, + 13518, 13516, 13514, 13512, 13614, 13612, 13610, 13608, + 13710, 13708, 13706, 13704, 13806, 13804, 13802, 13800, + 13902, 13900, 13898, 13896, 13998, 13996, 13994, 13992, + 14094, 14092, 14090, 14088, 14190, 14188, 14186, 14184, + 14286, 14284, 14282, 14280, 14382, 14380, 14378, 14376, + 14478, 14476, 14474, 14472, 14574, 14572, 14570, 14568, + 14670, 14668, 14666, 14664, 14766, 14764, 14762, 14760, + 14862, 14860, 14858, 14856, 14958, 14956, 14954, 14952, + 15022, 15020, 15018, 15016, 15118, 15116, 15114, 15112, + 15214, 15212, 15210, 15208, 15310, 15308, 15306, 15304, + 15406, 15404, 15402, 15400, 15502, 15500, 15498, 15496, + 15598, 15596, 15594, 15592, 15694, 15692, 15690, 15688, + 15790, 15788, 15786, 15784, 15886, 15884, 15882, 15880, + 15982, 15980, 15978, 15976, 16078, 16076, 16074, 16072, + 16174, 16172, 16170, 16168, 16270, 16268, 16266, 16264, + 16366, 16364, 16362, 16360, 16462, 16460, 16458, 16456, + 16558, 16556, 16554, 16552, 16622, 16620, 16618, 16616, + 16718, 16716, 16714, 16712, 16814, 16812, 16810, 16808, + 16910, 16908, 16906, 16904, 17006, 17004, 17002, 17000, + 17102, 17100, 17098, 17096, 17198, 17196, 17194, 17192, + 17294, 17292, 17290, 17288, 17390, 17388, 17386, 17384, + 17486, 17484, 17482, 17480, 17582, 17580, 17578, 17576, + 17678, 17676, 17674, 17672, 17774, 17772, 17770, 17768, + 17870, 17868, 17866, 17864, 17966, 17964, 17962, 17960, + 18062, 18060, 18058, 18056, 18158, 18156, 18154, 18152, + 18318, 18316, 18314, 18312, 18414, 18412, 18410, 18408, + 18510, 18508, 18506, 18504, 18606, 18604, 18602, 18600, + 18702, 18700, 18698, 18696, 18798, 18796, 18794, 18792, + 18894, 18892, 18890, 18888, 18990, 18988, 18986, 18984, + 19086, 19084, 19082, 19080, 19182, 19180, 19178, 19176, + 19278, 19276, 19274, 19272, 19374, 19372, 19370, 19368, + 19470, 19468, 19466, 19464, 19566, 19564, 19562, 19560, + 19662, 19660, 19658, 19656, 19758, 19756, 19754, 19752, + 19854, 19852, 19850, 19848, }, + /* 6 */ + {54, 52, 50, 48, 150, 148, 146, 144, + 246, 244, 242, 240, 342, 340, 338, 336, + 438, 436, 434, 432, 534, 532, 530, 528, + 630, 628, 626, 624, 726, 724, 722, 720, + 822, 820, 818, 816, 918, 916, 914, 912, + 1014, 1012, 1010, 1008, 1110, 1108, 1106, 1104, + 1206, 1204, 1202, 1200, 1302, 1300, 1298, 1296, + 1398, 1396, 1394, 1392, 1494, 1492, 1490, 1488, + 1590, 1588, 1586, 1584, 1686, 1684, 1682, 1680, + 1750, 1748, 1746, 1744, 1846, 1844, 1842, 1840, + 1942, 1940, 1938, 1936, 2038, 2036, 2034, 2032, + 2134, 2132, 2130, 2128, 2230, 2228, 2226, 2224, + 2326, 2324, 2322, 2320, 2422, 2420, 2418, 2416, + 2518, 2516, 2514, 2512, 2614, 2612, 2610, 2608, + 2710, 2708, 2706, 2704, 2806, 2804, 2802, 2800, + 2902, 2900, 2898, 2896, 2998, 2996, 2994, 2992, + 3094, 3092, 3090, 3088, 3190, 3188, 3186, 3184, + 3286, 3284, 3282, 3280, 3446, 3444, 3442, 3440, + 3542, 3540, 3538, 3536, 3638, 3636, 3634, 3632, + 3734, 3732, 3730, 3728, 3830, 3828, 3826, 3824, + 3926, 3924, 3922, 3920, 4022, 4020, 4018, 4016, + 4118, 4116, 4114, 4112, 4214, 4212, 4210, 4208, + 4310, 4308, 4306, 4304, 4406, 4404, 4402, 4400, + 4502, 4500, 4498, 4496, 4598, 4596, 4594, 4592, + 4694, 4692, 4690, 4688, 4790, 4788, 4786, 4784, + 4886, 4884, 4882, 4880, 4982, 4980, 4978, 4976, + 5046, 5044, 5042, 5040, 5142, 5140, 5138, 5136, + 5238, 5236, 5234, 5232, 5334, 5332, 5330, 5328, + 5430, 5428, 5426, 5424, 5526, 5524, 5522, 5520, + 5622, 5620, 5618, 5616, 5718, 5716, 5714, 5712, + 5814, 5812, 5810, 5808, 5910, 5908, 5906, 5904, + 6006, 6004, 6002, 6000, 6102, 6100, 6098, 6096, + 6198, 6196, 6194, 6192, 6294, 6292, 6290, 6288, + 6390, 6388, 6386, 6384, 6486, 6484, 6482, 6480, + 6582, 6580, 6578, 6576, 6646, 6644, 6642, 6640, + 6742, 6740, 6738, 6736, 6838, 6836, 6834, 6832, + 6934, 6932, 6930, 6928, 7030, 7028, 7026, 7024, + 7126, 7124, 7122, 7120, 7222, 7220, 7218, 7216, + 7318, 7316, 7314, 7312, 7414, 7412, 7410, 7408, + 7510, 7508, 7506, 7504, 7606, 7604, 7602, 7600, + 7702, 7700, 7698, 7696, 7798, 7796, 7794, 7792, + 7894, 7892, 7890, 7888, 7990, 7988, 7986, 7984, + 8086, 8084, 8082, 8080, 8182, 8180, 8178, 8176, + 8278, 8276, 8274, 8272, 8438, 8436, 8434, 8432, + 8534, 8532, 8530, 8528, 8630, 8628, 8626, 8624, + 8726, 8724, 8722, 8720, 8822, 8820, 8818, 8816, + 8918, 8916, 8914, 8912, 9014, 9012, 9010, 9008, + 9110, 9108, 9106, 9104, 9206, 9204, 9202, 9200, + 9302, 9300, 9298, 9296, 9398, 9396, 9394, 9392, + 9494, 9492, 9490, 9488, 9590, 9588, 9586, 9584, + 9686, 9684, 9682, 9680, 9782, 9780, 9778, 9776, + 9878, 9876, 9874, 9872, 9974, 9972, 9970, 9968, + 10038, 10036, 10034, 10032, 10134, 10132, 10130, 10128, + 10230, 10228, 10226, 10224, 10326, 10324, 10322, 10320, + 10422, 10420, 10418, 10416, 10518, 10516, 10514, 10512, + 10614, 10612, 10610, 10608, 10710, 10708, 10706, 10704, + 10806, 10804, 10802, 10800, 10902, 10900, 10898, 10896, + 10998, 10996, 10994, 10992, 11094, 11092, 11090, 11088, + 11190, 11188, 11186, 11184, 11286, 11284, 11282, 11280, + 11382, 11380, 11378, 11376, 11478, 11476, 11474, 11472, + 11574, 11572, 11570, 11568, 11638, 11636, 11634, 11632, + 11734, 11732, 11730, 11728, 11830, 11828, 11826, 11824, + 11926, 11924, 11922, 11920, 12022, 12020, 12018, 12016, + 12118, 12116, 12114, 12112, 12214, 12212, 12210, 12208, + 12310, 12308, 12306, 12304, 12406, 12404, 12402, 12400, + 12502, 12500, 12498, 12496, 12598, 12596, 12594, 12592, + 12694, 12692, 12690, 12688, 12790, 12788, 12786, 12784, + 12886, 12884, 12882, 12880, 12982, 12980, 12978, 12976, + 13078, 13076, 13074, 13072, 13174, 13172, 13170, 13168, + 13334, 13332, 13330, 13328, 13430, 13428, 13426, 13424, + 13526, 13524, 13522, 13520, 13622, 13620, 13618, 13616, + 13718, 13716, 13714, 13712, 13814, 13812, 13810, 13808, + 13910, 13908, 13906, 13904, 14006, 14004, 14002, 14000, + 14102, 14100, 14098, 14096, 14198, 14196, 14194, 14192, + 14294, 14292, 14290, 14288, 14390, 14388, 14386, 14384, + 14486, 14484, 14482, 14480, 14582, 14580, 14578, 14576, + 14678, 14676, 14674, 14672, 14774, 14772, 14770, 14768, + 14870, 14868, 14866, 14864, 14966, 14964, 14962, 14960, + 15030, 15028, 15026, 15024, 15126, 15124, 15122, 15120, + 15222, 15220, 15218, 15216, 15318, 15316, 15314, 15312, + 15414, 15412, 15410, 15408, 15510, 15508, 15506, 15504, + 15606, 15604, 15602, 15600, 15702, 15700, 15698, 15696, + 15798, 15796, 15794, 15792, 15894, 15892, 15890, 15888, + 15990, 15988, 15986, 15984, 16086, 16084, 16082, 16080, + 16182, 16180, 16178, 16176, 16278, 16276, 16274, 16272, + 16374, 16372, 16370, 16368, 16470, 16468, 16466, 16464, + 16566, 16564, 16562, 16560, 16630, 16628, 16626, 16624, + 16726, 16724, 16722, 16720, 16822, 16820, 16818, 16816, + 16918, 16916, 16914, 16912, 17014, 17012, 17010, 17008, + 17110, 17108, 17106, 17104, 17206, 17204, 17202, 17200, + 17302, 17300, 17298, 17296, 17398, 17396, 17394, 17392, + 17494, 17492, 17490, 17488, 17590, 17588, 17586, 17584, + 17686, 17684, 17682, 17680, 17782, 17780, 17778, 17776, + 17878, 17876, 17874, 17872, 17974, 17972, 17970, 17968, + 18070, 18068, 18066, 18064, 18166, 18164, 18162, 18160, + 18326, 18324, 18322, 18320, 18422, 18420, 18418, 18416, + 18518, 18516, 18514, 18512, 18614, 18612, 18610, 18608, + 18710, 18708, 18706, 18704, 18806, 18804, 18802, 18800, + 18902, 18900, 18898, 18896, 18998, 18996, 18994, 18992, + 19094, 19092, 19090, 19088, 19190, 19188, 19186, 19184, + 19286, 19284, 19282, 19280, 19382, 19380, 19378, 19376, + 19478, 19476, 19474, 19472, 19574, 19572, 19570, 19568, + 19670, 19668, 19666, 19664, 19766, 19764, 19762, 19760, + 19862, 19860, 19858, 19856, }, + /* 7 */ + {62, 60, 58, 56, 158, 156, 154, 152, + 254, 252, 250, 248, 350, 348, 346, 344, + 446, 444, 442, 440, 542, 540, 538, 536, + 638, 636, 634, 632, 734, 732, 730, 728, + 830, 828, 826, 824, 926, 924, 922, 920, + 1022, 1020, 1018, 1016, 1118, 1116, 1114, 1112, + 1214, 1212, 1210, 1208, 1310, 1308, 1306, 1304, + 1406, 1404, 1402, 1400, 1502, 1500, 1498, 1496, + 1598, 1596, 1594, 1592, 1694, 1692, 1690, 1688, + 1758, 1756, 1754, 1752, 1854, 1852, 1850, 1848, + 1950, 1948, 1946, 1944, 2046, 2044, 2042, 2040, + 2142, 2140, 2138, 2136, 2238, 2236, 2234, 2232, + 2334, 2332, 2330, 2328, 2430, 2428, 2426, 2424, + 2526, 2524, 2522, 2520, 2622, 2620, 2618, 2616, + 2718, 2716, 2714, 2712, 2814, 2812, 2810, 2808, + 2910, 2908, 2906, 2904, 3006, 3004, 3002, 3000, + 3102, 3100, 3098, 3096, 3198, 3196, 3194, 3192, + 3294, 3292, 3290, 3288, 3454, 3452, 3450, 3448, + 3550, 3548, 3546, 3544, 3646, 3644, 3642, 3640, + 3742, 3740, 3738, 3736, 3838, 3836, 3834, 3832, + 3934, 3932, 3930, 3928, 4030, 4028, 4026, 4024, + 4126, 4124, 4122, 4120, 4222, 4220, 4218, 4216, + 4318, 4316, 4314, 4312, 4414, 4412, 4410, 4408, + 4510, 4508, 4506, 4504, 4606, 4604, 4602, 4600, + 4702, 4700, 4698, 4696, 4798, 4796, 4794, 4792, + 4894, 4892, 4890, 4888, 4990, 4988, 4986, 4984, + 5054, 5052, 5050, 5048, 5150, 5148, 5146, 5144, + 5246, 5244, 5242, 5240, 5342, 5340, 5338, 5336, + 5438, 5436, 5434, 5432, 5534, 5532, 5530, 5528, + 5630, 5628, 5626, 5624, 5726, 5724, 5722, 5720, + 5822, 5820, 5818, 5816, 5918, 5916, 5914, 5912, + 6014, 6012, 6010, 6008, 6110, 6108, 6106, 6104, + 6206, 6204, 6202, 6200, 6302, 6300, 6298, 6296, + 6398, 6396, 6394, 6392, 6494, 6492, 6490, 6488, + 6590, 6588, 6586, 6584, 6654, 6652, 6650, 6648, + 6750, 6748, 6746, 6744, 6846, 6844, 6842, 6840, + 6942, 6940, 6938, 6936, 7038, 7036, 7034, 7032, + 7134, 7132, 7130, 7128, 7230, 7228, 7226, 7224, + 7326, 7324, 7322, 7320, 7422, 7420, 7418, 7416, + 7518, 7516, 7514, 7512, 7614, 7612, 7610, 7608, + 7710, 7708, 7706, 7704, 7806, 7804, 7802, 7800, + 7902, 7900, 7898, 7896, 7998, 7996, 7994, 7992, + 8094, 8092, 8090, 8088, 8190, 8188, 8186, 8184, + 8286, 8284, 8282, 8280, 8446, 8444, 8442, 8440, + 8542, 8540, 8538, 8536, 8638, 8636, 8634, 8632, + 8734, 8732, 8730, 8728, 8830, 8828, 8826, 8824, + 8926, 8924, 8922, 8920, 9022, 9020, 9018, 9016, + 9118, 9116, 9114, 9112, 9214, 9212, 9210, 9208, + 9310, 9308, 9306, 9304, 9406, 9404, 9402, 9400, + 9502, 9500, 9498, 9496, 9598, 9596, 9594, 9592, + 9694, 9692, 9690, 9688, 9790, 9788, 9786, 9784, + 9886, 9884, 9882, 9880, 9982, 9980, 9978, 9976, + 10046, 10044, 10042, 10040, 10142, 10140, 10138, 10136, + 10238, 10236, 10234, 10232, 10334, 10332, 10330, 10328, + 10430, 10428, 10426, 10424, 10526, 10524, 10522, 10520, + 10622, 10620, 10618, 10616, 10718, 10716, 10714, 10712, + 10814, 10812, 10810, 10808, 10910, 10908, 10906, 10904, + 11006, 11004, 11002, 11000, 11102, 11100, 11098, 11096, + 11198, 11196, 11194, 11192, 11294, 11292, 11290, 11288, + 11390, 11388, 11386, 11384, 11486, 11484, 11482, 11480, + 11582, 11580, 11578, 11576, 11646, 11644, 11642, 11640, + 11742, 11740, 11738, 11736, 11838, 11836, 11834, 11832, + 11934, 11932, 11930, 11928, 12030, 12028, 12026, 12024, + 12126, 12124, 12122, 12120, 12222, 12220, 12218, 12216, + 12318, 12316, 12314, 12312, 12414, 12412, 12410, 12408, + 12510, 12508, 12506, 12504, 12606, 12604, 12602, 12600, + 12702, 12700, 12698, 12696, 12798, 12796, 12794, 12792, + 12894, 12892, 12890, 12888, 12990, 12988, 12986, 12984, + 13086, 13084, 13082, 13080, 13182, 13180, 13178, 13176, + 13342, 13340, 13338, 13336, 13438, 13436, 13434, 13432, + 13534, 13532, 13530, 13528, 13630, 13628, 13626, 13624, + 13726, 13724, 13722, 13720, 13822, 13820, 13818, 13816, + 13918, 13916, 13914, 13912, 14014, 14012, 14010, 14008, + 14110, 14108, 14106, 14104, 14206, 14204, 14202, 14200, + 14302, 14300, 14298, 14296, 14398, 14396, 14394, 14392, + 14494, 14492, 14490, 14488, 14590, 14588, 14586, 14584, + 14686, 14684, 14682, 14680, 14782, 14780, 14778, 14776, + 14878, 14876, 14874, 14872, 14974, 14972, 14970, 14968, + 15038, 15036, 15034, 15032, 15134, 15132, 15130, 15128, + 15230, 15228, 15226, 15224, 15326, 15324, 15322, 15320, + 15422, 15420, 15418, 15416, 15518, 15516, 15514, 15512, + 15614, 15612, 15610, 15608, 15710, 15708, 15706, 15704, + 15806, 15804, 15802, 15800, 15902, 15900, 15898, 15896, + 15998, 15996, 15994, 15992, 16094, 16092, 16090, 16088, + 16190, 16188, 16186, 16184, 16286, 16284, 16282, 16280, + 16382, 16380, 16378, 16376, 16478, 16476, 16474, 16472, + 16574, 16572, 16570, 16568, 16638, 16636, 16634, 16632, + 16734, 16732, 16730, 16728, 16830, 16828, 16826, 16824, + 16926, 16924, 16922, 16920, 17022, 17020, 17018, 17016, + 17118, 17116, 17114, 17112, 17214, 17212, 17210, 17208, + 17310, 17308, 17306, 17304, 17406, 17404, 17402, 17400, + 17502, 17500, 17498, 17496, 17598, 17596, 17594, 17592, + 17694, 17692, 17690, 17688, 17790, 17788, 17786, 17784, + 17886, 17884, 17882, 17880, 17982, 17980, 17978, 17976, + 18078, 18076, 18074, 18072, 18174, 18172, 18170, 18168, + 18334, 18332, 18330, 18328, 18430, 18428, 18426, 18424, + 18526, 18524, 18522, 18520, 18622, 18620, 18618, 18616, + 18718, 18716, 18714, 18712, 18814, 18812, 18810, 18808, + 18910, 18908, 18906, 18904, 19006, 19004, 19002, 19000, + 19102, 19100, 19098, 19096, 19198, 19196, 19194, 19192, + 19294, 19292, 19290, 19288, 19390, 19388, 19386, 19384, + 19486, 19484, 19482, 19480, 19582, 19580, 19578, 19576, + 19678, 19676, 19674, 19672, 19774, 19772, 19770, 19768, + 19870, 19868, 19866, 19864, }, + /* 8 */ + {70, 68, 66, 64, 166, 164, 162, 160, + 262, 260, 258, 256, 358, 356, 354, 352, + 454, 452, 450, 448, 550, 548, 546, 544, + 646, 644, 642, 640, 742, 740, 738, 736, + 838, 836, 834, 832, 934, 932, 930, 928, + 1030, 1028, 1026, 1024, 1126, 1124, 1122, 1120, + 1222, 1220, 1218, 1216, 1318, 1316, 1314, 1312, + 1414, 1412, 1410, 1408, 1510, 1508, 1506, 1504, + 1606, 1604, 1602, 1600, 1702, 1700, 1698, 1696, + 1766, 1764, 1762, 1760, 1862, 1860, 1858, 1856, + 1958, 1956, 1954, 1952, 2054, 2052, 2050, 2048, + 2150, 2148, 2146, 2144, 2246, 2244, 2242, 2240, + 2342, 2340, 2338, 2336, 2438, 2436, 2434, 2432, + 2534, 2532, 2530, 2528, 2630, 2628, 2626, 2624, + 2726, 2724, 2722, 2720, 2822, 2820, 2818, 2816, + 2918, 2916, 2914, 2912, 3014, 3012, 3010, 3008, + 3110, 3108, 3106, 3104, 3206, 3204, 3202, 3200, + 3302, 3300, 3298, 3296, 3366, 3364, 3362, 3360, + 3462, 3460, 3458, 3456, 3558, 3556, 3554, 3552, + 3654, 3652, 3650, 3648, 3750, 3748, 3746, 3744, + 3846, 3844, 3842, 3840, 3942, 3940, 3938, 3936, + 4038, 4036, 4034, 4032, 4134, 4132, 4130, 4128, + 4230, 4228, 4226, 4224, 4326, 4324, 4322, 4320, + 4422, 4420, 4418, 4416, 4518, 4516, 4514, 4512, + 4614, 4612, 4610, 4608, 4710, 4708, 4706, 4704, + 4806, 4804, 4802, 4800, 4902, 4900, 4898, 4896, + 5062, 5060, 5058, 5056, 5158, 5156, 5154, 5152, + 5254, 5252, 5250, 5248, 5350, 5348, 5346, 5344, + 5446, 5444, 5442, 5440, 5542, 5540, 5538, 5536, + 5638, 5636, 5634, 5632, 5734, 5732, 5730, 5728, + 5830, 5828, 5826, 5824, 5926, 5924, 5922, 5920, + 6022, 6020, 6018, 6016, 6118, 6116, 6114, 6112, + 6214, 6212, 6210, 6208, 6310, 6308, 6306, 6304, + 6406, 6404, 6402, 6400, 6502, 6500, 6498, 6496, + 6598, 6596, 6594, 6592, 6662, 6660, 6658, 6656, + 6758, 6756, 6754, 6752, 6854, 6852, 6850, 6848, + 6950, 6948, 6946, 6944, 7046, 7044, 7042, 7040, + 7142, 7140, 7138, 7136, 7238, 7236, 7234, 7232, + 7334, 7332, 7330, 7328, 7430, 7428, 7426, 7424, + 7526, 7524, 7522, 7520, 7622, 7620, 7618, 7616, + 7718, 7716, 7714, 7712, 7814, 7812, 7810, 7808, + 7910, 7908, 7906, 7904, 8006, 8004, 8002, 8000, + 8102, 8100, 8098, 8096, 8198, 8196, 8194, 8192, + 8294, 8292, 8290, 8288, 8358, 8356, 8354, 8352, + 8454, 8452, 8450, 8448, 8550, 8548, 8546, 8544, + 8646, 8644, 8642, 8640, 8742, 8740, 8738, 8736, + 8838, 8836, 8834, 8832, 8934, 8932, 8930, 8928, + 9030, 9028, 9026, 9024, 9126, 9124, 9122, 9120, + 9222, 9220, 9218, 9216, 9318, 9316, 9314, 9312, + 9414, 9412, 9410, 9408, 9510, 9508, 9506, 9504, + 9606, 9604, 9602, 9600, 9702, 9700, 9698, 9696, + 9798, 9796, 9794, 9792, 9894, 9892, 9890, 9888, + 10054, 10052, 10050, 10048, 10150, 10148, 10146, 10144, + 10246, 10244, 10242, 10240, 10342, 10340, 10338, 10336, + 10438, 10436, 10434, 10432, 10534, 10532, 10530, 10528, + 10630, 10628, 10626, 10624, 10726, 10724, 10722, 10720, + 10822, 10820, 10818, 10816, 10918, 10916, 10914, 10912, + 11014, 11012, 11010, 11008, 11110, 11108, 11106, 11104, + 11206, 11204, 11202, 11200, 11302, 11300, 11298, 11296, + 11398, 11396, 11394, 11392, 11494, 11492, 11490, 11488, + 11590, 11588, 11586, 11584, 11654, 11652, 11650, 11648, + 11750, 11748, 11746, 11744, 11846, 11844, 11842, 11840, + 11942, 11940, 11938, 11936, 12038, 12036, 12034, 12032, + 12134, 12132, 12130, 12128, 12230, 12228, 12226, 12224, + 12326, 12324, 12322, 12320, 12422, 12420, 12418, 12416, + 12518, 12516, 12514, 12512, 12614, 12612, 12610, 12608, + 12710, 12708, 12706, 12704, 12806, 12804, 12802, 12800, + 12902, 12900, 12898, 12896, 12998, 12996, 12994, 12992, + 13094, 13092, 13090, 13088, 13190, 13188, 13186, 13184, + 13254, 13252, 13250, 13248, 13350, 13348, 13346, 13344, + 13446, 13444, 13442, 13440, 13542, 13540, 13538, 13536, + 13638, 13636, 13634, 13632, 13734, 13732, 13730, 13728, + 13830, 13828, 13826, 13824, 13926, 13924, 13922, 13920, + 14022, 14020, 14018, 14016, 14118, 14116, 14114, 14112, + 14214, 14212, 14210, 14208, 14310, 14308, 14306, 14304, + 14406, 14404, 14402, 14400, 14502, 14500, 14498, 14496, + 14598, 14596, 14594, 14592, 14694, 14692, 14690, 14688, + 14790, 14788, 14786, 14784, 14886, 14884, 14882, 14880, + 15046, 15044, 15042, 15040, 15142, 15140, 15138, 15136, + 15238, 15236, 15234, 15232, 15334, 15332, 15330, 15328, + 15430, 15428, 15426, 15424, 15526, 15524, 15522, 15520, + 15622, 15620, 15618, 15616, 15718, 15716, 15714, 15712, + 15814, 15812, 15810, 15808, 15910, 15908, 15906, 15904, + 16006, 16004, 16002, 16000, 16102, 16100, 16098, 16096, + 16198, 16196, 16194, 16192, 16294, 16292, 16290, 16288, + 16390, 16388, 16386, 16384, 16486, 16484, 16482, 16480, + 16582, 16580, 16578, 16576, 16646, 16644, 16642, 16640, + 16742, 16740, 16738, 16736, 16838, 16836, 16834, 16832, + 16934, 16932, 16930, 16928, 17030, 17028, 17026, 17024, + 17126, 17124, 17122, 17120, 17222, 17220, 17218, 17216, + 17318, 17316, 17314, 17312, 17414, 17412, 17410, 17408, + 17510, 17508, 17506, 17504, 17606, 17604, 17602, 17600, + 17702, 17700, 17698, 17696, 17798, 17796, 17794, 17792, + 17894, 17892, 17890, 17888, 17990, 17988, 17986, 17984, + 18086, 18084, 18082, 18080, 18182, 18180, 18178, 18176, + 18246, 18244, 18242, 18240, 18342, 18340, 18338, 18336, + 18438, 18436, 18434, 18432, 18534, 18532, 18530, 18528, + 18630, 18628, 18626, 18624, 18726, 18724, 18722, 18720, + 18822, 18820, 18818, 18816, 18918, 18916, 18914, 18912, + 19014, 19012, 19010, 19008, 19110, 19108, 19106, 19104, + 19206, 19204, 19202, 19200, 19302, 19300, 19298, 19296, + 19398, 19396, 19394, 19392, 19494, 19492, 19490, 19488, + 19590, 19588, 19586, 19584, 19686, 19684, 19682, 19680, + 19782, 19780, 19778, 19776, }, + /* 9 */ + {78, 76, 74, 72, 174, 172, 170, 168, + 270, 268, 266, 264, 366, 364, 362, 360, + 462, 460, 458, 456, 558, 556, 554, 552, + 654, 652, 650, 648, 750, 748, 746, 744, + 846, 844, 842, 840, 942, 940, 938, 936, + 1038, 1036, 1034, 1032, 1134, 1132, 1130, 1128, + 1230, 1228, 1226, 1224, 1326, 1324, 1322, 1320, + 1422, 1420, 1418, 1416, 1518, 1516, 1514, 1512, + 1614, 1612, 1610, 1608, 1710, 1708, 1706, 1704, + 1774, 1772, 1770, 1768, 1870, 1868, 1866, 1864, + 1966, 1964, 1962, 1960, 2062, 2060, 2058, 2056, + 2158, 2156, 2154, 2152, 2254, 2252, 2250, 2248, + 2350, 2348, 2346, 2344, 2446, 2444, 2442, 2440, + 2542, 2540, 2538, 2536, 2638, 2636, 2634, 2632, + 2734, 2732, 2730, 2728, 2830, 2828, 2826, 2824, + 2926, 2924, 2922, 2920, 3022, 3020, 3018, 3016, + 3118, 3116, 3114, 3112, 3214, 3212, 3210, 3208, + 3310, 3308, 3306, 3304, 3374, 3372, 3370, 3368, + 3470, 3468, 3466, 3464, 3566, 3564, 3562, 3560, + 3662, 3660, 3658, 3656, 3758, 3756, 3754, 3752, + 3854, 3852, 3850, 3848, 3950, 3948, 3946, 3944, + 4046, 4044, 4042, 4040, 4142, 4140, 4138, 4136, + 4238, 4236, 4234, 4232, 4334, 4332, 4330, 4328, + 4430, 4428, 4426, 4424, 4526, 4524, 4522, 4520, + 4622, 4620, 4618, 4616, 4718, 4716, 4714, 4712, + 4814, 4812, 4810, 4808, 4910, 4908, 4906, 4904, + 5070, 5068, 5066, 5064, 5166, 5164, 5162, 5160, + 5262, 5260, 5258, 5256, 5358, 5356, 5354, 5352, + 5454, 5452, 5450, 5448, 5550, 5548, 5546, 5544, + 5646, 5644, 5642, 5640, 5742, 5740, 5738, 5736, + 5838, 5836, 5834, 5832, 5934, 5932, 5930, 5928, + 6030, 6028, 6026, 6024, 6126, 6124, 6122, 6120, + 6222, 6220, 6218, 6216, 6318, 6316, 6314, 6312, + 6414, 6412, 6410, 6408, 6510, 6508, 6506, 6504, + 6606, 6604, 6602, 6600, 6670, 6668, 6666, 6664, + 6766, 6764, 6762, 6760, 6862, 6860, 6858, 6856, + 6958, 6956, 6954, 6952, 7054, 7052, 7050, 7048, + 7150, 7148, 7146, 7144, 7246, 7244, 7242, 7240, + 7342, 7340, 7338, 7336, 7438, 7436, 7434, 7432, + 7534, 7532, 7530, 7528, 7630, 7628, 7626, 7624, + 7726, 7724, 7722, 7720, 7822, 7820, 7818, 7816, + 7918, 7916, 7914, 7912, 8014, 8012, 8010, 8008, + 8110, 8108, 8106, 8104, 8206, 8204, 8202, 8200, + 8302, 8300, 8298, 8296, 8366, 8364, 8362, 8360, + 8462, 8460, 8458, 8456, 8558, 8556, 8554, 8552, + 8654, 8652, 8650, 8648, 8750, 8748, 8746, 8744, + 8846, 8844, 8842, 8840, 8942, 8940, 8938, 8936, + 9038, 9036, 9034, 9032, 9134, 9132, 9130, 9128, + 9230, 9228, 9226, 9224, 9326, 9324, 9322, 9320, + 9422, 9420, 9418, 9416, 9518, 9516, 9514, 9512, + 9614, 9612, 9610, 9608, 9710, 9708, 9706, 9704, + 9806, 9804, 9802, 9800, 9902, 9900, 9898, 9896, + 10062, 10060, 10058, 10056, 10158, 10156, 10154, 10152, + 10254, 10252, 10250, 10248, 10350, 10348, 10346, 10344, + 10446, 10444, 10442, 10440, 10542, 10540, 10538, 10536, + 10638, 10636, 10634, 10632, 10734, 10732, 10730, 10728, + 10830, 10828, 10826, 10824, 10926, 10924, 10922, 10920, + 11022, 11020, 11018, 11016, 11118, 11116, 11114, 11112, + 11214, 11212, 11210, 11208, 11310, 11308, 11306, 11304, + 11406, 11404, 11402, 11400, 11502, 11500, 11498, 11496, + 11598, 11596, 11594, 11592, 11662, 11660, 11658, 11656, + 11758, 11756, 11754, 11752, 11854, 11852, 11850, 11848, + 11950, 11948, 11946, 11944, 12046, 12044, 12042, 12040, + 12142, 12140, 12138, 12136, 12238, 12236, 12234, 12232, + 12334, 12332, 12330, 12328, 12430, 12428, 12426, 12424, + 12526, 12524, 12522, 12520, 12622, 12620, 12618, 12616, + 12718, 12716, 12714, 12712, 12814, 12812, 12810, 12808, + 12910, 12908, 12906, 12904, 13006, 13004, 13002, 13000, + 13102, 13100, 13098, 13096, 13198, 13196, 13194, 13192, + 13262, 13260, 13258, 13256, 13358, 13356, 13354, 13352, + 13454, 13452, 13450, 13448, 13550, 13548, 13546, 13544, + 13646, 13644, 13642, 13640, 13742, 13740, 13738, 13736, + 13838, 13836, 13834, 13832, 13934, 13932, 13930, 13928, + 14030, 14028, 14026, 14024, 14126, 14124, 14122, 14120, + 14222, 14220, 14218, 14216, 14318, 14316, 14314, 14312, + 14414, 14412, 14410, 14408, 14510, 14508, 14506, 14504, + 14606, 14604, 14602, 14600, 14702, 14700, 14698, 14696, + 14798, 14796, 14794, 14792, 14894, 14892, 14890, 14888, + 15054, 15052, 15050, 15048, 15150, 15148, 15146, 15144, + 15246, 15244, 15242, 15240, 15342, 15340, 15338, 15336, + 15438, 15436, 15434, 15432, 15534, 15532, 15530, 15528, + 15630, 15628, 15626, 15624, 15726, 15724, 15722, 15720, + 15822, 15820, 15818, 15816, 15918, 15916, 15914, 15912, + 16014, 16012, 16010, 16008, 16110, 16108, 16106, 16104, + 16206, 16204, 16202, 16200, 16302, 16300, 16298, 16296, + 16398, 16396, 16394, 16392, 16494, 16492, 16490, 16488, + 16590, 16588, 16586, 16584, 16654, 16652, 16650, 16648, + 16750, 16748, 16746, 16744, 16846, 16844, 16842, 16840, + 16942, 16940, 16938, 16936, 17038, 17036, 17034, 17032, + 17134, 17132, 17130, 17128, 17230, 17228, 17226, 17224, + 17326, 17324, 17322, 17320, 17422, 17420, 17418, 17416, + 17518, 17516, 17514, 17512, 17614, 17612, 17610, 17608, + 17710, 17708, 17706, 17704, 17806, 17804, 17802, 17800, + 17902, 17900, 17898, 17896, 17998, 17996, 17994, 17992, + 18094, 18092, 18090, 18088, 18190, 18188, 18186, 18184, + 18254, 18252, 18250, 18248, 18350, 18348, 18346, 18344, + 18446, 18444, 18442, 18440, 18542, 18540, 18538, 18536, + 18638, 18636, 18634, 18632, 18734, 18732, 18730, 18728, + 18830, 18828, 18826, 18824, 18926, 18924, 18922, 18920, + 19022, 19020, 19018, 19016, 19118, 19116, 19114, 19112, + 19214, 19212, 19210, 19208, 19310, 19308, 19306, 19304, + 19406, 19404, 19402, 19400, 19502, 19500, 19498, 19496, + 19598, 19596, 19594, 19592, 19694, 19692, 19690, 19688, + 19790, 19788, 19786, 19784, }, + /* 10 */ + {86, 84, 82, 80, 182, 180, 178, 176, + 278, 276, 274, 272, 374, 372, 370, 368, + 470, 468, 466, 464, 566, 564, 562, 560, + 662, 660, 658, 656, 758, 756, 754, 752, + 854, 852, 850, 848, 950, 948, 946, 944, + 1046, 1044, 1042, 1040, 1142, 1140, 1138, 1136, + 1238, 1236, 1234, 1232, 1334, 1332, 1330, 1328, + 1430, 1428, 1426, 1424, 1526, 1524, 1522, 1520, + 1622, 1620, 1618, 1616, 1718, 1716, 1714, 1712, + 1782, 1780, 1778, 1776, 1878, 1876, 1874, 1872, + 1974, 1972, 1970, 1968, 2070, 2068, 2066, 2064, + 2166, 2164, 2162, 2160, 2262, 2260, 2258, 2256, + 2358, 2356, 2354, 2352, 2454, 2452, 2450, 2448, + 2550, 2548, 2546, 2544, 2646, 2644, 2642, 2640, + 2742, 2740, 2738, 2736, 2838, 2836, 2834, 2832, + 2934, 2932, 2930, 2928, 3030, 3028, 3026, 3024, + 3126, 3124, 3122, 3120, 3222, 3220, 3218, 3216, + 3318, 3316, 3314, 3312, 3382, 3380, 3378, 3376, + 3478, 3476, 3474, 3472, 3574, 3572, 3570, 3568, + 3670, 3668, 3666, 3664, 3766, 3764, 3762, 3760, + 3862, 3860, 3858, 3856, 3958, 3956, 3954, 3952, + 4054, 4052, 4050, 4048, 4150, 4148, 4146, 4144, + 4246, 4244, 4242, 4240, 4342, 4340, 4338, 4336, + 4438, 4436, 4434, 4432, 4534, 4532, 4530, 4528, + 4630, 4628, 4626, 4624, 4726, 4724, 4722, 4720, + 4822, 4820, 4818, 4816, 4918, 4916, 4914, 4912, + 5078, 5076, 5074, 5072, 5174, 5172, 5170, 5168, + 5270, 5268, 5266, 5264, 5366, 5364, 5362, 5360, + 5462, 5460, 5458, 5456, 5558, 5556, 5554, 5552, + 5654, 5652, 5650, 5648, 5750, 5748, 5746, 5744, + 5846, 5844, 5842, 5840, 5942, 5940, 5938, 5936, + 6038, 6036, 6034, 6032, 6134, 6132, 6130, 6128, + 6230, 6228, 6226, 6224, 6326, 6324, 6322, 6320, + 6422, 6420, 6418, 6416, 6518, 6516, 6514, 6512, + 6614, 6612, 6610, 6608, 6678, 6676, 6674, 6672, + 6774, 6772, 6770, 6768, 6870, 6868, 6866, 6864, + 6966, 6964, 6962, 6960, 7062, 7060, 7058, 7056, + 7158, 7156, 7154, 7152, 7254, 7252, 7250, 7248, + 7350, 7348, 7346, 7344, 7446, 7444, 7442, 7440, + 7542, 7540, 7538, 7536, 7638, 7636, 7634, 7632, + 7734, 7732, 7730, 7728, 7830, 7828, 7826, 7824, + 7926, 7924, 7922, 7920, 8022, 8020, 8018, 8016, + 8118, 8116, 8114, 8112, 8214, 8212, 8210, 8208, + 8310, 8308, 8306, 8304, 8374, 8372, 8370, 8368, + 8470, 8468, 8466, 8464, 8566, 8564, 8562, 8560, + 8662, 8660, 8658, 8656, 8758, 8756, 8754, 8752, + 8854, 8852, 8850, 8848, 8950, 8948, 8946, 8944, + 9046, 9044, 9042, 9040, 9142, 9140, 9138, 9136, + 9238, 9236, 9234, 9232, 9334, 9332, 9330, 9328, + 9430, 9428, 9426, 9424, 9526, 9524, 9522, 9520, + 9622, 9620, 9618, 9616, 9718, 9716, 9714, 9712, + 9814, 9812, 9810, 9808, 9910, 9908, 9906, 9904, + 10070, 10068, 10066, 10064, 10166, 10164, 10162, 10160, + 10262, 10260, 10258, 10256, 10358, 10356, 10354, 10352, + 10454, 10452, 10450, 10448, 10550, 10548, 10546, 10544, + 10646, 10644, 10642, 10640, 10742, 10740, 10738, 10736, + 10838, 10836, 10834, 10832, 10934, 10932, 10930, 10928, + 11030, 11028, 11026, 11024, 11126, 11124, 11122, 11120, + 11222, 11220, 11218, 11216, 11318, 11316, 11314, 11312, + 11414, 11412, 11410, 11408, 11510, 11508, 11506, 11504, + 11606, 11604, 11602, 11600, 11670, 11668, 11666, 11664, + 11766, 11764, 11762, 11760, 11862, 11860, 11858, 11856, + 11958, 11956, 11954, 11952, 12054, 12052, 12050, 12048, + 12150, 12148, 12146, 12144, 12246, 12244, 12242, 12240, + 12342, 12340, 12338, 12336, 12438, 12436, 12434, 12432, + 12534, 12532, 12530, 12528, 12630, 12628, 12626, 12624, + 12726, 12724, 12722, 12720, 12822, 12820, 12818, 12816, + 12918, 12916, 12914, 12912, 13014, 13012, 13010, 13008, + 13110, 13108, 13106, 13104, 13206, 13204, 13202, 13200, + 13270, 13268, 13266, 13264, 13366, 13364, 13362, 13360, + 13462, 13460, 13458, 13456, 13558, 13556, 13554, 13552, + 13654, 13652, 13650, 13648, 13750, 13748, 13746, 13744, + 13846, 13844, 13842, 13840, 13942, 13940, 13938, 13936, + 14038, 14036, 14034, 14032, 14134, 14132, 14130, 14128, + 14230, 14228, 14226, 14224, 14326, 14324, 14322, 14320, + 14422, 14420, 14418, 14416, 14518, 14516, 14514, 14512, + 14614, 14612, 14610, 14608, 14710, 14708, 14706, 14704, + 14806, 14804, 14802, 14800, 14902, 14900, 14898, 14896, + 15062, 15060, 15058, 15056, 15158, 15156, 15154, 15152, + 15254, 15252, 15250, 15248, 15350, 15348, 15346, 15344, + 15446, 15444, 15442, 15440, 15542, 15540, 15538, 15536, + 15638, 15636, 15634, 15632, 15734, 15732, 15730, 15728, + 15830, 15828, 15826, 15824, 15926, 15924, 15922, 15920, + 16022, 16020, 16018, 16016, 16118, 16116, 16114, 16112, + 16214, 16212, 16210, 16208, 16310, 16308, 16306, 16304, + 16406, 16404, 16402, 16400, 16502, 16500, 16498, 16496, + 16598, 16596, 16594, 16592, 16662, 16660, 16658, 16656, + 16758, 16756, 16754, 16752, 16854, 16852, 16850, 16848, + 16950, 16948, 16946, 16944, 17046, 17044, 17042, 17040, + 17142, 17140, 17138, 17136, 17238, 17236, 17234, 17232, + 17334, 17332, 17330, 17328, 17430, 17428, 17426, 17424, + 17526, 17524, 17522, 17520, 17622, 17620, 17618, 17616, + 17718, 17716, 17714, 17712, 17814, 17812, 17810, 17808, + 17910, 17908, 17906, 17904, 18006, 18004, 18002, 18000, + 18102, 18100, 18098, 18096, 18198, 18196, 18194, 18192, + 18262, 18260, 18258, 18256, 18358, 18356, 18354, 18352, + 18454, 18452, 18450, 18448, 18550, 18548, 18546, 18544, + 18646, 18644, 18642, 18640, 18742, 18740, 18738, 18736, + 18838, 18836, 18834, 18832, 18934, 18932, 18930, 18928, + 19030, 19028, 19026, 19024, 19126, 19124, 19122, 19120, + 19222, 19220, 19218, 19216, 19318, 19316, 19314, 19312, + 19414, 19412, 19410, 19408, 19510, 19508, 19506, 19504, + 19606, 19604, 19602, 19600, 19702, 19700, 19698, 19696, + 19798, 19796, 19794, 19792, }, + /* 11 */ + {94, 92, 90, 88, 190, 188, 186, 184, + 286, 284, 282, 280, 382, 380, 378, 376, + 478, 476, 474, 472, 574, 572, 570, 568, + 670, 668, 666, 664, 766, 764, 762, 760, + 862, 860, 858, 856, 958, 956, 954, 952, + 1054, 1052, 1050, 1048, 1150, 1148, 1146, 1144, + 1246, 1244, 1242, 1240, 1342, 1340, 1338, 1336, + 1438, 1436, 1434, 1432, 1534, 1532, 1530, 1528, + 1630, 1628, 1626, 1624, 1726, 1724, 1722, 1720, + 1790, 1788, 1786, 1784, 1886, 1884, 1882, 1880, + 1982, 1980, 1978, 1976, 2078, 2076, 2074, 2072, + 2174, 2172, 2170, 2168, 2270, 2268, 2266, 2264, + 2366, 2364, 2362, 2360, 2462, 2460, 2458, 2456, + 2558, 2556, 2554, 2552, 2654, 2652, 2650, 2648, + 2750, 2748, 2746, 2744, 2846, 2844, 2842, 2840, + 2942, 2940, 2938, 2936, 3038, 3036, 3034, 3032, + 3134, 3132, 3130, 3128, 3230, 3228, 3226, 3224, + 3326, 3324, 3322, 3320, 3390, 3388, 3386, 3384, + 3486, 3484, 3482, 3480, 3582, 3580, 3578, 3576, + 3678, 3676, 3674, 3672, 3774, 3772, 3770, 3768, + 3870, 3868, 3866, 3864, 3966, 3964, 3962, 3960, + 4062, 4060, 4058, 4056, 4158, 4156, 4154, 4152, + 4254, 4252, 4250, 4248, 4350, 4348, 4346, 4344, + 4446, 4444, 4442, 4440, 4542, 4540, 4538, 4536, + 4638, 4636, 4634, 4632, 4734, 4732, 4730, 4728, + 4830, 4828, 4826, 4824, 4926, 4924, 4922, 4920, + 5086, 5084, 5082, 5080, 5182, 5180, 5178, 5176, + 5278, 5276, 5274, 5272, 5374, 5372, 5370, 5368, + 5470, 5468, 5466, 5464, 5566, 5564, 5562, 5560, + 5662, 5660, 5658, 5656, 5758, 5756, 5754, 5752, + 5854, 5852, 5850, 5848, 5950, 5948, 5946, 5944, + 6046, 6044, 6042, 6040, 6142, 6140, 6138, 6136, + 6238, 6236, 6234, 6232, 6334, 6332, 6330, 6328, + 6430, 6428, 6426, 6424, 6526, 6524, 6522, 6520, + 6622, 6620, 6618, 6616, 6686, 6684, 6682, 6680, + 6782, 6780, 6778, 6776, 6878, 6876, 6874, 6872, + 6974, 6972, 6970, 6968, 7070, 7068, 7066, 7064, + 7166, 7164, 7162, 7160, 7262, 7260, 7258, 7256, + 7358, 7356, 7354, 7352, 7454, 7452, 7450, 7448, + 7550, 7548, 7546, 7544, 7646, 7644, 7642, 7640, + 7742, 7740, 7738, 7736, 7838, 7836, 7834, 7832, + 7934, 7932, 7930, 7928, 8030, 8028, 8026, 8024, + 8126, 8124, 8122, 8120, 8222, 8220, 8218, 8216, + 8318, 8316, 8314, 8312, 8382, 8380, 8378, 8376, + 8478, 8476, 8474, 8472, 8574, 8572, 8570, 8568, + 8670, 8668, 8666, 8664, 8766, 8764, 8762, 8760, + 8862, 8860, 8858, 8856, 8958, 8956, 8954, 8952, + 9054, 9052, 9050, 9048, 9150, 9148, 9146, 9144, + 9246, 9244, 9242, 9240, 9342, 9340, 9338, 9336, + 9438, 9436, 9434, 9432, 9534, 9532, 9530, 9528, + 9630, 9628, 9626, 9624, 9726, 9724, 9722, 9720, + 9822, 9820, 9818, 9816, 9918, 9916, 9914, 9912, + 10078, 10076, 10074, 10072, 10174, 10172, 10170, 10168, + 10270, 10268, 10266, 10264, 10366, 10364, 10362, 10360, + 10462, 10460, 10458, 10456, 10558, 10556, 10554, 10552, + 10654, 10652, 10650, 10648, 10750, 10748, 10746, 10744, + 10846, 10844, 10842, 10840, 10942, 10940, 10938, 10936, + 11038, 11036, 11034, 11032, 11134, 11132, 11130, 11128, + 11230, 11228, 11226, 11224, 11326, 11324, 11322, 11320, + 11422, 11420, 11418, 11416, 11518, 11516, 11514, 11512, + 11614, 11612, 11610, 11608, 11678, 11676, 11674, 11672, + 11774, 11772, 11770, 11768, 11870, 11868, 11866, 11864, + 11966, 11964, 11962, 11960, 12062, 12060, 12058, 12056, + 12158, 12156, 12154, 12152, 12254, 12252, 12250, 12248, + 12350, 12348, 12346, 12344, 12446, 12444, 12442, 12440, + 12542, 12540, 12538, 12536, 12638, 12636, 12634, 12632, + 12734, 12732, 12730, 12728, 12830, 12828, 12826, 12824, + 12926, 12924, 12922, 12920, 13022, 13020, 13018, 13016, + 13118, 13116, 13114, 13112, 13214, 13212, 13210, 13208, + 13278, 13276, 13274, 13272, 13374, 13372, 13370, 13368, + 13470, 13468, 13466, 13464, 13566, 13564, 13562, 13560, + 13662, 13660, 13658, 13656, 13758, 13756, 13754, 13752, + 13854, 13852, 13850, 13848, 13950, 13948, 13946, 13944, + 14046, 14044, 14042, 14040, 14142, 14140, 14138, 14136, + 14238, 14236, 14234, 14232, 14334, 14332, 14330, 14328, + 14430, 14428, 14426, 14424, 14526, 14524, 14522, 14520, + 14622, 14620, 14618, 14616, 14718, 14716, 14714, 14712, + 14814, 14812, 14810, 14808, 14910, 14908, 14906, 14904, + 15070, 15068, 15066, 15064, 15166, 15164, 15162, 15160, + 15262, 15260, 15258, 15256, 15358, 15356, 15354, 15352, + 15454, 15452, 15450, 15448, 15550, 15548, 15546, 15544, + 15646, 15644, 15642, 15640, 15742, 15740, 15738, 15736, + 15838, 15836, 15834, 15832, 15934, 15932, 15930, 15928, + 16030, 16028, 16026, 16024, 16126, 16124, 16122, 16120, + 16222, 16220, 16218, 16216, 16318, 16316, 16314, 16312, + 16414, 16412, 16410, 16408, 16510, 16508, 16506, 16504, + 16606, 16604, 16602, 16600, 16670, 16668, 16666, 16664, + 16766, 16764, 16762, 16760, 16862, 16860, 16858, 16856, + 16958, 16956, 16954, 16952, 17054, 17052, 17050, 17048, + 17150, 17148, 17146, 17144, 17246, 17244, 17242, 17240, + 17342, 17340, 17338, 17336, 17438, 17436, 17434, 17432, + 17534, 17532, 17530, 17528, 17630, 17628, 17626, 17624, + 17726, 17724, 17722, 17720, 17822, 17820, 17818, 17816, + 17918, 17916, 17914, 17912, 18014, 18012, 18010, 18008, + 18110, 18108, 18106, 18104, 18206, 18204, 18202, 18200, + 18270, 18268, 18266, 18264, 18366, 18364, 18362, 18360, + 18462, 18460, 18458, 18456, 18558, 18556, 18554, 18552, + 18654, 18652, 18650, 18648, 18750, 18748, 18746, 18744, + 18846, 18844, 18842, 18840, 18942, 18940, 18938, 18936, + 19038, 19036, 19034, 19032, 19134, 19132, 19130, 19128, + 19230, 19228, 19226, 19224, 19326, 19324, 19322, 19320, + 19422, 19420, 19418, 19416, 19518, 19516, 19514, 19512, + 19614, 19612, 19610, 19608, 19710, 19708, 19706, 19704, + 19806, 19804, 19802, 19800, }, +}; + diff --git a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc index 6961c2265c..d14b46a0e1 100644 --- a/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc +++ b/gr-dtv/lib/dvb/dvb_bbheader_bb_impl.cc @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvb_bbheader_bb_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -504,7 +503,7 @@ namespace gr { for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) { if (count == 0) { if (*in != 0x47) { - printf("Transport Stream sync error!\n"); + GR_LOG_WARN(d_logger, "Transport Stream sync error!"); } j--; in++; @@ -527,7 +526,7 @@ namespace gr { for (int j = 0; j < (int)((kbch - 80 - padding) / 8); j++) { if (count == 0) { if (*in != 0x47) { - printf("Transport Stream sync error!\n"); + GR_LOG_WARN(d_logger, "Transport Stream sync error!"); } in++; b = crc; @@ -560,7 +559,7 @@ namespace gr { if (nibble == TRUE) { if (count == 0) { if (*in != 0x47) { - printf("Transport Stream sync error!\n"); + GR_LOG_WARN(d_logger, "Transport Stream sync error!"); } in++; b = crc; diff --git a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc index 844359333d..3ae1debb01 100644 --- a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc +++ b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc @@ -211,9 +211,6 @@ namespace gr { m_16apsk[13] = gr_complex(0.4984, -1.2088); m_16apsk[14] = gr_complex(-1.2088, -0.4984); m_16apsk[15] = gr_complex(-0.4984, -1.2088); - for (int i = 0; i < 16; i++) { - m_16apsk[i] /= 1.2088; - } } else if (rate == C20_30) { m_16apsk[0] = gr_complex(0.5061, 0.2474); @@ -232,9 +229,6 @@ namespace gr { m_16apsk[13] = gr_complex(0.4909, -1.2007); m_16apsk[14] = gr_complex(-1.2007, -0.4909); m_16apsk[15] = gr_complex(-0.4909, -1.2007); - for (int i = 0; i < 16; i++) { - m_16apsk[i] /= 1.2007; - } } else { r2 = m; @@ -1102,9 +1096,6 @@ namespace gr { m_256apsk[253] = gr_complex(-0.1909, -0.3627); m_256apsk[254] = gr_complex(-0.3224, -0.5236); m_256apsk[255] = gr_complex(-0.3016, -0.5347); - for (int i = 0; i < 256; i++) { - m_256apsk[i] /= 1.6747; - } } else if (rate == C22_30) { m_256apsk[0] = gr_complex(1.5977, 0.1526); @@ -1363,9 +1354,6 @@ namespace gr { m_256apsk[253] = gr_complex(0.3110, -0.5686); m_256apsk[254] = gr_complex(-0.3893, -0.7143); m_256apsk[255] = gr_complex(-0.3110, -0.5686); - for (int i = 0; i < 256; i++) { - m_256apsk[i] /= 1.6329; - } } else { r8 = m; @@ -1732,6 +1720,16 @@ namespace gr { m_64apsk[62] = gr_complex( 7.0, -7.0); m_64apsk[63] = gr_complex( 7.0, 7.0); break; + case MOD_8VSB: + m_8psk[0] = gr_complex(-7.0 + 1.25, 0.0); + m_8psk[1] = gr_complex(-5.0 + 1.25, 0.0); + m_8psk[2] = gr_complex(-3.0 + 1.25, 0.0); + m_8psk[3] = gr_complex(-1.0 + 1.25, 0.0); + m_8psk[4] = gr_complex( 1.0 + 1.25, 0.0); + m_8psk[5] = gr_complex( 3.0 + 1.25, 0.0); + m_8psk[6] = gr_complex( 5.0 + 1.25, 0.0); + m_8psk[7] = gr_complex( 7.0 + 1.25, 0.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))); @@ -1791,6 +1789,7 @@ namespace gr { } break; case MOD_8PSK: + case MOD_8VSB: case MOD_8APSK: for (int i = 0; i < noutput_items; i++) { index = *in++; diff --git a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc index d6c338695a..688ad7a40c 100644 --- a/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc +++ b/gr-dtv/lib/dvbs2/dvbs2_physical_cc_impl.cc @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbs2_physical_cc_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -80,8 +79,8 @@ namespace gr { type |= 1; } if (goldcode < 0 || goldcode > 262141) { - fprintf(stderr, "Gold Code must be between 0 and 262141 inclusive.\n"); - fprintf(stderr, "Gold Code set to 0.\n"); + GR_LOG_WARN(d_logger, "Gold Code must be between 0 and 262141 inclusive."); + GR_LOG_WARN(d_logger, "Gold Code set to 0."); goldcode = 0; } gold_code = goldcode; diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc index c10a77c98a..4c67f62a60 100644 --- a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_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 @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_bit_inner_deinterleaver_impl.h" -#include <stdio.h> #define MAX_MODULATION_ORDER 6 #define INTERLEAVER_BLOCK_SIZE 126 @@ -34,37 +33,6 @@ namespace gr { const int dvbt_bit_inner_deinterleaver_impl::d_bsize = INTERLEAVER_BLOCK_SIZE; - int - dvbt_bit_inner_deinterleaver_impl::H(int e, int w) - { - int rez = 0; - - switch (e) { - case 0: - rez = w; - break; - case 1: - rez = (w + 63) % d_bsize; - break; - case 2: - rez = (w + 105) % d_bsize; - break; - case 3: - rez = (w + 42) % d_bsize; - break; - case 4: - rez = (w + 21) % d_bsize; - break; - case 5: - rez = (w + 84) % d_bsize; - break; - default: - break; - } - - return rez; - } - dvbt_bit_inner_deinterleaver::sptr dvbt_bit_inner_deinterleaver::make(int nsize, \ dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t transmission) @@ -88,10 +56,10 @@ namespace gr { d_v = config.d_m; d_hierarchy = config.d_hierarchy; - d_perm = (unsigned char *)new unsigned char[d_v * d_bsize]; + d_perm = (unsigned char *)new (std::nothrow) unsigned char[d_v * d_bsize]; if (d_perm == NULL) { - std::cout << "Cannot allocate memory for d_perm" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "Bit Inner Deinterleaver, cannot allocate memory for d_perm."); + throw std::bad_alloc(); } //Init permutation table (used for b[e][do]) @@ -105,8 +73,8 @@ namespace gr { } if (d_nsize % d_bsize) { - std::cout << "Error: Input size must be multiple of block size: " \ - << "nsize: " << d_nsize << "bsize: " << d_bsize << std::endl; + GR_LOG_ERROR(d_logger, boost::format("Input size must be multiple of block size: nsize: %1% bsize: %2%") \ + % d_nsize % d_bsize); } } @@ -145,7 +113,7 @@ namespace gr { int c = in[(bcount * d_bsize) + w]; for (int e = 0; e < d_v; e++) { - d_b[e][H(e, w)] = (c >> (d_v - e - 1)) & 1; + d_b[e][d_lookup_H[w][e]] = (c >> (d_v - e - 1)) & 1; } } @@ -189,6 +157,136 @@ namespace gr { return noutput_items; } + const int dvbt_bit_inner_deinterleaver_impl::d_lookup_H[INTERLEAVER_BLOCK_SIZE][MAX_MODULATION_ORDER] = + { + {0, 63, 105, 42, 21, 84}, + {1, 64, 106, 43, 22, 85}, + {2, 65, 107, 44, 23, 86}, + {3, 66, 108, 45, 24, 87}, + {4, 67, 109, 46, 25, 88}, + {5, 68, 110, 47, 26, 89}, + {6, 69, 111, 48, 27, 90}, + {7, 70, 112, 49, 28, 91}, + {8, 71, 113, 50, 29, 92}, + {9, 72, 114, 51, 30, 93}, + {10, 73, 115, 52, 31, 94}, + {11, 74, 116, 53, 32, 95}, + {12, 75, 117, 54, 33, 96}, + {13, 76, 118, 55, 34, 97}, + {14, 77, 119, 56, 35, 98}, + {15, 78, 120, 57, 36, 99}, + {16, 79, 121, 58, 37, 100}, + {17, 80, 122, 59, 38, 101}, + {18, 81, 123, 60, 39, 102}, + {19, 82, 124, 61, 40, 103}, + {20, 83, 125, 62, 41, 104}, + {21, 84, 0, 63, 42, 105}, + {22, 85, 1, 64, 43, 106}, + {23, 86, 2, 65, 44, 107}, + {24, 87, 3, 66, 45, 108}, + {25, 88, 4, 67, 46, 109}, + {26, 89, 5, 68, 47, 110}, + {27, 90, 6, 69, 48, 111}, + {28, 91, 7, 70, 49, 112}, + {29, 92, 8, 71, 50, 113}, + {30, 93, 9, 72, 51, 114}, + {31, 94, 10, 73, 52, 115}, + {32, 95, 11, 74, 53, 116}, + {33, 96, 12, 75, 54, 117}, + {34, 97, 13, 76, 55, 118}, + {35, 98, 14, 77, 56, 119}, + {36, 99, 15, 78, 57, 120}, + {37, 100, 16, 79, 58, 121}, + {38, 101, 17, 80, 59, 122}, + {39, 102, 18, 81, 60, 123}, + {40, 103, 19, 82, 61, 124}, + {41, 104, 20, 83, 62, 125}, + {42, 105, 21, 84, 63, 0}, + {43, 106, 22, 85, 64, 1}, + {44, 107, 23, 86, 65, 2}, + {45, 108, 24, 87, 66, 3}, + {46, 109, 25, 88, 67, 4}, + {47, 110, 26, 89, 68, 5}, + {48, 111, 27, 90, 69, 6}, + {49, 112, 28, 91, 70, 7}, + {50, 113, 29, 92, 71, 8}, + {51, 114, 30, 93, 72, 9}, + {52, 115, 31, 94, 73, 10}, + {53, 116, 32, 95, 74, 11}, + {54, 117, 33, 96, 75, 12}, + {55, 118, 34, 97, 76, 13}, + {56, 119, 35, 98, 77, 14}, + {57, 120, 36, 99, 78, 15}, + {58, 121, 37, 100, 79, 16}, + {59, 122, 38, 101, 80, 17}, + {60, 123, 39, 102, 81, 18}, + {61, 124, 40, 103, 82, 19}, + {62, 125, 41, 104, 83, 20}, + {63, 0, 42, 105, 84, 21}, + {64, 1, 43, 106, 85, 22}, + {65, 2, 44, 107, 86, 23}, + {66, 3, 45, 108, 87, 24}, + {67, 4, 46, 109, 88, 25}, + {68, 5, 47, 110, 89, 26}, + {69, 6, 48, 111, 90, 27}, + {70, 7, 49, 112, 91, 28}, + {71, 8, 50, 113, 92, 29}, + {72, 9, 51, 114, 93, 30}, + {73, 10, 52, 115, 94, 31}, + {74, 11, 53, 116, 95, 32}, + {75, 12, 54, 117, 96, 33}, + {76, 13, 55, 118, 97, 34}, + {77, 14, 56, 119, 98, 35}, + {78, 15, 57, 120, 99, 36}, + {79, 16, 58, 121, 100, 37}, + {80, 17, 59, 122, 101, 38}, + {81, 18, 60, 123, 102, 39}, + {82, 19, 61, 124, 103, 40}, + {83, 20, 62, 125, 104, 41}, + {84, 21, 63, 0, 105, 42}, + {85, 22, 64, 1, 106, 43}, + {86, 23, 65, 2, 107, 44}, + {87, 24, 66, 3, 108, 45}, + {88, 25, 67, 4, 109, 46}, + {89, 26, 68, 5, 110, 47}, + {90, 27, 69, 6, 111, 48}, + {91, 28, 70, 7, 112, 49}, + {92, 29, 71, 8, 113, 50}, + {93, 30, 72, 9, 114, 51}, + {94, 31, 73, 10, 115, 52}, + {95, 32, 74, 11, 116, 53}, + {96, 33, 75, 12, 117, 54}, + {97, 34, 76, 13, 118, 55}, + {98, 35, 77, 14, 119, 56}, + {99, 36, 78, 15, 120, 57}, + {100, 37, 79, 16, 121, 58}, + {101, 38, 80, 17, 122, 59}, + {102, 39, 81, 18, 123, 60}, + {103, 40, 82, 19, 124, 61}, + {104, 41, 83, 20, 125, 62}, + {105, 42, 84, 21, 0, 63}, + {106, 43, 85, 22, 1, 64}, + {107, 44, 86, 23, 2, 65}, + {108, 45, 87, 24, 3, 66}, + {109, 46, 88, 25, 4, 67}, + {110, 47, 89, 26, 5, 68}, + {111, 48, 90, 27, 6, 69}, + {112, 49, 91, 28, 7, 70}, + {113, 50, 92, 29, 8, 71}, + {114, 51, 93, 30, 9, 72}, + {115, 52, 94, 31, 10, 73}, + {116, 53, 95, 32, 11, 74}, + {117, 54, 96, 33, 12, 75}, + {118, 55, 97, 34, 13, 76}, + {119, 56, 98, 35, 14, 77}, + {120, 57, 99, 36, 15, 78}, + {121, 58, 100, 37, 16, 79}, + {122, 59, 101, 38, 17, 80}, + {123, 60, 102, 39, 18, 81}, + {124, 61, 103, 40, 19, 82}, + {125, 62, 104, 41, 20, 83} + }; + } /* namespace dtv */ } /* namespace gr */ diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h index 9f3811301d..9d33f6124b 100644 --- a/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.h +++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_deinterleaver_impl.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 @@ -32,6 +32,8 @@ namespace gr { private: const dvbt_configure config; + static const int d_lookup_H[126][6]; + int d_nsize; dvbt_hierarchy_t d_hierarchy; @@ -43,9 +45,6 @@ namespace gr { // Table to keep interleaved indices unsigned char * d_perm; - // Permutation function - int H(int e, int w); - public: dvbt_bit_inner_deinterleaver_impl(int nsize, dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t transmission); ~dvbt_bit_inner_deinterleaver_impl(); diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc index 43146f02c5..07ba588f3e 100644 --- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_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 @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_bit_inner_interleaver_impl.h" -#include <stdio.h> #define MAX_MODULATION_ORDER 6 #define INTERLEAVER_BLOCK_SIZE 126 @@ -34,36 +33,6 @@ namespace gr { const int dvbt_bit_inner_interleaver_impl::d_bsize = INTERLEAVER_BLOCK_SIZE; - int - dvbt_bit_inner_interleaver_impl::H(int e, int w) - { - int rez = 0; - - switch (e) { - case 0: - rez = w; - break; - case 1: - rez = (w + 63) % d_bsize; - break; - case 2: - rez = (w + 105) % d_bsize; - break; - case 3: - rez = (w + 42) % d_bsize; - break; - case 4: - rez = (w + 21) % d_bsize; - break; - case 5: - rez = (w + 84) % d_bsize; - break; - default: - break; - } - - return rez; - } dvbt_bit_inner_interleaver::sptr dvbt_bit_inner_interleaver::make(int nsize, \ @@ -88,10 +57,10 @@ namespace gr { d_v = config.d_m; d_hierarchy = config.d_hierarchy; - d_perm = (unsigned char *)new unsigned char[d_v * d_bsize]; + d_perm = (unsigned char *)new (std::nothrow) unsigned char[d_v * d_bsize]; if (d_perm == NULL) { - std::cout << "Cannot allocate memory for d_perm" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "Bit Inner Interleaver, cannot allocate memory for d_perm."); + throw std::bad_alloc(); } //Init permutation table (used for b[e][do]) @@ -105,8 +74,8 @@ namespace gr { } if (d_nsize % d_bsize) { - std::cout << "Error: Input size must be multiple of block size: " \ - << "nsize: " << d_nsize << "bsize: " << d_bsize << std::endl; + GR_LOG_ERROR(d_logger, boost::format("Input size must be multiple of block size: nsize: %1% bsize: %2%") \ + % d_nsize % d_bsize); } } @@ -175,7 +144,7 @@ namespace gr { int val = 0; for (int e = 0; e < d_v; e++) { - val = (val << 1) | d_b[e][H(e, w)]; + val = (val << 1) | d_b[e][d_lookup_H[w][e]]; } out[(bcount * d_bsize) + w] = val; @@ -190,6 +159,136 @@ namespace gr { return noutput_items; } + const int dvbt_bit_inner_interleaver_impl::d_lookup_H[INTERLEAVER_BLOCK_SIZE][MAX_MODULATION_ORDER] = + { + {0, 63, 105, 42, 21, 84}, + {1, 64, 106, 43, 22, 85}, + {2, 65, 107, 44, 23, 86}, + {3, 66, 108, 45, 24, 87}, + {4, 67, 109, 46, 25, 88}, + {5, 68, 110, 47, 26, 89}, + {6, 69, 111, 48, 27, 90}, + {7, 70, 112, 49, 28, 91}, + {8, 71, 113, 50, 29, 92}, + {9, 72, 114, 51, 30, 93}, + {10, 73, 115, 52, 31, 94}, + {11, 74, 116, 53, 32, 95}, + {12, 75, 117, 54, 33, 96}, + {13, 76, 118, 55, 34, 97}, + {14, 77, 119, 56, 35, 98}, + {15, 78, 120, 57, 36, 99}, + {16, 79, 121, 58, 37, 100}, + {17, 80, 122, 59, 38, 101}, + {18, 81, 123, 60, 39, 102}, + {19, 82, 124, 61, 40, 103}, + {20, 83, 125, 62, 41, 104}, + {21, 84, 0, 63, 42, 105}, + {22, 85, 1, 64, 43, 106}, + {23, 86, 2, 65, 44, 107}, + {24, 87, 3, 66, 45, 108}, + {25, 88, 4, 67, 46, 109}, + {26, 89, 5, 68, 47, 110}, + {27, 90, 6, 69, 48, 111}, + {28, 91, 7, 70, 49, 112}, + {29, 92, 8, 71, 50, 113}, + {30, 93, 9, 72, 51, 114}, + {31, 94, 10, 73, 52, 115}, + {32, 95, 11, 74, 53, 116}, + {33, 96, 12, 75, 54, 117}, + {34, 97, 13, 76, 55, 118}, + {35, 98, 14, 77, 56, 119}, + {36, 99, 15, 78, 57, 120}, + {37, 100, 16, 79, 58, 121}, + {38, 101, 17, 80, 59, 122}, + {39, 102, 18, 81, 60, 123}, + {40, 103, 19, 82, 61, 124}, + {41, 104, 20, 83, 62, 125}, + {42, 105, 21, 84, 63, 0}, + {43, 106, 22, 85, 64, 1}, + {44, 107, 23, 86, 65, 2}, + {45, 108, 24, 87, 66, 3}, + {46, 109, 25, 88, 67, 4}, + {47, 110, 26, 89, 68, 5}, + {48, 111, 27, 90, 69, 6}, + {49, 112, 28, 91, 70, 7}, + {50, 113, 29, 92, 71, 8}, + {51, 114, 30, 93, 72, 9}, + {52, 115, 31, 94, 73, 10}, + {53, 116, 32, 95, 74, 11}, + {54, 117, 33, 96, 75, 12}, + {55, 118, 34, 97, 76, 13}, + {56, 119, 35, 98, 77, 14}, + {57, 120, 36, 99, 78, 15}, + {58, 121, 37, 100, 79, 16}, + {59, 122, 38, 101, 80, 17}, + {60, 123, 39, 102, 81, 18}, + {61, 124, 40, 103, 82, 19}, + {62, 125, 41, 104, 83, 20}, + {63, 0, 42, 105, 84, 21}, + {64, 1, 43, 106, 85, 22}, + {65, 2, 44, 107, 86, 23}, + {66, 3, 45, 108, 87, 24}, + {67, 4, 46, 109, 88, 25}, + {68, 5, 47, 110, 89, 26}, + {69, 6, 48, 111, 90, 27}, + {70, 7, 49, 112, 91, 28}, + {71, 8, 50, 113, 92, 29}, + {72, 9, 51, 114, 93, 30}, + {73, 10, 52, 115, 94, 31}, + {74, 11, 53, 116, 95, 32}, + {75, 12, 54, 117, 96, 33}, + {76, 13, 55, 118, 97, 34}, + {77, 14, 56, 119, 98, 35}, + {78, 15, 57, 120, 99, 36}, + {79, 16, 58, 121, 100, 37}, + {80, 17, 59, 122, 101, 38}, + {81, 18, 60, 123, 102, 39}, + {82, 19, 61, 124, 103, 40}, + {83, 20, 62, 125, 104, 41}, + {84, 21, 63, 0, 105, 42}, + {85, 22, 64, 1, 106, 43}, + {86, 23, 65, 2, 107, 44}, + {87, 24, 66, 3, 108, 45}, + {88, 25, 67, 4, 109, 46}, + {89, 26, 68, 5, 110, 47}, + {90, 27, 69, 6, 111, 48}, + {91, 28, 70, 7, 112, 49}, + {92, 29, 71, 8, 113, 50}, + {93, 30, 72, 9, 114, 51}, + {94, 31, 73, 10, 115, 52}, + {95, 32, 74, 11, 116, 53}, + {96, 33, 75, 12, 117, 54}, + {97, 34, 76, 13, 118, 55}, + {98, 35, 77, 14, 119, 56}, + {99, 36, 78, 15, 120, 57}, + {100, 37, 79, 16, 121, 58}, + {101, 38, 80, 17, 122, 59}, + {102, 39, 81, 18, 123, 60}, + {103, 40, 82, 19, 124, 61}, + {104, 41, 83, 20, 125, 62}, + {105, 42, 84, 21, 0, 63}, + {106, 43, 85, 22, 1, 64}, + {107, 44, 86, 23, 2, 65}, + {108, 45, 87, 24, 3, 66}, + {109, 46, 88, 25, 4, 67}, + {110, 47, 89, 26, 5, 68}, + {111, 48, 90, 27, 6, 69}, + {112, 49, 91, 28, 7, 70}, + {113, 50, 92, 29, 8, 71}, + {114, 51, 93, 30, 9, 72}, + {115, 52, 94, 31, 10, 73}, + {116, 53, 95, 32, 11, 74}, + {117, 54, 96, 33, 12, 75}, + {118, 55, 97, 34, 13, 76}, + {119, 56, 98, 35, 14, 77}, + {120, 57, 99, 36, 15, 78}, + {121, 58, 100, 37, 16, 79}, + {122, 59, 101, 38, 17, 80}, + {123, 60, 102, 39, 18, 81}, + {124, 61, 103, 40, 19, 82}, + {125, 62, 104, 41, 20, 83} + }; + } /* namespace dtv */ } /* namespace gr */ diff --git a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h index c5fcbe2d82..5fc5e109f8 100644 --- a/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.h +++ b/gr-dtv/lib/dvbt/dvbt_bit_inner_interleaver_impl.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 @@ -32,6 +32,8 @@ namespace gr { private: const dvbt_configure config; + static const int d_lookup_H[126][6]; + int d_nsize; dvbt_hierarchy_t d_hierarchy; @@ -43,9 +45,6 @@ namespace gr { // Table to keep interleaved indices unsigned char * d_perm; - // Permutation function - int H(int e, int w); - public: dvbt_bit_inner_interleaver_impl(int nsize, dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvbt_transmission_mode_t transmission); ~dvbt_bit_inner_interleaver_impl(); diff --git a/gr-dtv/lib/dvbt/dvbt_configure.cc b/gr-dtv/lib/dvbt/dvbt_configure.cc index acf9862e74..33f5cc838b 100644 --- a/gr-dtv/lib/dvbt/dvbt_configure.cc +++ b/gr-dtv/lib/dvbt/dvbt_configure.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 @@ -25,7 +25,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_configure.h" #include <iostream> -#include <stdio.h> namespace gr { namespace dtv { diff --git a/gr-dtv/lib/dvbt/dvbt_demap_impl.cc b/gr-dtv/lib/dvbt/dvbt_demap_impl.cc index 4bdec1dc96..65d659226c 100644 --- a/gr-dtv/lib/dvbt/dvbt_demap_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_demap_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 @@ -25,7 +25,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_demap_impl.h" #include <volk/volk.h> -#include <stdio.h> namespace gr { namespace dtv { @@ -62,15 +61,15 @@ namespace gr { d_constellation_points = (gr_complex*) volk_malloc(sizeof(gr_complex) * d_constellation_size, volk_get_alignment()); if (d_constellation_points == NULL) { - std::cout << "cannot allocate memory for d_constellation_points" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "DVB-T Demap, cannot allocate memory for d_constellation_points."); + throw std::bad_alloc(); } d_sq_dist = (float*) volk_malloc(sizeof(float) * d_constellation_size, volk_get_alignment()); if (d_sq_dist == NULL) { - std::cout << "cannot allocate memory for d_sq_dist" << std::endl; + GR_LOG_FATAL(d_logger, "DVB-T Demap, cannot allocate memory for d_sq_dist."); volk_free(d_constellation_points); - exit(1); + throw std::bad_alloc(); } make_constellation_points(d_constellation_size, d_step, d_alpha); diff --git a/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc b/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc index 03dd0ffec5..ff8042f2c8 100644 --- a/gr-dtv/lib/dvbt/dvbt_energy_dispersal_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_energy_dispersal_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 @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_energy_dispersal_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -121,7 +120,7 @@ namespace gr { for (int j = 0; j < d_npacks; j++) { if (in[index + count] != d_SYNC) { - printf("error: Malformed MPEG-TS!\n"); + GR_LOG_WARN(d_logger, "Malformed MPEG-TS!"); } out[count++] = sync; diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc index 54d25e49ea..0787464aa2 100644 --- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_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 @@ -24,27 +24,21 @@ #include <gnuradio/io_signature.h> #include "dvbt_inner_coder_impl.h" -#include <stdio.h> #include <assert.h> namespace gr { namespace dtv { - void + inline void dvbt_inner_coder_impl::generate_codeword(unsigned char in, int &x, int &y) { //insert input bit d_reg |= ((in & 0x1) << 7); - d_reg = d_reg >> 1; + d_reg = d_reg >> 1; - // TODO - do this with polynoms and bitcnt - //generate output G1=171(OCT) - x = ((d_reg >> 6) ^ (d_reg >> 5) ^ (d_reg >> 4) ^ \ - (d_reg >> 3) ^ d_reg) & 0x1; - //generate output G2=133(OCT) - y = ((d_reg >> 6) ^ (d_reg >> 4) ^ (d_reg >> 3) ^ \ - (d_reg >> 1) ^ d_reg) & 0x1; + x = d_lookup_171[d_reg]; + y = d_lookup_133[d_reg]; } //TODO - do this based on puncturing matrix @@ -55,7 +49,7 @@ namespace gr { * 00000c0c1c2 */ - void + inline void dvbt_inner_coder_impl::generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out) { int x, y; @@ -175,17 +169,17 @@ namespace gr { d_out_bs = 4 * d_n; // allocate bit buffers - d_in_buff = new unsigned char[8 * d_in_bs]; + d_in_buff = new (std::nothrow) unsigned char[8 * d_in_bs]; if (d_in_buff == NULL) { - std::cout << "Cannot allocate memory for d_in_buff" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "Inner Coder, cannot allocate memory for d_in_buff."); + throw std::bad_alloc(); } - d_out_buff = new unsigned char[8 * d_in_bs * d_n / d_k]; + d_out_buff = new (std::nothrow) unsigned char[8 * d_in_bs * d_n / d_k]; if (d_out_buff == NULL) { - std::cout << "Cannot allocate memory for d_out_buff" << std::endl; + GR_LOG_FATAL(d_logger, "Inner Coder, cannot allocate memory for d_out_buff."); delete [] d_in_buff; - exit(1); + throw std::bad_alloc(); } } @@ -251,6 +245,26 @@ namespace gr { return noutput_items; } + const int dvbt_inner_coder_impl::d_lookup_171[128] = + {0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, + 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1}; + + const int dvbt_inner_coder_impl::d_lookup_133[128] = + {0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1}; + } /* namespace dtv */ } /* namespace gr */ diff --git a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h index 7a46a2222c..d472b1f60c 100644 --- a/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.h +++ b/gr-dtv/lib/dvbt/dvbt_inner_coder_impl.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 @@ -32,6 +32,9 @@ namespace gr { private: const dvbt_configure config; + static const int d_lookup_171[128]; + static const int d_lookup_133[128]; + int d_ninput; int d_noutput; @@ -57,8 +60,8 @@ namespace gr { // bit output buffer unsigned char * d_out_buff; - void generate_codeword(unsigned char in, int &x, int &y); - void generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out); + inline void generate_codeword(unsigned char in, int &x, int &y); + inline void generate_punctured_code(dvb_code_rate_t coderate, unsigned char * in, unsigned char * out); public: dvbt_inner_coder_impl(int ninput, int noutput, dvb_constellation_t constellation, dvbt_hierarchy_t hierarchy, dvb_code_rate_t coderate); diff --git a/gr-dtv/lib/dvbt/dvbt_map_impl.cc b/gr-dtv/lib/dvbt/dvbt_map_impl.cc index 05f6e7f69b..b2c21da525 100644 --- a/gr-dtv/lib/dvbt/dvbt_map_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_map_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 @@ -25,7 +25,6 @@ #include <gnuradio/io_signature.h> #include <complex> #include "dvbt_map_impl.h" -#include <stdio.h> #include <math.h> namespace gr { @@ -59,10 +58,10 @@ namespace gr { d_alpha = config.d_alpha; d_gain = gain * config.d_norm; - d_constellation_points = new gr_complex[d_constellation_size]; + d_constellation_points = new (std::nothrow) gr_complex[d_constellation_size]; if (d_constellation_points == NULL) { - std::cout << "Cannot allocate memory for d_constellation_points" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "DVB-T Map, cannot allocate memory for d_constellation_points."); + throw std::bad_alloc(); } make_constellation_points(d_constellation_size, d_step, d_alpha); 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 ee8dce0f15..135d622eef 100644 --- a/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_ofdm_sym_acquisition_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 @@ -27,7 +27,6 @@ #include <complex> #include <gnuradio/math.h> #include <gnuradio/expj.h> -#include <stdio.h> #include <volk/volk.h> namespace gr { @@ -247,53 +246,53 @@ namespace gr { d_gamma = (gr_complex*) volk_malloc(sizeof(gr_complex) * d_fft_length, volk_get_alignment()); if (d_gamma == NULL) { - std::cout << "cannot allocate memory for d_gamma" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_gamma."); + throw std::bad_alloc(); } d_lambda = (float*) volk_malloc(sizeof(float) * d_fft_length, volk_get_alignment()); if (d_lambda == NULL) { - std::cout << "cannot allocate memory for d_lambda" << std::endl; + GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_lambda."); volk_free(d_gamma); - exit(1); + throw std::bad_alloc(); } d_derot = (gr_complex*) volk_malloc(sizeof(gr_complex) * (d_fft_length + d_cp_length), volk_get_alignment()); if (d_derot == NULL) { - std::cout << "cannot allocate memory for d_derot" << std::endl; + GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_derot."); volk_free(d_lambda); volk_free(d_gamma); - exit(1); + throw std::bad_alloc(); } d_conj = (gr_complex*) volk_malloc(sizeof(gr_complex) * (2 * d_fft_length + d_cp_length), volk_get_alignment()); if (d_conj == NULL) { - std::cout << "cannot allocate memory for d_conj" << std::endl; + GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_conj."); volk_free(d_derot); volk_free(d_lambda); volk_free(d_gamma); - exit(1); + throw std::bad_alloc(); } d_norm = (float*) volk_malloc(sizeof(float) * (2 * d_fft_length + d_cp_length), volk_get_alignment()); if (d_norm == NULL) { - std::cout << "cannot allocate memory for d_norm" << std::endl; + GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_norm."); volk_free(d_conj); volk_free(d_derot); volk_free(d_lambda); volk_free(d_gamma); - exit(1); + throw std::bad_alloc(); } d_corr = (gr_complex*) volk_malloc(sizeof(gr_complex) * (2 * d_fft_length + d_cp_length), volk_get_alignment()); if (d_corr == NULL) { - std::cout << "cannot allocate memory for d_corr" << std::endl; + GR_LOG_FATAL(d_logger, "OFDM Symbol Acquisition, cannot allocate memory for d_corr."); volk_free(d_norm); volk_free(d_conj); volk_free(d_derot); volk_free(d_lambda); volk_free(d_gamma); - exit(1); + throw std::bad_alloc(); } peak_detect_init(0.3, 0.9); diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc deleted file mode 100644 index 7d67a0a81a..0000000000 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon.cc +++ /dev/null @@ -1,475 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2015 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 "dvbt_reed_solomon.h" -#include <iostream> -#include <stdio.h> -#include <string.h> -#include <fstream> - -using namespace std; - -#define min(a,b) ((a) < (b)) ? (a) : (b) - -namespace gr { - namespace dtv { - - void - dvbt_reed_solomon::gf_init(int p, int m, int gfpoly) - { - d_p = p; d_m = m; - - //maximum number of elements in the GF(p^m) - int q = powl(p, m); - - d_gf_exp = new unsigned char[q]; - if (d_gf_exp == NULL) { - std::cout << "Cannot allocate memory for d_gf_exp" << std::endl; - return; - } - - d_gf_log = new unsigned char[q]; - if (d_gf_log == NULL) { - std::cout << "Cannot allocate memory for d_gf_log" << std::endl; - delete [] d_gf_exp; - return; - } - - int reg_rs = 1; - - d_gf_exp[q - 1] = 0; - d_gf_log[0] = q - 1; - - for (int i = 0; i < (q - 1); i++) { - d_gf_exp[i] = reg_rs; - d_gf_log[reg_rs] = i; - - //This is equvalent with raise to power - reg_rs = reg_rs << 1; - - if (reg_rs & (1 << m)) { - reg_rs = reg_rs ^ gfpoly; - } - - reg_rs = reg_rs & ((1 << m) - 1); - } - } - - void - dvbt_reed_solomon::gf_uninit() - { - delete [] d_gf_log; - delete [] d_gf_exp; - } - - int - dvbt_reed_solomon::gf_exp(int a) - { - return d_gf_exp[a % d_n]; - } - - int - dvbt_reed_solomon::gf_log(int a) - { - return d_gf_log[a % d_n]; - } - - - int - dvbt_reed_solomon::gf_add(int a, int b) - { - return (a ^ b); - } - - int - dvbt_reed_solomon::gf_mul(int a, int b) - { - if (a == 0 || b == 0) { - return 0; - } - else { - return gf_exp(d_gf_log[a] + d_gf_log[b]); - } - } - - int - dvbt_reed_solomon::gf_div(int a, int b) - { - if (a == 0 || b == 0) { - return (0); - } - - return (gf_exp(d_n + d_gf_log[a] - d_gf_log[b])); - } - - int - dvbt_reed_solomon::gf_pow(int a, int power) - { - if (a == 0) { - return (0); - } - - return gf_exp(d_n + d_gf_log[a] + power); - } - - int - dvbt_reed_solomon::gf_lpow(int power) - { - return d_l[power % d_n]; - } - - void - dvbt_reed_solomon::rs_init(int lambda, int n, int k, int t) - { - d_n = n; d_k = k; d_t = t; - // 2t = n - k, dmin = 2t + 1 = n -k + 1 - - d_l = new unsigned char[d_n + 1]; - if (d_l == NULL) { - std::cout << "Cannot allocate memory for d_l" << std::endl; - exit(1); - } - - d_g = new unsigned char[2 * d_t + 1]; - if (d_g == NULL) { - std::cout << "Cannot allocate memory for d_g" << std::endl; - delete [] d_l; - exit(1); - } - - //Generate roots of lambda - d_l[0] = 1; - - for (int i = 1; i <= d_n; i++) { - d_l[i] = gf_mul(d_l[i - 1], lambda); - } - - //Init Generator polynomial buffer - for (int i = 0; i <= (2*t); i++) { - d_g[i] = 0; - } - - //Start with x+lambda^0 - d_g[0] = 1; - - //Create generator polynomial - for (int i = 1; i <= (2 * t); i++) { - for (int j = i; j > 0; j--) { - if (d_g[j] != 0) { - d_g[j] = gf_add(d_g[j - 1], gf_mul(d_g[j], d_l[i - 1])); - } - else { - d_g[j] = d_g[j - 1]; - } - } - - d_g[0] = gf_mul(d_g[0], d_l[i - 1]); - } - - // Init syndrome array - d_syn = new unsigned char[2 * d_t + 1]; - if (d_syn == NULL) { - std::cout << "Cannot allocate memory for d_syn" << std::endl; - delete [] d_g; - delete [] d_l; - exit(1); - } - } - - void - dvbt_reed_solomon::rs_uninit() - { - if (d_syn) { - delete [] d_syn; - } - if (d_g) { - delete [] d_g; - } - if (d_l) { - delete [] d_l; - } - } - - int - dvbt_reed_solomon::rs_encode(unsigned char *data_in, unsigned char *parity) - { - memset(parity, 0, 2 * d_t); - - for (int i = 0; i < d_k; i++) { - int feedback = gf_add(data_in[i], parity[0]); - - if (feedback != 0) { - for (int j = 1; j < (2 * d_t); j++) { - if (d_g[2 * d_t - j] != 0) { - parity[j] = gf_add(parity[j], gf_mul(feedback, d_g[2 * d_t - j])); - } - } - } - - //Shift the register - memmove(&parity[0], &parity[1], (2 * d_t) - 1); - - if (feedback != 0) { - parity[2 * d_t - 1] = gf_mul(feedback, d_g[0]); - } - else { - parity[2 * d_t - 1] = 0; - } - } - - return (0); - } - - int - dvbt_reed_solomon::rs_decode(unsigned char *data, unsigned char *eras, const int no_eras) - { - __GR_VLA(unsigned char, sigma, 2 * d_t + 1); - __GR_VLA(unsigned char, b, 2 * d_t + 1); - __GR_VLA(unsigned char, T, 2 * d_t + 1); - __GR_VLA(unsigned char, reg, 2 * d_t + 1); - __GR_VLA(unsigned char, root, 2 * d_t + 1); - __GR_VLA(unsigned char, loc, 2 * d_t + 1); - __GR_VLA(unsigned char, omega, 2 * d_t); - - // Compute erasure locator polynomial - memset(sigma, 0, 2 * d_t + 1); - sigma[0] = 1; - - if (no_eras > 0) { - // In this case we know the locations of errors - // Init sigma to be the erasure locator polynomial - sigma[1] = gf_exp(d_n-1-eras[0]); - - for (int i = 1; i < no_eras; i++) { - int u = d_n-1-eras[i]; - - for (int j = i+1; j > 0; j--) { - sigma[j] = gf_add(sigma[j], gf_pow(sigma[j - 1], u)); - } - } - } - - // Calculate syndrome - - for (int j = 0; j < 2 * d_t; j++) { - d_syn[j] = data[0]; - } - - for (int j = 1; j < d_n; j++) { - for (int i = 0; i < 2 * d_t; i++) { - d_syn[i] = gf_add(data[j], gf_pow(d_syn[i], i)); - } - } - - int syn_error = 0; - - // Verify all syndromes - for (int i = 0; i < 2 * d_t; i++) { - syn_error |= d_syn[i]; - } - - if (!syn_error) { - // The syndrome is a codeword - // Return data unmodified - return (0); - } - - // Use Modified (errors+erasures) BMA. Algorithm of Berlekamp-Massey - // S(i)=r(lambda^i)=e(lambda^i) - - int r = no_eras; - int el = no_eras; - - memcpy(b, sigma, 2 * d_t + 1); - - while (++r <= 2 * d_t) { - int d_discr = 0; - - for (int i = 0; i < r; i++) { - d_discr = gf_add(d_discr, gf_mul(sigma[i], d_syn[r - i - 1])); - } - - if (d_discr == 0) { - // b(x) = x * b(x) - memmove(&b[1], b, 2 * d_t); - b[0] = 0; - } - else { - T[0] = sigma[0]; - - // T(x) = sigma(x) + d*x*b(x) - for (int i = 0; i < 2 * d_t; i++) { - T[i + 1] = gf_add(sigma[i + 1], gf_mul(d_discr, b[i])); - } - - if (2 * el <= r + no_eras - 1) { - el = r + no_eras - el; - - // b(i) = sigma(i) / discr - for (int i = 0; i <= 2 * d_t; i++) { - b[i] = gf_div(sigma[i], d_discr); - } - } - else { - // b(x) = x*b(x) - memmove(&b[1], b, 2 * d_t); - b[0] = 0; - } - memcpy(sigma, T, 2 * d_t + 1); - } - } - - // Compute degree(sigma) - int deg_sigma = 0; - - for (int i = 0; i < 2 * d_t + 1; i++) { - if (sigma[i] != 0) { - deg_sigma = i; - } - } - - // Find the roots of sigma(x) by Chien search - // Test sum(1)=1+sigma(1)*(lambda^1)+...+sigma(nu)*lambda(^nu) - // Test sum(2)=1+sigma(1)*(lambda^2)+...+sigma(nu)*lambda(^nu*2) - // ... - // Test sum(l)=1+sigma(1)*(lambda^l)+...+sigma(nu)*lambda(^nu*l) - // in order to see if lambda^(-1) is a root - // where nu is degree(sigma) - - int no_roots = 0; - - memcpy(®[1], &sigma[1], 2 * d_t); - - for (int i = 1; i <= d_n; i++) { - int q = 1; - - for (int j = deg_sigma; j > 0; j--) { - reg[j] = gf_pow(reg[j], j); - q = gf_add(q, reg[j]); - } - - if (q != 0) { - continue; - } - - // We are here when we found roots of the sigma(x) - // Keep roots in index form - root[no_roots] = i; - loc[no_roots] = i - 1; - - if (++no_roots == deg_sigma) { - break; - } - } - - if (no_roots != deg_sigma) { - // Uncorrectable error detected - if (eras) { - for (int i = 0; i < no_roots; i++) - eras[i] = loc[i]; - } - - return (-1); - } - - // Compute erros+erasures evaluator polynomial - // omega(x)=sigma(x)S(x) mod (x ^ 2 * t) - int deg_omega = 0; - - for (int i = 0; i < 2 * d_t; i++) { - int tmp = 0; - int j = (deg_sigma < i) ? deg_sigma : i; - - for(;j >= 0; j--) { - tmp = gf_add(tmp, gf_mul(d_syn[i - j], sigma[j])); - } - - if(tmp != 0) { - deg_omega = i; - } - - omega[i] = tmp; - } - omega[2 * d_t] = 0; - - // Compute error values using Forney formula (poly form) - // e(j(l))) = (lambda(j(l)) ^ 2) * omega(lambda ^ (-j(l))) / sigma_pr(lambda ^ (-j(l))) - // where sigma_pr is the formal derivative of sigma - - for (int j = no_roots - 1; j >= 0; j--) { - int num1 = 0; - - // roots[] are in index form - for (int i = deg_omega; i >= 0; i--) { - num1 = gf_add(num1, gf_pow(omega[i], i * root[j])); - } - - // root[] is in index form - int num2 = gf_exp(root[j] * (-1) + d_n); - - int den = 0; - - // sigma[i+1] for i even is the formal derivative lambda_pr of sigma[i] - int deg_max = min(deg_sigma, 2 * d_t - 1); - - for (int i = 1; i <= deg_max; i += 2) { - if (sigma[i] != 0) - den = gf_add(den, gf_exp(d_gf_log[sigma[i]] + (i - 1) * root[j])); - } - - if (den == 0) { - if (eras) { - for (int i = 0; i < no_roots; i++) { - eras[i] = loc[i]; - } - } - return (-1); - } - - int err = gf_div(gf_mul(num1, num2), den); - - data[loc[j]] = gf_add(data[loc[j]], err); - } - - return(no_roots); - } - - - dvbt_reed_solomon::dvbt_reed_solomon(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks): - d_p(p), d_m(m), d_gfpoly(gfpoly), d_n(n), d_k(k), d_t(t), d_s(s), d_blocks(blocks) - { - gf_init(d_p, d_m, d_gfpoly); - rs_init(d_p, d_n, d_k, d_t); - } - - dvbt_reed_solomon::~dvbt_reed_solomon() - { - rs_uninit(); - gf_uninit(); - } - - } /* namespace dtv */ -} /* namespace gr */ - diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon.h b/gr-dtv/lib/dvbt/dvbt_reed_solomon.h deleted file mode 100644 index b9286d0ffd..0000000000 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2015 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_DVBT_REED_SOLOMON_H -#define INCLUDED_DTV_DVBT_REED_SOLOMON_H - -namespace gr { - namespace dtv { - - class dvbt_reed_solomon - { - private: - int d_p; - int d_m; - int d_gfpoly; - int d_n; - int d_k; - int d_t; - int d_s; - int d_blocks; - unsigned char *d_gf_exp; - unsigned char *d_gf_log; - unsigned char *d_l; - unsigned char *d_g; - - unsigned char *d_syn; - - int gf_add(int a, int b); - int gf_mul(int a, int b); - int gf_div(int a, int b); - int gf_exp(int a); - int gf_log(int a); - int gf_pow(int a, int power); - int gf_lpow(int power); - - void gf_init(int p, int m, int gfpoly); - void gf_uninit(); - void rs_init(int lambda, int n, int k, int t); - void rs_uninit(); - - public: - int rs_encode(unsigned char *data, unsigned char *parity); - int rs_decode(unsigned char *data, unsigned char *eras, const int no_eras); - - dvbt_reed_solomon(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks); - ~dvbt_reed_solomon(); - }; - - } // namespace dtv -} // namespace gr - -#endif /* INCLUDED_DTV_DVBT_REED_SOLOMON_H */ - diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc index 4a5530cfbe..fd6fedcf8d 100644 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_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 @@ -24,11 +24,15 @@ #include <gnuradio/io_signature.h> #include "dvbt_reed_solomon_dec_impl.h" -#include <stdio.h> namespace gr { namespace dtv { + static const int rs_init_symsize = 8; + static const int rs_init_fcr = 0; // first consecutive root + static const int rs_init_prim = 1; // primitive is 1 (alpha) + static const int N = (1 << rs_init_symsize) - 1; // 255 + dvbt_reed_solomon_dec::sptr dvbt_reed_solomon_dec::make(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks) { @@ -43,15 +47,16 @@ namespace gr { : block("dvbt_reed_solomon_dec", io_signature::make(1, 1, sizeof(unsigned char) * blocks * (n - s)), io_signature::make(1, 1, sizeof(unsigned char) * blocks * (k - s))), - d_p(p), d_m(m), d_gfpoly(gfpoly), d_n(n), d_k(k), d_t(t), d_s(s), d_blocks(blocks), - d_rs(p, m, gfpoly, n, k, t, s, blocks) + d_n(n), d_k(k), d_s(s), d_blocks(blocks) { - d_in = new unsigned char[d_n]; - if (d_in == NULL) { - std::cout << "Cannot allocate memory for d_in" << std::endl; - exit(1); + d_rs = init_rs_char(rs_init_symsize, gfpoly, rs_init_fcr, rs_init_prim, (n - k)); + if (d_rs == NULL) { + GR_LOG_FATAL(d_logger, "Reed-Solomon Decoder, cannot allocate memory for d_rs."); + throw std::bad_alloc(); } - memset(&d_in[0], 0, d_n); + d_nerrors_corrected_count = 0; + d_bad_packet_count = 0; + d_total_packets = 0; } /* @@ -59,7 +64,7 @@ namespace gr { */ dvbt_reed_solomon_dec_impl::~dvbt_reed_solomon_dec_impl() { - delete [] d_in; + free_rs_char(d_rs); } void @@ -69,6 +74,25 @@ namespace gr { } int + dvbt_reed_solomon_dec_impl::decode (unsigned char &out, const unsigned char &in) + { + unsigned char tmp[N]; + int ncorrections; + + // add missing prefix zero padding to message + memset(tmp, 0, d_s); + memcpy(&tmp[d_s], &in, (d_n - d_s)); + + // correct message... + ncorrections = decode_rs_char(d_rs, tmp, 0, 0); + + // copy corrected message to output, skipping prefix zero padding + memcpy (&out, &tmp[d_s], (d_k - d_s)); + + return ncorrections; + } + + int dvbt_reed_solomon_dec_impl::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, @@ -76,21 +100,23 @@ namespace gr { { const unsigned char *in = (const unsigned char *) input_items[0]; unsigned char *out = (unsigned char *) output_items[0]; - - // We receive only nonzero data - int in_bsize = d_n - d_s; - int out_bsize = d_k - d_s; + int j = 0; + int k = 0; for (int i = 0; i < (d_blocks * noutput_items); i++) { - //TODO - zero copy? - // Set first d_s symbols to zero - memset(&d_in[0], 0, d_s); - // Then copy actual data - memcpy(&d_in[d_s], &in[i * in_bsize], in_bsize); - - d_rs.rs_decode(d_in, NULL, 0); - - memcpy(&out[i * out_bsize], &d_in[d_s], out_bsize); + int nerrors_corrected = decode(out[k], in[j]); + + if (nerrors_corrected == -1) { + d_bad_packet_count++; + d_nerrors_corrected_count += ((d_n - d_s) - (d_k - d_s)) / 2; // lower bound estimate; most this RS can fix + } + else { + d_nerrors_corrected_count += nerrors_corrected; + } + + d_total_packets++; + j += (d_n - d_s); + k += (d_k - d_s); } // Tell runtime system how many input items we consumed on diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h index 951aa4b2a1..2d9b24809d 100644 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.h +++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_dec_impl.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 @@ -22,7 +22,10 @@ #define INCLUDED_DTV_DVBT_REED_SOLOMON_DEC_IMPL_H #include <gnuradio/dtv/dvbt_reed_solomon_dec.h> -#include "dvbt_reed_solomon.h" + +extern "C" { +#include <gnuradio/fec/rs.h> +} namespace gr { namespace dtv { @@ -30,18 +33,18 @@ namespace gr { class dvbt_reed_solomon_dec_impl : public dvbt_reed_solomon_dec { private: - int d_p; - int d_m; - int d_gfpoly; int d_n; int d_k; - int d_t; int d_s; int d_blocks; - unsigned char * d_in; + int d_nerrors_corrected_count; + int d_bad_packet_count; + int d_total_packets; + int d_total_bits; - dvbt_reed_solomon d_rs; + void *d_rs; /* Reed-Solomon characteristics structure */ + int decode(unsigned char &out, const unsigned char &in); public: dvbt_reed_solomon_dec_impl(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks); diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc index 561ea08ded..663301d614 100644 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_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 @@ -24,11 +24,16 @@ #include <gnuradio/io_signature.h> #include "dvbt_reed_solomon_enc_impl.h" -#include <stdio.h> + +#define MPEG_TS_PKT_LENGTH 188 namespace gr { namespace dtv { + static const int rs_init_symsize = 8; + static const int rs_init_fcr = 0; // first consecutive root + static const int rs_init_prim = 1; // primitive is 1 (alpha) + dvbt_reed_solomon_enc::sptr dvbt_reed_solomon_enc::make(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks) { @@ -43,15 +48,19 @@ namespace gr { : block("dvbt_reed_solomon", io_signature::make(1, 1, sizeof(unsigned char) * blocks * (k - s)), io_signature::make(1, 1, sizeof(unsigned char) * blocks * (n - s))), - d_p(p), d_m(m), d_gfpoly(gfpoly), d_n(n), d_k(k), d_t(t), d_s(s), d_blocks(blocks), - d_rs(p, m, gfpoly, n, k, t, s, blocks) + d_n(n), d_k(k), d_s(s), d_blocks(blocks) { - d_in = new unsigned char[d_n]; - if (d_in == NULL) { - std::cout << "Cannot allocate memory for d_in" << std::endl; - return; + d_rs = init_rs_char(rs_init_symsize, gfpoly, rs_init_fcr, rs_init_prim, (n - k)); + if (d_rs == NULL) { + GR_LOG_FATAL(d_logger, "Reed-Solomon Encoder, cannot allocate memory for d_rs."); + throw std::bad_alloc(); + } + d_data = (unsigned char *) malloc(sizeof(unsigned char) * (d_s + MPEG_TS_PKT_LENGTH)); + if (d_data == NULL) { + GR_LOG_FATAL(d_logger, "Reed-Solomon Encoder, cannot allocate memory for d_data."); + free_rs_char(d_rs); + throw std::bad_alloc(); } - memset(&d_in[0], 0, d_n); } /* @@ -59,7 +68,8 @@ namespace gr { */ dvbt_reed_solomon_enc_impl::~dvbt_reed_solomon_enc_impl() { - delete [] d_in; + free(d_data); + free_rs_char(d_rs); } void @@ -68,6 +78,18 @@ namespace gr { ninput_items_required[0] = noutput_items; } + void + dvbt_reed_solomon_enc_impl::encode(const unsigned char *in, unsigned char *out) + { + // Shortened Reed-Solomon: prepend zero bytes to message (discarded after encoding) + std::memset(d_data, 0, d_s); + std::memcpy(&d_data[d_s], in, MPEG_TS_PKT_LENGTH); + + // Copy input message to output then append Reed-Solomon bits + std::memcpy(out, in, MPEG_TS_PKT_LENGTH); + encode_rs_char(d_rs, d_data, &out[MPEG_TS_PKT_LENGTH]); + } + int dvbt_reed_solomon_enc_impl::general_work (int noutput_items, gr_vector_int &ninput_items, @@ -76,18 +98,13 @@ namespace gr { { const unsigned char *in = (const unsigned char *) input_items[0]; unsigned char *out = (unsigned char *) output_items[0]; + int j = 0; + int k = 0; - int in_bsize = d_k - d_s; - int out_bsize = d_n - d_s; - - // We get a superblock of d_blocks blocks - for (int i = 0; i < (d_blocks * noutput_items); i++) { - //TODO - zero copy between in/out ? - memcpy(&d_in[d_s], &in[i * in_bsize], in_bsize); - - d_rs.rs_encode(&d_in[0], &d_in[d_k]); - - memcpy(&out[i * out_bsize], &d_in[d_s], out_bsize); + for (int i = 0; i < noutput_items * d_blocks; i++) { + encode(in + j, out + k); + j += (d_k - d_s); + k += (d_n - d_s); } // Tell runtime system how many input items we consumed on diff --git a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h index 669ee2761a..47dea875f4 100644 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.h +++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.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 @@ -22,7 +22,10 @@ #define INCLUDED_DTV_DVBT_REED_SOLOMON_ENC_IMPL_H #include <gnuradio/dtv/dvbt_reed_solomon_enc.h> -#include "dvbt_reed_solomon.h" + +extern "C" { +#include <gnuradio/fec/rs.h> +} namespace gr { namespace dtv { @@ -30,18 +33,15 @@ namespace gr { class dvbt_reed_solomon_enc_impl : public dvbt_reed_solomon_enc { private: - int d_p; - int d_m; - int d_gfpoly; int d_n; int d_k; - int d_t; int d_s; int d_blocks; - unsigned char * d_in; + unsigned char *d_data; - dvbt_reed_solomon d_rs; + void *d_rs; /* Reed-Solomon characteristics structure */ + void encode(const unsigned char *in, unsigned char *out); public: dvbt_reed_solomon_enc_impl(int p, int m, int gfpoly, int n, int k, int t, int s, int blocks); diff --git a/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc b/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc index b3c7046ae2..aa581aeda8 100644 --- a/gr-dtv/lib/dvbt/dvbt_reference_signals_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_reference_signals_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 @@ -25,7 +25,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_reference_signals_impl.h" #include <complex> -#include <stdio.h> #include <gnuradio/expj.h> #include <gnuradio/math.h> @@ -173,37 +172,37 @@ namespace gr { //allocate PRBS buffer d_wk = new char[d_Kmax - d_Kmin + 1]; if (d_wk == NULL) { - std::cout << "Cannot allocate memory for d_wk" << std::endl; - exit(1); + std::cerr << "Reference Signals, cannot allocate memory for d_wk." << std::endl; + throw std::bad_alloc(); } // Generate wk sequence generate_prbs(); // allocate buffer for scattered pilots - d_spilot_carriers_val = new gr_complex[d_Kmax - d_Kmin + 1]; + d_spilot_carriers_val = new (std::nothrow) gr_complex[d_Kmax - d_Kmin + 1]; if (d_spilot_carriers_val == NULL) { - std::cout << "Cannot allocate memory for d_spilot_carriers_val" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_spilot_carriers_val." << std::endl; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // allocate buffer for channel gains (for each useful carrier) - d_channel_gain = new gr_complex[d_Kmax - d_Kmin + 1]; + d_channel_gain = new (std::nothrow) gr_complex[d_Kmax - d_Kmin + 1]; if (d_channel_gain == NULL) { - std::cout << "Cannot allocate memory for d_channel_gain" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_channel_gain." << std::endl; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // Allocate buffer for continual pilots phase diffs - d_known_phase_diff = new float[d_cpilot_carriers_size - 1]; + d_known_phase_diff = new (std::nothrow) float[d_cpilot_carriers_size - 1]; if (d_known_phase_diff == NULL) { - std::cout << "Cannot allocate memory for d_known_phase_diff" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_known_phase_diff." << std::endl; delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // Obtain phase diff for all continual pilots @@ -212,45 +211,45 @@ namespace gr { norm(get_cpilot_value(d_cpilot_carriers[i + 1]) - get_cpilot_value(d_cpilot_carriers[i])); } - d_cpilot_phase_diff = new float[d_cpilot_carriers_size - 1]; + d_cpilot_phase_diff = new (std::nothrow) float[d_cpilot_carriers_size - 1]; if (d_cpilot_phase_diff == NULL) { - std::cout << "Cannot allocate memory for d_cpilot_phase_diff" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_cpilot_phase_diff." << std::endl; delete [] d_known_phase_diff; delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // Allocate buffer for derotated input symbol - d_derot_in = new gr_complex[d_fft_length]; + d_derot_in = new (std::nothrow) gr_complex[d_fft_length]; if (d_derot_in == NULL) { - std::cout << "Cannot allocate memory for d_derot_in" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_derot_in." << std::endl; delete [] d_cpilot_phase_diff; delete [] d_known_phase_diff; delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // allocate buffer for first tps symbol constellation - d_tps_carriers_val = new gr_complex[d_tps_carriers_size]; + d_tps_carriers_val = new (std::nothrow) gr_complex[d_tps_carriers_size]; if (d_tps_carriers_val == NULL) { - std::cout << "Cannot allocate memory for d_tps_carriers_val" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_tps_carriers_val." << std::endl; delete [] d_derot_in; delete [] d_cpilot_phase_diff; delete [] d_known_phase_diff; delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // allocate tps data buffer - d_tps_data = new unsigned char[d_symbols_per_frame]; + d_tps_data = new (std::nothrow) unsigned char[d_symbols_per_frame]; if (d_tps_data == NULL) { - std::cout << "Cannot allocate memory for d_tps_data" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_tps_data." << std::endl; delete [] d_tps_carriers_val; delete [] d_derot_in; delete [] d_cpilot_phase_diff; @@ -258,12 +257,12 @@ namespace gr { delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } - d_prev_tps_symbol = new gr_complex[d_tps_carriers_size]; + d_prev_tps_symbol = new (std::nothrow) gr_complex[d_tps_carriers_size]; if (d_prev_tps_symbol == NULL) { - std::cout << "Cannot allocate memory for d_prev_tps_symbol" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_prev_tps_symbol." << std::endl; delete [] d_tps_data; delete [] d_tps_carriers_val; delete [] d_derot_in; @@ -272,13 +271,13 @@ namespace gr { delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } memset(d_prev_tps_symbol, 0, d_tps_carriers_size * sizeof(gr_complex)); - d_tps_symbol = new gr_complex[d_tps_carriers_size]; + d_tps_symbol = new (std::nothrow) gr_complex[d_tps_carriers_size]; if (d_tps_symbol == NULL) { - std::cout << "Cannot allocate memory for d_tps_symbol" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_tps_symbol." << std::endl; delete [] d_prev_tps_symbol; delete [] d_tps_data; delete [] d_tps_carriers_val; @@ -288,7 +287,7 @@ namespace gr { delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } memset(d_tps_symbol, 0, d_tps_carriers_size * sizeof(gr_complex)); @@ -304,9 +303,9 @@ namespace gr { } // Allocate buffer for channel estimation carriers - d_chanestim_carriers = new int[d_Kmax - d_Kmin + 1]; + d_chanestim_carriers = new (std::nothrow) int[d_Kmax - d_Kmin + 1]; if (d_chanestim_carriers == NULL) { - std::cout << "Cannot allocate memory for d_chanestim_carriers" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_chanestim_carriers." << std::endl; delete [] d_tps_symbol; delete [] d_prev_tps_symbol; delete [] d_tps_data; @@ -317,13 +316,13 @@ namespace gr { delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // Allocate buffer for payload carriers - d_payload_carriers = new int[d_Kmax - d_Kmin + 1]; + d_payload_carriers = new (std::nothrow) int[d_Kmax - d_Kmin + 1]; if (d_payload_carriers == NULL) { - std::cout << "Cannot allocate memory for d_payload_carriers" << std::endl; + std::cerr << "Reference Signals, cannot allocate memory for d_payload_carriers." << std::endl; delete [] d_chanestim_carriers; delete [] d_tps_symbol; delete [] d_prev_tps_symbol; @@ -335,7 +334,7 @@ namespace gr { delete [] d_channel_gain; delete [] d_spilot_carriers_val; delete [] d_wk; - exit(1); + throw std::bad_alloc(); } // Reset the pilot generator diff --git a/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc b/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc index 8bdfbf9776..1edd15a109 100644 --- a/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_symbol_inner_interleaver_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 @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_symbol_inner_interleaver_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -125,10 +124,10 @@ namespace gr { assert(d_payload_length == d_nsize); // Allocate memory for h vector - d_h = new int[d_fft_length]; + d_h = new (std::nothrow) int[d_fft_length]; if (d_h == NULL) { - std::cout << "Cannot allocate memory for d_h" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "Symbol Inner Interleaver, cannot allocate memory for d_h."); + throw std::bad_alloc(); } // Setup bit permutation vectors diff --git a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc index d170e3f90e..97b014f9ae 100644 --- a/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_viterbi_decoder_impl.cc @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_viterbi_decoder_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -595,10 +594,10 @@ namespace gr { d_nout = d_nbits / 2 / 8; // Allocate the buffer for the bits - d_inbits = new unsigned char [d_nbits]; + d_inbits = new (std::nothrow) unsigned char [d_nbits]; if (d_inbits == NULL) { - std::cout << "Cannot allocate memory for d_inbits" << std::endl; - exit(1); + GR_LOG_FATAL(d_logger, "Viterbi Decoder, cannot allocate memory for d_inbits."); + throw std::bad_alloc(); } mettab[0][0] = 1; diff --git a/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc index feaf3e29f4..ad401feed3 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_cellinterleaver_cc_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 @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt2_cellinterleaver_cc_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -175,14 +174,14 @@ namespace gr { } time_interleave = (gr_complex *) malloc(sizeof(gr_complex) * cell_size * fecblocks); if (time_interleave == NULL) { - fprintf(stderr, "Cell interleaver 1st malloc, Out of memory.\n"); - exit(1); + GR_LOG_FATAL(d_logger, "Cell/Time Interleaver, cannot allocate memory for time_interleave."); + throw std::bad_alloc(); } cols = (gr_complex **) malloc(sizeof(gr_complex *) * FECBlocksPerBigTIBlock * 5); if (cols == NULL) { free(time_interleave); - fprintf(stderr, "Cell interleaver 2nd malloc, Out of memory.\n"); - exit(1); + GR_LOG_FATAL(d_logger, "Cell/Time Interleaver, cannot allocate memory for cols."); + throw std::bad_alloc(); } ti_blocks = tiblocks; fec_blocks = fecblocks; diff --git a/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc index 5e47faca10..1755fc82ca 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_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 @@ -24,7 +24,6 @@ #include <gnuradio/io_signature.h> #include "dvbt2_framemapper_cc_impl.h" -#include <stdio.h> namespace gr { namespace dtv { @@ -910,33 +909,33 @@ namespace gr { set_output_multiple((N_P2 * C_P2) + (numdatasyms * C_DATA)); mapped_items = (N_P2 * C_P2) + (numdatasyms * C_DATA); if (mapped_items < (stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC))) { - fprintf(stderr, "Too many FEC blocks in T2 frame.\n"); + GR_LOG_WARN(d_logger, "Frame Mapper, too many FEC blocks in T2 frame."); mapped_items = stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC); /* avoid segfault */ } zigzag_interleave = (gr_complex *) malloc(sizeof(gr_complex) * mapped_items); if (zigzag_interleave == NULL) { - fprintf(stderr, "Frame mapper 1st malloc, Out of memory.\n"); - exit(1); + GR_LOG_FATAL(d_logger, "Frame Mapper, cannot allocate memory for zigzag_interleave."); + throw std::bad_alloc(); } } else { set_output_multiple((N_P2 * C_P2) + ((numdatasyms - 1) * C_DATA) + N_FC); mapped_items = (N_P2 * C_P2) + ((numdatasyms - 1) * C_DATA) + N_FC; if (mapped_items < (stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC))) { - fprintf(stderr, "Too many FEC blocks in T2 frame.\n"); + GR_LOG_WARN(d_logger, "Frame Mapper, too many FEC blocks in T2 frame."); mapped_items = stream_items + 1840 + (N_post / eta_mod) + (N_FC - C_FC); /* avoid segfault */ } zigzag_interleave = (gr_complex *) malloc(sizeof(gr_complex) * mapped_items); if (zigzag_interleave == NULL) { - fprintf(stderr, "Frame mapper 1st malloc, Out of memory.\n"); - exit(1); + GR_LOG_FATAL(d_logger, "Frame Mapper, cannot allocate memory for zigzag_interleave."); + throw std::bad_alloc(); } } dummy_randomize = (gr_complex *) malloc(sizeof(gr_complex) * mapped_items - stream_items - 1840 - (N_post / eta_mod) - (N_FC - C_FC)); if (dummy_randomize == NULL) { free(zigzag_interleave); - fprintf(stderr, "Frame mapper 2nd malloc, Out of memory.\n"); - exit(1); + GR_LOG_FATAL(d_logger, "Frame Mapper, cannot allocate memory for dummy_randomize."); + throw std::bad_alloc(); } init_dummy_randomizer(); init_l1_randomizer(); diff --git a/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc index 82b7c94d5f..3e3dc430b6 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_interleaver_bb_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 @@ -249,7 +249,10 @@ namespace gr { offset = twist[col]; for (int row = 0; row < rows; row++) { tempv[offset + (rows * col)] = tempu[index++]; - offset = (offset + 1) % rows; + offset++; + if (offset == rows) { + offset = 0; + } } } index = 0; @@ -268,13 +271,10 @@ namespace gr { pack = 0; for (int e = 0; e < (mod * 2); e++) { offset = mux[e]; - pack |= tempu[index + offset]; - pack <<= 1; + pack |= tempu[index++] << (((mod * 2) - 1) - offset); } - pack >>= 1; out[produced++] = pack >> 4; out[produced++] = pack & 0xf; - index += (mod * 2); consumed += (mod * 2); } } @@ -327,7 +327,10 @@ namespace gr { offset = twist[col]; for (int row = 0; row < rows; row++) { tempv[offset + (rows * col)] = tempu[index++]; - offset = (offset + 1) % rows; + offset++; + if (offset == rows) { + offset = 0; + } } } index = 0; @@ -350,13 +353,10 @@ namespace gr { pack = 0; for (int e = 0; e < (mod * 2); e++) { offset = mux[e]; - pack |= tempu[index + offset]; - pack <<= 1; + pack |= tempu[index++] << (((mod * 2) - 1) - offset); } - pack >>= 1; out[produced++] = pack >> 6; out[produced++] = pack & 0x3f; - index += (mod * 2); consumed += (mod * 2); } } @@ -406,7 +406,10 @@ namespace gr { offset = twist256n[col]; for (int row = 0; row < rows; row++) { tempv[offset + (rows * col)] = tempu[index++]; - offset = (offset + 1) % rows; + offset++; + if (offset == rows) { + offset = 0; + } } } index = 0; @@ -433,13 +436,10 @@ namespace gr { pack = 0; for (int e = 0; e < (mod * 2); e++) { offset = mux[e]; - pack |= tempu[index + offset]; - pack <<= 1; + pack |= tempu[index++] << (((mod * 2) - 1) - offset); } - pack >>= 1; out[produced++] = pack >> 8; out[produced++] = pack & 0xff; - index += (mod * 2); consumed += (mod * 2); } } @@ -479,7 +479,10 @@ namespace gr { offset = twist256s[col]; for (int row = 0; row < rows; row++) { tempv[offset + (rows * col)] = tempu[index++]; - offset = (offset + 1) % rows; + offset++; + if (offset == rows) { + offset = 0; + } } } index = 0; @@ -498,12 +501,9 @@ namespace gr { pack = 0; for (int e = 0; e < mod; e++) { offset = mux[e]; - pack |= tempu[index + offset]; - pack <<= 1; + pack |= tempu[index++] << ((mod - 1) - offset); } - pack >>= 1; out[produced++] = pack & 0xff; - index += mod; consumed += mod; } } @@ -551,72 +551,72 @@ namespace gr { const int dvbt2_interleaver_bb_impl::mux16[8] = { - 7, 1, 3, 5, 2, 4, 6, 0 + 7, 1, 4, 2, 5, 3, 6, 0 }; const int dvbt2_interleaver_bb_impl::mux64[12] = { - 11, 8, 5, 2, 10, 7, 4, 1, 9, 6, 3, 0 + 11, 7, 3, 10, 6, 2, 9, 5, 1, 8, 4, 0 }; const int dvbt2_interleaver_bb_impl::mux256[16] = { - 15, 1, 13, 3, 10, 7, 9, 11, 4, 6, 8, 5, 12, 2, 14, 0 + 15, 1, 13, 3, 8, 11, 9, 5, 10, 6, 4, 7, 12, 2, 14, 0 }; const int dvbt2_interleaver_bb_impl::mux16_35[8] = { - 0, 2, 3, 6, 4, 1, 7, 5 + 0, 5, 1, 2, 4, 7, 3, 6 }; const int dvbt2_interleaver_bb_impl::mux16_13[8] = { - 1, 6, 5, 2, 3, 4, 0, 7 + 6, 0, 3, 4, 5, 2, 1, 7 }; const int dvbt2_interleaver_bb_impl::mux16_25[8] = { - 3, 5, 6, 4, 2, 1, 7, 0 + 7, 5, 4, 0, 3, 1, 2, 6 }; const int dvbt2_interleaver_bb_impl::mux64_35[12] = { - 4, 6, 0, 5, 8, 10, 2, 1, 7, 3, 11, 9 + 2, 7, 6, 9, 0, 3, 1, 8, 4, 11, 5, 10 }; const int dvbt2_interleaver_bb_impl::mux64_13[12] = { - 2, 5, 1, 6, 0, 3, 4, 7, 8, 9, 10, 11 + 4, 2, 0, 5, 6, 1, 3, 7, 8, 9, 10, 11 }; const int dvbt2_interleaver_bb_impl::mux64_25[12] = { - 1, 2, 4, 5, 0, 6, 3, 8, 7, 10, 9, 11 + 4, 0, 1, 6, 2, 3, 5, 8, 7, 10, 9, 11 }; const int dvbt2_interleaver_bb_impl::mux256_35[16] = { - 4, 6, 0, 2, 3, 14, 12, 10, 7, 5, 8, 1, 15, 9, 11, 13 + 2, 11, 3, 4, 0, 9, 1, 8, 10, 13, 7, 14, 6, 15, 5, 12 }; const int dvbt2_interleaver_bb_impl::mux256_23[16] = { - 3, 15, 1, 7, 4, 11, 5, 0, 12, 2, 9, 14, 13, 6, 8, 10 + 7, 2, 9, 0, 4, 6, 13, 3, 14, 10, 15, 5, 8, 12, 11, 1 }; const int dvbt2_interleaver_bb_impl::mux256s[8] = { - 7, 2, 4, 1, 6, 3, 5, 0 + 7, 3, 1, 5, 2, 6, 4, 0 }; const int dvbt2_interleaver_bb_impl::mux256s_13[8] = { - 1, 2, 3, 5, 0, 4, 6, 7 + 4, 0, 1, 2, 5, 3, 6, 7 }; const int dvbt2_interleaver_bb_impl::mux256s_25[8] = { - 1, 3, 4, 5, 0, 2, 6, 7 + 4, 0, 5, 1, 2, 3, 6, 7 }; } /* namespace dtv */ diff --git a/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc index fc091bd70d..cec39a7041 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_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 @@ -25,7 +25,6 @@ #include <gnuradio/io_signature.h> #include "dvbt2_paprtr_cc_impl.h" #include <volk/volk.h> -#include <stdio.h> namespace gr { namespace dtv { @@ -518,61 +517,65 @@ namespace gr { left_nulls = ((vlength - C_PS) / 2) + 1; right_nulls = (vlength - C_PS) / 2; papr_fft_size = vlength; - papr_fft = new fft::fft_complex(papr_fft_size, false, 1); + papr_fft = new (std::nothrow) fft::fft_complex(papr_fft_size, false, 1); + if (papr_fft == NULL) { + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for papr_fft."); + throw std::bad_alloc(); + } ones_freq = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment()); if (ones_freq == NULL) { - fprintf(stderr, "Tone reservation PAPR 1st volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for ones_freq."); delete papr_fft; - exit(1); + throw std::bad_alloc(); } ones_time = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment()); if (ones_time == NULL) { - fprintf(stderr, "Tone reservation PAPR 2nd volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for ones_time."); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } c = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment()); if (c == NULL) { - fprintf(stderr, "Tone reservation PAPR 3rd volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for c."); volk_free(ones_time); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } ctemp = (gr_complex*) volk_malloc(sizeof(gr_complex) * papr_fft_size, volk_get_alignment()); if (ctemp == NULL) { - fprintf(stderr, "Tone reservation PAPR 4th volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for ctemp."); volk_free(c); volk_free(ones_time); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } magnitude = (float*) volk_malloc(sizeof(float) * papr_fft_size, volk_get_alignment()); if (magnitude == NULL) { - fprintf(stderr, "Tone reservation PAPR 5th volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for magnitude."); volk_free(ctemp); volk_free(c); volk_free(ones_time); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } r = (gr_complex*) volk_malloc(sizeof(gr_complex) * N_TR, volk_get_alignment()); if (r == NULL) { - fprintf(stderr, "Tone reservation PAPR 6th volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for r."); volk_free(magnitude); volk_free(ctemp); volk_free(c); volk_free(ones_time); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } rNew = (gr_complex*) volk_malloc(sizeof(gr_complex) * N_TR, volk_get_alignment()); if (rNew == NULL) { - fprintf(stderr, "Tone reservation PAPR 7th volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for rNew."); volk_free(r); volk_free(magnitude); volk_free(ctemp); @@ -580,11 +583,11 @@ namespace gr { volk_free(ones_time); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } v = (gr_complex*) volk_malloc(sizeof(gr_complex) * N_TR, volk_get_alignment()); if (v == NULL) { - fprintf(stderr, "Tone reservation PAPR 8th volk_malloc, Out of memory.\n"); + GR_LOG_FATAL(d_logger, "Tone Reservation PAPR, cannot allocate memory for v."); volk_free(rNew); volk_free(r); volk_free(magnitude); @@ -593,7 +596,7 @@ namespace gr { volk_free(ones_time); volk_free(ones_freq); delete papr_fft; - exit(1); + throw std::bad_alloc(); } num_symbols = numdatasyms + N_P2; set_output_multiple(num_symbols); diff --git a/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc index 26c83492b9..2bb19f5189 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_pilotgenerator_cc_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 @@ -1131,7 +1131,11 @@ namespace gr { } equalization_enable = equalization; ofdm_fft_size = vlength; - ofdm_fft = new fft::fft_complex(ofdm_fft_size, false, 1); + ofdm_fft = new (std::nothrow) fft::fft_complex(ofdm_fft_size, false, 1); + if (ofdm_fft == NULL) { + GR_LOG_FATAL(d_logger, "Pilot Generator and IFFT, cannot allocate memory for ofdm_fft."); + throw std::bad_alloc(); + } num_symbols = numdatasyms + N_P2; set_output_multiple(num_symbols); } diff --git a/gr-filter/grc/filter_fractional_resampler_xx.xml b/gr-filter/grc/filter_fractional_resampler_xx.xml index 40957b889d..b2b4b1066c 100644 --- a/gr-filter/grc/filter_fractional_resampler_xx.xml +++ b/gr-filter/grc/filter_fractional_resampler_xx.xml @@ -42,7 +42,12 @@ <sink> <name>rate</name> <type>float</type> - <optional>1</optional> + <optional>1</optional> + </sink> + <sink> + <name>msg_in</name> + <type>message</type> + <optional>1</optional> </sink> <source> <name>out</name> diff --git a/gr-filter/include/gnuradio/filter/fractional_resampler_cc.h b/gr-filter/include/gnuradio/filter/fractional_resampler_cc.h index 6fde6dde8a..65e53e23f2 100644 --- a/gr-filter/include/gnuradio/filter/fractional_resampler_cc.h +++ b/gr-filter/include/gnuradio/filter/fractional_resampler_cc.h @@ -32,6 +32,11 @@ namespace gr { /*! * \brief resampling MMSE filter with complex input, complex output * \ingroup resamplers_blk + * + * \details + * The resampling ratio and mu parameters can be set with a pmt dict + * message. Keys are pmt symbols with the strings "resamp_ratio" and "mu" + * and values are pmt floats. */ class FILTER_API fractional_resampler_cc : virtual public block { diff --git a/gr-filter/include/gnuradio/filter/fractional_resampler_ff.h b/gr-filter/include/gnuradio/filter/fractional_resampler_ff.h index 9836010af5..f8d207d337 100644 --- a/gr-filter/include/gnuradio/filter/fractional_resampler_ff.h +++ b/gr-filter/include/gnuradio/filter/fractional_resampler_ff.h @@ -32,7 +32,13 @@ namespace gr { /*! * \brief Resampling MMSE filter with float input, float output * \ingroup resamplers_blk + * + * \details + * The resampling ratio and mu parameters can be set with a pmt dict + * message. Keys are pmt symbols with the strings "resamp_ratio" and "mu" + * and values are pmt floats. */ + class FILTER_API fractional_resampler_ff : virtual public block { public: diff --git a/gr-filter/lib/fractional_resampler_cc_impl.cc b/gr-filter/lib/fractional_resampler_cc_impl.cc index 72a2262605..4d8def70cd 100644 --- a/gr-filter/lib/fractional_resampler_cc_impl.cc +++ b/gr-filter/lib/fractional_resampler_cc_impl.cc @@ -52,6 +52,9 @@ namespace gr { throw std::out_of_range("phase shift ratio must be > 0 and < 1"); set_relative_rate(1.0 / resamp_ratio); + message_port_register_in(pmt::intern("msg_in")); + set_msg_handler(pmt::intern("msg_in"), boost::bind( + &fractional_resampler_cc_impl::handle_msg, this, _1)); } fractional_resampler_cc_impl::~fractional_resampler_cc_impl() @@ -60,6 +63,29 @@ namespace gr { } void + fractional_resampler_cc_impl::handle_msg(pmt::pmt_t msg) { + if(!pmt::is_dict(msg)) + return; + // set resamp_ratio or mu by message dict + if(pmt::dict_has_key(msg, pmt::intern("resamp_ratio"))) { + set_resamp_ratio( + pmt::to_float( + pmt::dict_ref(msg, pmt::intern("resamp_ratio"), + pmt::from_float(resamp_ratio())) + ) + ); + } + if(pmt::dict_has_key(msg, pmt::intern("mu"))) { + set_mu( + pmt::to_float( + pmt::dict_ref(msg, pmt::intern("mu"), + pmt::from_float(mu())) + ) + ); + } + } + + void fractional_resampler_cc_impl::forecast(int noutput_items, gr_vector_int &ninput_items_required) { diff --git a/gr-filter/lib/fractional_resampler_cc_impl.h b/gr-filter/lib/fractional_resampler_cc_impl.h index d88d595370..8b7d9de317 100644 --- a/gr-filter/lib/fractional_resampler_cc_impl.h +++ b/gr-filter/lib/fractional_resampler_cc_impl.h @@ -42,6 +42,8 @@ namespace gr { float resamp_ratio); ~fractional_resampler_cc_impl(); + void handle_msg(pmt::pmt_t msg); + void forecast(int noutput_items, gr_vector_int &ninput_items_required); int general_work(int noutput_items, diff --git a/gr-filter/lib/fractional_resampler_ff_impl.cc b/gr-filter/lib/fractional_resampler_ff_impl.cc index 2ffccf5204..6fcd7e53d3 100644 --- a/gr-filter/lib/fractional_resampler_ff_impl.cc +++ b/gr-filter/lib/fractional_resampler_ff_impl.cc @@ -52,6 +52,10 @@ namespace gr { throw std::out_of_range("phase shift ratio must be > 0 and < 1"); set_relative_rate(1.0 / resamp_ratio); + + message_port_register_in(pmt::intern("msg_in")); + set_msg_handler(pmt::intern("msg_in"), boost::bind( + &fractional_resampler_ff_impl::handle_msg, this, _1)); } fractional_resampler_ff_impl::~fractional_resampler_ff_impl() @@ -60,6 +64,29 @@ namespace gr { } void + fractional_resampler_ff_impl::handle_msg(pmt::pmt_t msg) { + if(!pmt::is_dict(msg)) + return; + // set resamp_ratio or mu by message dict + if(pmt::dict_has_key(msg, pmt::intern("resamp_ratio"))) { + set_resamp_ratio( + pmt::to_float( + pmt::dict_ref(msg, pmt::intern("resamp_ratio"), + pmt::from_float(resamp_ratio())) + ) + ); + } + if(pmt::dict_has_key(msg, pmt::intern("mu"))) { + set_mu( + pmt::to_float( + pmt::dict_ref(msg, pmt::intern("mu"), + pmt::from_float(mu())) + ) + ); + } + } + + void fractional_resampler_ff_impl::forecast(int noutput_items, gr_vector_int &ninput_items_required) { diff --git a/gr-filter/lib/fractional_resampler_ff_impl.h b/gr-filter/lib/fractional_resampler_ff_impl.h index 11c9886176..cccc1be4b3 100644 --- a/gr-filter/lib/fractional_resampler_ff_impl.h +++ b/gr-filter/lib/fractional_resampler_ff_impl.h @@ -42,6 +42,8 @@ namespace gr { float resamp_ratio); ~fractional_resampler_ff_impl(); + void handle_msg(pmt::pmt_t msg); + void forecast(int noutput_items, gr_vector_int &ninput_items_required); int general_work(int noutput_items, diff --git a/gr-qtgui/include/gnuradio/qtgui/utils.h b/gr-qtgui/include/gnuradio/qtgui/utils.h index 2c51b24820..438c965ed5 100644 --- a/gr-qtgui/include/gnuradio/qtgui/utils.h +++ b/gr-qtgui/include/gnuradio/qtgui/utils.h @@ -28,6 +28,7 @@ #include <qwt_plot_picker.h> #include <qwt_picker_machine.h> #include <QString> +#include <QCoreApplication> /*! * From QSS file name, extracts the file contents and returns a @@ -66,4 +67,6 @@ public: const QEvent *e); }; +void check_set_qss(QApplication *app); + #endif /* INCLUDED_QTGUI_UTILS_H */ diff --git a/gr-qtgui/lib/const_sink_c_impl.cc b/gr-qtgui/lib/const_sink_c_impl.cc index eaaf5f570a..63777d7827 100644 --- a/gr-qtgui/lib/const_sink_c_impl.cc +++ b/gr-qtgui/lib/const_sink_c_impl.cc @@ -136,11 +136,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new ConstellationDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/edit_box_msg_impl.cc b/gr-qtgui/lib/edit_box_msg_impl.cc index e0c5f64b3d..084e2d4f34 100644 --- a/gr-qtgui/lib/edit_box_msg_impl.cc +++ b/gr-qtgui/lib/edit_box_msg_impl.cc @@ -73,11 +73,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); d_is_pair = is_pair; d_is_static = is_static; diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc index 517786d58d..ffa4e3017c 100644 --- a/gr-qtgui/lib/freq_sink_c_impl.cc +++ b/gr-qtgui/lib/freq_sink_c_impl.cc @@ -162,11 +162,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new FreqDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc index 90624e78eb..3fe2572eb0 100644 --- a/gr-qtgui/lib/freq_sink_f_impl.cc +++ b/gr-qtgui/lib/freq_sink_f_impl.cc @@ -161,11 +161,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new FreqDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/histogram_sink_f_impl.cc b/gr-qtgui/lib/histogram_sink_f_impl.cc index 4a1267c129..cd48de8666 100644 --- a/gr-qtgui/lib/histogram_sink_f_impl.cc +++ b/gr-qtgui/lib/histogram_sink_f_impl.cc @@ -123,11 +123,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new HistogramDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/qtgui_util.cc b/gr-qtgui/lib/qtgui_util.cc index 07cf3cc9a3..0a0c826bbe 100644 --- a/gr-qtgui/lib/qtgui_util.cc +++ b/gr-qtgui/lib/qtgui_util.cc @@ -21,8 +21,11 @@ */ #include <gnuradio/qtgui/utils.h> +#include <gnuradio/prefs.h> #include <QDebug> #include <QFile> +#include <QCoreApplication> +#include <qapplication.h> QString get_qt_style_sheet(QString filename) @@ -101,3 +104,12 @@ QwtDblClickPlotPicker::stateMachine(int n) const { return new QwtPickerDblClickPointMachine; } + +void check_set_qss(QApplication *app){ + std::string qssfile = gr::prefs::singleton()->get_string("qtgui","qss",""); + if(qssfile.size() > 0) { + QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); + app->setStyleSheet(sstext); + } +} + diff --git a/gr-qtgui/lib/sink_c_impl.cc b/gr-qtgui/lib/sink_c_impl.cc index c1ee694213..ba34eaaa32 100644 --- a/gr-qtgui/lib/sink_c_impl.cc +++ b/gr-qtgui/lib/sink_c_impl.cc @@ -138,11 +138,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); if(d_center_freq < 0) { throw std::runtime_error("sink_c_impl: Received bad center frequency.\n"); diff --git a/gr-qtgui/lib/sink_f_impl.cc b/gr-qtgui/lib/sink_f_impl.cc index d9bc526dbf..17a4f78db4 100644 --- a/gr-qtgui/lib/sink_f_impl.cc +++ b/gr-qtgui/lib/sink_f_impl.cc @@ -138,11 +138,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); uint64_t maxBufferSize = 32768; d_main_gui = new SpectrumGUIClass(maxBufferSize, d_fftsize, diff --git a/gr-qtgui/lib/time_raster_sink_b_impl.cc b/gr-qtgui/lib/time_raster_sink_b_impl.cc index c0990a9890..cc13faf49a 100644 --- a/gr-qtgui/lib/time_raster_sink_b_impl.cc +++ b/gr-qtgui/lib/time_raster_sink_b_impl.cc @@ -138,11 +138,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); // Create time raster plot; as a bit input, we expect to see 1's // and 0's from each stream, so we set the maximum intensity diff --git a/gr-qtgui/lib/time_raster_sink_f_impl.cc b/gr-qtgui/lib/time_raster_sink_f_impl.cc index 2fb3e7db68..873bd68555 100644 --- a/gr-qtgui/lib/time_raster_sink_f_impl.cc +++ b/gr-qtgui/lib/time_raster_sink_f_impl.cc @@ -136,11 +136,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); // Create time raster plot; as a bit input, we expect to see 1's // and 0's from each stream, so we set the maximum intensity diff --git a/gr-qtgui/lib/time_sink_c_impl.cc b/gr-qtgui/lib/time_sink_c_impl.cc index 209f03340f..d7514aebaa 100644 --- a/gr-qtgui/lib/time_sink_c_impl.cc +++ b/gr-qtgui/lib/time_sink_c_impl.cc @@ -137,11 +137,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 2; d_main_gui = new TimeDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/time_sink_f_impl.cc b/gr-qtgui/lib/time_sink_f_impl.cc index 50a86d7dff..b3b1c5909d 100644 --- a/gr-qtgui/lib/time_sink_f_impl.cc +++ b/gr-qtgui/lib/time_sink_f_impl.cc @@ -134,11 +134,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new TimeDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/vector_sink_f_impl.cc b/gr-qtgui/lib/vector_sink_f_impl.cc index ba139b97f4..6197da4949 100644 --- a/gr-qtgui/lib/vector_sink_f_impl.cc +++ b/gr-qtgui/lib/vector_sink_f_impl.cc @@ -147,11 +147,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); d_main_gui = new VectorDisplayForm(d_nconnections, d_parent); d_main_gui->setVecSize(d_vlen); diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.cc b/gr-qtgui/lib/waterfall_sink_c_impl.cc index 7395aaf2a9..fbc655afba 100644 --- a/gr-qtgui/lib/waterfall_sink_c_impl.cc +++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc @@ -162,11 +162,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new WaterfallDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.cc b/gr-qtgui/lib/waterfall_sink_f_impl.cc index b6f50de31d..fdb8fde686 100644 --- a/gr-qtgui/lib/waterfall_sink_f_impl.cc +++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc @@ -162,11 +162,7 @@ namespace gr { } // If a style sheet is set in the prefs file, enable it here. - std::string qssfile = prefs::singleton()->get_string("qtgui","qss",""); - if(qssfile.size() > 0) { - QString sstext = get_qt_style_sheet(QString(qssfile.c_str())); - d_qApplication->setStyleSheet(sstext); - } + check_set_qss(d_qApplication); int numplots = (d_nconnections > 0) ? d_nconnections : 1; d_main_gui = new WaterfallDisplayForm(numplots, d_parent); diff --git a/gr-qtgui/python/qtgui/CMakeLists.txt b/gr-qtgui/python/qtgui/CMakeLists.txt index 4fa4d0f484..1c20033db2 100644 --- a/gr-qtgui/python/qtgui/CMakeLists.txt +++ b/gr-qtgui/python/qtgui/CMakeLists.txt @@ -23,6 +23,7 @@ include(GrPython) GR_PYTHON_INSTALL( FILES __init__.py range.py + util.py DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui COMPONENT "qtgui_python" ) diff --git a/gr-qtgui/python/qtgui/__init__.py b/gr-qtgui/python/qtgui/__init__.py index 224bde071e..8b60dc6dbe 100644 --- a/gr-qtgui/python/qtgui/__init__.py +++ b/gr-qtgui/python/qtgui/__init__.py @@ -35,3 +35,4 @@ except ImportError: from qtgui_swig import * from range import Range, RangeWidget +import util diff --git a/gr-qtgui/python/qtgui/range.py b/gr-qtgui/python/qtgui/range.py index 3eafc9002e..ca42bf71f7 100755 --- a/gr-qtgui/python/qtgui/range.py +++ b/gr-qtgui/python/qtgui/range.py @@ -22,7 +22,7 @@ # from PyQt4 import Qt, QtCore, QtGui - +import util class Range(object): def __init__(self, minv, maxv, step, default, min_length): @@ -33,6 +33,7 @@ class Range(object): self.min_length = min_length self.find_precision() self.find_nsteps() + util.check_set_qss() def find_precision(self): # Get the decimal part of the step diff --git a/gr-qtgui/python/qtgui/util.py b/gr-qtgui/python/qtgui/util.py new file mode 100644 index 0000000000..d2e9495ac6 --- /dev/null +++ b/gr-qtgui/python/qtgui/util.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2016 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio 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. +# +# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from PyQt4 import Qt, QtCore, QtGui +from gnuradio import gr + +def check_set_qss(): + app = QtGui.qApp + qssfile = gr.prefs().get_string("qtgui","qss","") + if(len(qssfile)>0): + try: + app.setStyleSheet(open(qssfile).read()) + except: + print "WARNING: bad QSS file, %s"%(qssfile) + diff --git a/gr-trellis/examples/grc/.gitignore b/gr-trellis/examples/grc/.gitignore new file mode 100644 index 0000000000..f104652b68 --- /dev/null +++ b/gr-trellis/examples/grc/.gitignore @@ -0,0 +1 @@ +*.py diff --git a/gr-trellis/examples/grc/interference_cancellation.grc b/gr-trellis/examples/grc/interference_cancellation.grc index 1dbcf69b86..479dd64dc9 100644 --- a/gr-trellis/examples/grc/interference_cancellation.grc +++ b/gr-trellis/examples/grc/interference_cancellation.grc @@ -1,896 +1,1762 @@ -<?xml version='1.0' encoding='ASCII'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Fri Sep 26 18:21:00 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>int_cancellation</value> + <key>author</key> + <value>AA</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>2048, 2048</value> </param> <param> - <key>title</key> - <value>Superposition Coding</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> - <value>AA</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>gnuradio flow graph</value> </param> <param> - <key>window_size</key> - <value>2048, 2048</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(0, 4)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>int_cancellation</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>_coordinate</key> - <value>(10, 10)</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <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>Superposition Coding</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>prefix</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> - </param> - <param> <key>_coordinate</key> - <value>(871, 14)</value> + <value>(544, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> <value>R</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>100e3</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> </param> <param> <key>value</key> - <value>100e3</value> + <value>.1</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(748, 12)</value> + <value>(176, 4)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>alpha</value> + </param> + <param> + <key>label</key> + <value>P1/P</value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>.01</value> + </param> + <param> + <key>stop</key> + <value>1</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>noisevar</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>10**(-snr_db/10)</value> - </param> - <param> <key>_coordinate</key> - <value>(637, 13)</value> + <value>(456, 68)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>block</value> + </param> + <param> + <key>value</key> + <value>1000</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm1</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(632, 4)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fsm1</value> + </param> + <param> <key>value</key> <value>"awgn1o2_16.fsm"</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>(849, 87)</value> + <value>(632, 68)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>fsm2</value> + </param> + <param> + <key>value</key> + <value>"awgn1o2_4.fsm"</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm2</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(456, 4)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>noisevar</value> + </param> + <param> <key>value</key> - <value>"awgn1o2_4.fsm"</value> + <value>10**(-snr_db/10)</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(849, 153)</value> + <value>(816, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>prefix</value> + </param> + <param> + <key>value</key> + <value>"@FSM_FILE_INSTALL_DIR@"</value> + </param> </block> <block> - <key>variable</key> + <key>variable_qtgui_range</key> <param> - <key>id</key> - <value>block</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>10</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>1000</value> + <key>_coordinate</key> + <value>(312, 4)</value> </param> <param> - <key>_coordinate</key> - <value>(752, 85)</value> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>snr_db</value> + </param> + <param> + <key>label</key> + <value>P/sigma^2 (dB)</value> + </param> + <param> + <key>min_len</key> + <value>200</value> + </param> + <param> + <key>orient</key> + <value>Qt.Horizontal</value> + </param> + <param> + <key>start</key> + <value>0</value> + </param> + <param> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>20</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> + </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0_1</value> + <key>amp</key> + <value>noisevar</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>in_type</key> - <value>byte</value> + <key>_coordinate</key> + <value>(808, 356)</value> </param> <param> - <key>out_type</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>analog_noise_source_x_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> + </param> + <param> + <key>type</key> <value>complex</value> </param> <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>seed</key> + <value>-42</value> </param> + </block> + <block> + <key>analog_random_source_x</key> <param> - <key>dimension</key> - <value>1</value> + <key>alias</key> + <value></value> </param> <param> - <key>num_ports</key> - <value>1</value> + <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>_coordinate</key> - <value>(408, 1719)</value> + <value>(0, 148)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_0</value> + <value>analog_random_source_x_0</value> </param> <param> - <key>_enabled</key> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>2</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>num_samps</key> + <value>block</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> <value>True</value> </param> + </block> + <block> + <key>analog_random_source_x</key> <param> - <key>stream_id</key> - <value>user1</value> + <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>(356, 1844)</value> + <value>(0, 284)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_2_0</value> + <value>analog_random_source_x_1</value> </param> <param> - <key>_enabled</key> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>2</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>num_samps</key> + <value>block</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> <value>True</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>stream_id</key> - <value>user2_est</value> + <key>bits_per_symbol</key> + <value>2</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>_coordinate</key> - <value>(10, 1649)</value> + <value>(568, 476)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>blks2_error_rate_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block*100</value> + </param> </block> <block> - <key>blocks_sub_xx</key> + <key>blks2_error_rate</key> <param> - <key>id</key> - <value>blocks_sub_xx_2_0</value> + <key>bits_per_symbol</key> + <value>2</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>_coordinate</key> + <value>(584, 668)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blks2_error_rate_0_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> <key>type</key> - <value>complex</value> + <value>'BER'</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>win_size</key> + <value>block*100</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>num_inputs</key> + <key>bits_per_symbol</key> <value>2</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>_coordinate</key> - <value>(963, 1695)</value> + <value>(416, 1052)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>blks2_error_rate_0_0_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block*100</value> + </param> </block> <block> - <key>virtual_source</key> + <key>blks2_error_rate</key> <param> - <key>id</key> - <value>virtual_source_0_1_2</value> + <key>bits_per_symbol</key> + <value>2</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <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>(705, 1660)</value> + <value>(424, 1348)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>blks2_error_rate_0_0_0_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block*100</value> + </param> </block> <block> - <key>blocks_multiply_const_vxx</key> + <key>blocks_add_xx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_2_0</value> + <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>(1040, 280)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_add_xx_0</value> + </param> + <param> <key>type</key> <value>complex</value> </param> <param> - <key>const</key> - <value>(1-alpha)**0.5</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_inputs</key> + <value>3</value> </param> <param> <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>blocks_multiply_const_vxx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>const</key> + <value>alpha**0.5</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>_coordinate</key> - <value>(721, 1727)</value> + <value>(816, 172)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>blocks_multiply_const_vxx_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>const</key> + <value>(1-alpha)**0.5</value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>_coordinate</key> + <value>(816, 308)</value> </param> <param> - <key>out_type</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_multiply_const_vxx_1</value> + </param> + <param> + <key>type</key> <value>complex</value> </param> <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>dimension</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>num_ports</key> + <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>blocks_multiply_const_vxx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>const</key> + <value>alpha**0.5</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>_coordinate</key> - <value>(416, 1251)</value> + <value>(632, 908)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_4</value> + <value>blocks_multiply_const_vxx_2</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>stream_id</key> - <value>user2</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(359, 1373)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>virtual_source</key> + <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>virtual_source_0_2</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>user1_est</value> + <key>const</key> + <value>(1-alpha)**0.5</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(33, 1187)</value> + <value>(672, 1220)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>blocks_multiply_const_vxx_2_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> </block> <block> <key>blocks_sub_xx</key> <param> - <key>id</key> - <value>blocks_sub_xx_2</value> + <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>(896, 880)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_sub_xx_2</value> + </param> + <param> <key>type</key> <value>complex</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>num_inputs</key> <value>2</value> </param> <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_sub_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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(942, 1229)</value> + <value>(872, 1192)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>blocks_sub_xx_2_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_inputs</key> + <value>2</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> </block> <block> - <key>virtual_source</key> + <key>blocks_throttle</key> <param> - <key>id</key> - <value>virtual_source_0_1_1</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(698, 1198)</value> + <value>(424, 172)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>blocks_multiply_const_vxx_2</value> + <value>blocks_throttle_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>const</key> - <value>alpha**0.5</value> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>samples_per_second</key> + <value>R</value> + </param> + <param> + <key>type</key> + <value>byte</value> </param> <param> <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_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>minoutbuf</key> - <value>0</value> + <key>dimension</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(708, 1259)</value> + <value>(608, 164)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_3</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>stream_id</key> - <value>user2</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(342, 928)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>out_type</key> + <value>complex</value> + </param> + <param> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> </param> </block> <block> - <key>virtual_sink</key> + <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>virtual_sink_0_2_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>user2_est</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>dimension</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(341, 1025)</value> + <value>(608, 300)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_1_0</value> + <value>digital_chunks_to_symbols_xx_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(11, 873)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>out_type</key> + <value>complex</value> + </param> + <param> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> </param> </block> <block> - <key>virtual_source</key> + <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>virtual_source_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>user1</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>dimension</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(348, 566)</value> + <value>(416, 900)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>digital_chunks_to_symbols_xx_0_0_0</value> + </param> + <param> + <key>in_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_ports</key> + <value>1</value> + </param> + <param> + <key>out_type</key> + <value>complex</value> + </param> + <param> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> + </param> </block> <block> - <key>virtual_sink</key> + <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>virtual_sink_0_2</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>user1_est</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>dimension</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(355, 687)</value> + <value>(432, 1212)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>digital_chunks_to_symbols_xx_0_0_1</value> + </param> + <param> + <key>in_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_ports</key> + <value>1</value> + </param> + <param> + <key>out_type</key> + <value>complex</value> + </param> + <param> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> + </param> </block> <block> - <key>virtual_source</key> + <key>qtgui_const_sink_x</key> <param> - <key>id</key> - <value>virtual_source_0_1</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>_enabled</key> + <key>axislabels</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <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>(13, 530)</value> + <value>(1144, 300)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> + <param> + <key>grid</key> + <value>False</value> + </param> <param> <key>id</key> - <value>wxgui_numbersink2_0</value> + <value>qtgui_const_sink_x_0</value> </param> <param> - <key>_enabled</key> + <key>legend</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>alpha1</key> + <value>1.0</value> </param> <param> - <key>title</key> - <value>BER 1 (raw)</value> + <key>color1</key> + <value>"blue"</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>label1</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>marker1</key> + <value>0</value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>style1</key> + <value>1</value> </param> <param> - <key>max_value</key> + <key>width1</key> <value>1</value> </param> <param> - <key>factor</key> + <key>alpha10</key> <value>1.0</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>color10</key> + <value>"red"</value> </param> <param> - <key>ref_level</key> + <key>label10</key> + <value></value> + </param> + <param> + <key>marker10</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>style10</key> + <value>0</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>width10</key> + <value>1</value> </param> <param> - <key>average</key> - <value>False</value> + <key>alpha2</key> + <value>1.0</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>color2</key> + <value>"red"</value> </param> <param> - <key>show_gauge</key> - <value>True</value> + <key>label2</key> + <value></value> </param> <param> - <key>win_size</key> + <key>marker2</key> + <value>0</value> + </param> + <param> + <key>style2</key> + <value>0</value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>"red"</value> + </param> + <param> + <key>label3</key> <value></value> </param> <param> - <key>grid_pos</key> - <value>0,0,1,1</value> + <key>marker3</key> + <value>0</value> + </param> + <param> + <key>style3</key> + <value>0</value> </param> <param> - <key>notebook</key> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>"red"</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>affinity</key> + <key>marker4</key> + <value>0</value> + </param> + <param> + <key>style4</key> + <value>0</value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>"red"</value> + </param> + <param> + <key>label5</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(944, 556)</value> + <key>marker5</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>style5</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> - <key>id</key> - <value>wxgui_numbersink2_2</value> + <key>width5</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alpha6</key> + <value>1.0</value> </param> <param> - <key>type</key> - <value>float</value> + <key>color6</key> + <value>"red"</value> </param> <param> - <key>title</key> - <value>BER 2 (raw)</value> + <key>label6</key> + <value></value> </param> <param> - <key>units</key> - <value>BER</value> + <key>marker6</key> + <value>0</value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>style6</key> + <value>0</value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>"red"</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>marker7</key> + <value>0</value> </param> <param> - <key>min_value</key> + <key>style7</key> <value>0</value> </param> <param> - <key>max_value</key> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>alpha8</key> <value>1.0</value> </param> <param> - <key>factor</key> + <key>color8</key> + <value>"red"</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>marker8</key> + <value>0</value> + </param> + <param> + <key>style8</key> + <value>0</value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> <value>1.0</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>color9</key> + <value>"red"</value> + </param> + <param> + <key>label9</key> + <value></value> </param> <param> - <key>ref_level</key> + <key>marker9</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>style9</key> + <value>0</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>width9</key> + <value>1</value> </param> <param> - <key>average</key> - <value>False</value> + <key>name</key> + <value>""</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>nconnections</key> + <value>1</value> </param> <param> - <key>show_gauge</key> - <value>True</value> + <key>size</key> + <value>1024</value> </param> <param> - <key>win_size</key> - <value></value> + <key>tr_chan</key> + <value>0</value> </param> <param> - <key>grid_pos</key> - <value>0,1,1,1</value> + <key>tr_level</key> + <value>0.0</value> </param> <param> - <key>notebook</key> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_slope</key> + <value>qtgui.TRIG_SLOPE_POS</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>xmax</key> + <value>2</value> + </param> + <param> + <key>xmin</key> + <value>-2</value> + </param> + <param> + <key>ymax</key> + <value>2</value> + </param> + <param> + <key>ymin</key> + <value>-2</value> + </param> + </block> + <block> + <key>qtgui_number_sink</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>avg</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> <value></value> </param> <param> @@ -898,1605 +1764,2015 @@ <value></value> </param> <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> <key>_coordinate</key> - <value>(944, 886)</value> + <value>(784, 468)</value> + </param> + <param> + <key>gui_hint</key> + <value>0,0,1,1</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> - <key>id</key> - <value>wxgui_numbersink2_3</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0</value> </param> <param> <key>type</key> <value>float</value> </param> <param> - <key>title</key> - <value>BER 2 (after cancelling user 1)</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>units</key> + <key>factor1</key> + <value>1</value> + </param> + <param> + <key>label1</key> <value>BER</value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>unit1</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>factor10</key> + <value>1</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>label10</key> + <value></value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>unit10</key> + <value></value> </param> <param> - <key>ref_level</key> - <value>0</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>label2</key> + <value></value> </param> <param> - <key>average</key> - <value>False</value> + <key>unit2</key> + <value></value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>show_gauge</key> - <value>True</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>win_size</key> + <key>label3</key> <value></value> </param> <param> - <key>grid_pos</key> - <value>1,1,1,1</value> + <key>unit3</key> + <value></value> </param> <param> - <key>notebook</key> - <value></value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>affinity</key> + <key>factor4</key> + <value>1</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(945, 1351)</value> + <key>unit4</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color5</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_1</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label5</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>unit5</key> + <value></value> </param> <param> - <key>const</key> - <value>(1-alpha)**0.5</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>vlen</key> + <key>factor6</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit6</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(943, 402)</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor7</key> + <value>1</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <key>label7</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit7</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>const</key> - <value>alpha**0.5</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>vlen</key> + <key>label8</key> + <value></value> + </param> + <param> + <key>unit8</key> + <value></value> + </param> + <param> + <key>color9</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor9</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label9</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit9</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(947, 301)</value> + <key>max</key> + <value>1</value> </param> <param> - <key>_rotation</key> + <key>min</key> <value>0</value> </param> + <param> + <key>name</key> + <value>"BER1 (Raw)"</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> </block> <block> - <key>virtual_sink</key> + <key>qtgui_number_sink</key> <param> - <key>id</key> - <value>virtual_sink_0_0</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>avg</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>user2</value> + <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>(208, 340)</value> + <value>(792, 660)</value> + </param> + <param> + <key>gui_hint</key> + <value>0,1,1,1</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>analog_random_source_x</key> <param> - <key>id</key> - <value>analog_random_source_x_1</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0_0</value> </param> <param> <key>type</key> - <value>byte</value> + <value>float</value> </param> <param> - <key>min</key> - <value>0</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>max</key> - <value>2</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>num_samps</key> - <value>block</value> + <key>label1</key> + <value>BER</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>unit1</key> + <value></value> </param> <param> - <key>affinity</key> + <key>color10</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor10</key> + <value>1</value> + </param> + <param> + <key>label10</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit10</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(22, 374)</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor2</key> + <value>1</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <key>label2</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit2</key> + <value></value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>out_type</key> - <value>complex</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>label3</key> + <value></value> </param> <param> - <key>dimension</key> + <key>unit3</key> + <value></value> + </param> + <param> + <key>color4</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor4</key> <value>1</value> </param> <param> - <key>num_ports</key> + <key>label4</key> + <value></value> + </param> + <param> + <key>unit4</key> + <value></value> + </param> + <param> + <key>color5</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor5</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label5</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit5</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(700, 294)</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor6</key> + <value>1</value> </param> - </block> - <block> - <key>blocks_throttle</key> <param> - <key>id</key> - <value>blocks_throttle_0</value> + <key>label6</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit6</key> + <value></value> </param> <param> - <key>type</key> - <value>byte</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>vlen</key> + <key>label7</key> + <value></value> + </param> + <param> + <key>unit7</key> + <value></value> + </param> + <param> + <key>color8</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor8</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label8</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit8</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(576, 226)</value> + <key>color9</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor9</key> + <value>1</value> </param> - </block> - <block> - <key>analog_random_source_x</key> <param> - <key>id</key> - <value>analog_random_source_x_0</value> + <key>label9</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit9</key> + <value></value> </param> <param> - <key>type</key> - <value>byte</value> + <key>max</key> + <value>1</value> </param> <param> <key>min</key> <value>0</value> </param> <param> - <key>max</key> - <value>2</value> + <key>name</key> + <value>"BER 2 (Raw)"</value> </param> <param> - <key>num_samps</key> - <value>block</value> + <key>nconnections</key> + <value>1</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>update_time</key> + <value>0.10</value> + </param> + </block> + <block> + <key>qtgui_number_sink</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>avg</key> + <value>0</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>1</value> </param> <param> <key>_coordinate</key> - <value>(18, 253)</value> + <value>(600, 1044)</value> + </param> + <param> + <key>gui_hint</key> + <value>1,1,1,1</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> + <param> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> + </param> <param> <key>id</key> - <value>virtual_sink_0</value> + <value>qtgui_number_sink_0_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>float</value> </param> <param> - <key>stream_id</key> - <value>user1</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>_coordinate</key> - <value>(208, 229)</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>label1</key> + <value>BER</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0</value> + <key>unit1</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>factor10</key> + <value>1</value> </param> <param> - <key>out_type</key> - <value>complex</value> + <key>label10</key> + <value></value> </param> <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>unit10</key> + <value></value> </param> <param> - <key>dimension</key> + <key>color2</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor2</key> <value>1</value> </param> <param> - <key>num_ports</key> + <key>label2</key> + <value></value> + </param> + <param> + <key>unit2</key> + <value></value> + </param> + <param> + <key>color3</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor3</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label3</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit3</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(700, 394)</value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor4</key> + <value>1</value> </param> - </block> - <block> - <key>blocks_add_xx</key> <param> - <key>id</key> - <value>blocks_add_xx_1</value> + <key>label4</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit4</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>vlen</key> + <key>label5</key> + <value></value> + </param> + <param> + <key>unit5</key> + <value></value> + </param> + <param> + <key>color6</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor6</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit6</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(1400, 341)</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor7</key> + <value>1</value> </param> - </block> - <block> - <key>blocks_add_xx</key> <param> - <key>id</key> - <value>blocks_add_xx_0</value> + <key>label7</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit7</key> + <value></value> </param> <param> - <key>type</key> - <value>complex</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>vlen</key> + <key>label8</key> + <value></value> + </param> + <param> + <key>unit8</key> + <value></value> + </param> + <param> + <key>color9</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor9</key> <value>1</value> </param> <param> - <key>affinity</key> + <key>label9</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit9</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(1224, 324)</value> + <key>max</key> + <value>1</value> </param> <param> - <key>_rotation</key> + <key>min</key> <value>0</value> </param> - </block> - <block> - <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>analog_noise_source_x_0</value> + <key>name</key> + <value>"BER 2 (after cancelling user 1)"</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>nconnections</key> + <value>1</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>update_time</key> + <value>0.10</value> </param> + </block> + <block> + <key>qtgui_number_sink</key> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>amp</key> - <value>noisevar</value> + <key>avg</key> + <value>0</value> </param> <param> - <key>seed</key> - <value>-42</value> + <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>1</value> </param> <param> <key>_coordinate</key> - <value>(1178, 400)</value> + <value>(632, 1340)</value> + </param> + <param> + <key>gui_hint</key> + <value>1,0,1,1</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> + <param> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> + </param> <param> <key>id</key> - <value>virtual_sink_0_1</value> + <value>qtgui_number_sink_0_0_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>float</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>_coordinate</key> - <value>(1407, 453)</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>label1</key> + <value>BER</value> </param> - </block> - <block> - <key>wxgui_scopesink2</key> <param> - <key>id</key> - <value>wxgui_scopesink2_0</value> + <key>unit1</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>factor10</key> + <value>1</value> </param> <param> - <key>title</key> - <value>Scope Plot</value> + <key>label10</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>unit10</key> + <value></value> </param> <param> - <key>v_scale</key> - <value>0</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>v_offset</key> - <value>0</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>t_scale</key> - <value>0</value> + <key>label2</key> + <value></value> </param> <param> - <key>ac_couple</key> - <value>False</value> + <key>unit2</key> + <value></value> </param> <param> - <key>xy_mode</key> - <value>True</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>num_inputs</key> + <key>factor3</key> <value>1</value> </param> <param> - <key>win_size</key> + <key>label3</key> <value></value> </param> <param> - <key>grid_pos</key> + <key>unit3</key> <value></value> </param> <param> - <key>notebook</key> + <key>color4</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor4</key> + <value>1</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>trig_mode</key> - <value>wxgui.TRIG_MODE_AUTO</value> + <key>unit4</key> + <value></value> </param> <param> - <key>y_axis_label</key> - <value>Counts</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>affinity</key> + <key>factor5</key> + <value>1</value> + </param> + <param> + <key>label5</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(1383, 208)</value> + <key>unit5</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color6</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>trellis_viterbi_combined_xx</key> <param> - <key>id</key> - <value>trellis_viterbi_combined_xx_1</value> + <key>factor6</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label6</key> + <value></value> </param> <param> - <key>type</key> - <value>c</value> + <key>unit6</key> + <value></value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>fsm_args</key> - <value>prefix+fsm1</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>label7</key> + <value></value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>unit7</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>dim</key> + <key>factor8</key> <value>1</value> </param> <param> - <key>table</key> - <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> + <key>label8</key> + <value></value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>unit8</key> + <value></value> </param> <param> - <key>affinity</key> + <key>color9</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor9</key> + <value>1</value> + </param> + <param> + <key>label9</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit9</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(75, 583)</value> + <key>max</key> + <value>1</value> </param> <param> - <key>_rotation</key> + <key>min</key> <value>0</value> </param> + <param> + <key>name</key> + <value>BER 1 (after cancelling user 2)</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> </block> <block> - <key>trellis_viterbi_combined_xx</key> + <key>trellis_encoder_xx</key> <param> - <key>id</key> - <value>trellis_viterbi_combined_xx_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>blocklength</key> + <value>0</value> </param> <param> - <key>type</key> - <value>c</value> + <key>blockwise</key> + <value>False</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>fsm_args</key> <value>prefix+fsm1</value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>_coordinate</key> + <value>(192, 164)</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>-1</value> + <value>0</value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>dim</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>table</key> - <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> + <key>type</key> + <value>bb</value> + </param> + </block> + <block> + <key>trellis_encoder_xx</key> + <param> + <key>alias</key> + <value></value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> <key>_coordinate</key> - <value>(63, 1848)</value> + <value>(192, 300)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>trellis_encoder_xx_0</value> + <value>trellis_encoder_xx_1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <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>trellis_encoder_xx</key> <param> - <key>fsm_args</key> - <value>prefix+fsm1</value> + <key>alias</key> + <value></value> </param> <param> - <key>init_state</key> + <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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fsm_args</key> + <value>prefix+fsm1</value> </param> <param> <key>_coordinate</key> - <value>(337, 270)</value> + <value>(192, 900)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_encoder_xx</key> <param> <key>id</key> <value>trellis_encoder_xx_2</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <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>trellis_encoder_xx</key> <param> - <key>fsm_args</key> - <value>prefix+fsm1</value> + <key>alias</key> + <value></value> </param> <param> - <key>init_state</key> + <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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> <key>_coordinate</key> - <value>(87, 1251)</value> + <value>(184, 1212)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>trellis_encoder_xx_1</value> + <value>trellis_encoder_xx_2_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <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>trellis_viterbi_combined_xx</key> <param> - <key>fsm_args</key> - <value>prefix+fsm2</value> + <key>alias</key> + <value></value> </param> <param> - <key>init_state</key> - <value>0</value> + <key>block_size</key> + <value>block</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>table</key> + <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> </param> <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>dim</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fsm_args</key> + <value>prefix+fsm2</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(376, 381)</value> + <value>(40, 1036)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_2</value> + <value>trellis_viterbi_combined_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>type</key> <value>c</value> </param> <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> <key>out_type</key> <value>b</value> </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> <param> - <key>fsm_args</key> - <value>prefix+fsm2</value> + <key>alias</key> + <value></value> </param> <param> <key>block_size</key> <value>block</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>table</key> + <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> </param> <param> - <key>dim</key> - <value>1</value> + <key>affinity</key> + <value></value> </param> <param> - <key>table</key> - <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> + <key>dim</key> + <value>1</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>affinity</key> - <value></value> + <key>fsm_args</key> + <value>prefix+fsm1</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(85, 931)</value> + <value>(40, 1332)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_0</value> + <value>trellis_viterbi_combined_xx_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>type</key> <value>c</value> </param> <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> <key>out_type</key> <value>b</value> </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> <param> - <key>fsm_args</key> - <value>prefix+fsm2</value> + <key>alias</key> + <value></value> </param> <param> <key>block_size</key> <value>block</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>table</key> + <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> </param> <param> - <key>dim</key> - <value>1</value> + <key>affinity</key> + <value></value> </param> <param> - <key>table</key> - <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> + <key>dim</key> + <value>1</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>affinity</key> - <value></value> + <key>fsm_args</key> + <value>prefix+fsm1</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(81, 1362)</value> + <value>(208, 460)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>trellis_encoder_xx_2_0</value> + <value>trellis_viterbi_combined_xx_1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>type</key> - <value>bb</value> - </param> - <param> - <key>fsm_args</key> - <value>prefix+fsm2</value> + <value>c</value> </param> <param> - <key>init_state</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(91, 1719)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> + <key>out_type</key> + <value>b</value> </param> </block> <block> - <key>wxgui_numbersink2</key> + <key>trellis_viterbi_combined_xx</key> <param> - <key>id</key> - <value>wxgui_numbersink2_3_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>type</key> - <value>float</value> + <key>comment</key> + <value></value> </param> <param> - <key>title</key> - <value>BER 1 (after cancelling user 2)</value> + <key>table</key> + <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>affinity</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>dim</key> + <value>1</value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>final_state</key> + <value>-1</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>_coordinate</key> + <value>(216, 652)</value> </param> <param> - <key>ref_level</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>id</key> + <value>trellis_viterbi_combined_xx_2</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>init_state</key> + <value>-1</value> </param> <param> - <key>average</key> - <value>False</value> + <key>type</key> + <value>c</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>show_gauge</key> - <value>True</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>win_size</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>grid_pos</key> - <value>1,0,1,1</value> + <key>out_type</key> + <value>b</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>notebook</key> + <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(929, 1816)</value> + <value>(192, 228)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_sink_0</value> + </param> + <param> + <key>stream_id</key> + <value>user1</value> + </param> </block> <block> - <key>variable_slider</key> + <key>virtual_sink</key> <param> - <key>id</key> - <value>alpha</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>P1/P</value> + <key>_coordinate</key> + <value>(192, 364)</value> </param> <param> - <key>value</key> - <value>0.1</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>min</key> - <value>0</value> + <key>id</key> + <value>virtual_sink_0_0</value> </param> <param> - <key>max</key> - <value>1.0</value> + <key>stream_id</key> + <value>user2</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>num_steps</key> - <value>100</value> + <key>comment</key> + <value></value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>_coordinate</key> + <value>(1144, 380)</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>virtual_sink_0_1</value> </param> <param> - <key>notebook</key> + <key>stream_id</key> + <value>observation</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(243, 11)</value> + <value>(448, 572)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_sink_0_2</value> + </param> + <param> + <key>stream_id</key> + <value>user1_est</value> + </param> </block> <block> - <key>variable_slider</key> + <key>virtual_sink</key> <param> - <key>id</key> - <value>snr_db</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>P/sigma^2 (dB)</value> + <key>_coordinate</key> + <value>(456, 764)</value> </param> <param> - <key>value</key> - <value>10</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>min</key> - <value>0</value> + <key>id</key> + <value>virtual_sink_0_2_0</value> </param> <param> - <key>max</key> - <value>20</value> + <key>stream_id</key> + <value>user2_est</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> + <value></value> </param> <param> - <key>num_steps</key> - <value>100</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(408, 476)</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>stream_id</key> + <value>user1</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>notebook</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(447, 14)</value> + <value>(240, 1348)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>user1</value> + </param> </block> <block> - <key>blks2_error_rate</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>blks2_error_rate_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>_coordinate</key> + <value>(0, 508)</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> - <value>2</value> + <key>id</key> + <value>virtual_source_0_1</value> </param> <param> - <key>affinity</key> + <key>stream_id</key> + <value>observation</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(724, 613)</value> + <value>(0, 700)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_1_0</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> </block> <block> - <key>blks2_error_rate</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>blks2_error_rate_0_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>_coordinate</key> + <value>(696, 852)</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> - <value>2</value> + <key>id</key> + <value>virtual_source_0_1_1</value> </param> <param> - <key>affinity</key> + <key>stream_id</key> + <value>observation</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(719, 943)</value> + <value>(656, 1172)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_1_2</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> </block> <block> - <key>blks2_error_rate</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>blks2_error_rate_0_0_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>_coordinate</key> + <value>(0, 908)</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> - <value>2</value> + <key>id</key> + <value>virtual_source_0_2</value> </param> <param> - <key>affinity</key> + <key>stream_id</key> + <value>user1_est</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(725, 1399)</value> + <value>(0, 1220)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_2_0</value> + </param> + <param> + <key>stream_id</key> + <value>user2_est</value> + </param> </block> <block> - <key>blks2_error_rate</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>blks2_error_rate_0_0_0_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>_coordinate</key> + <value>(408, 668)</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> - <value>2</value> + <key>id</key> + <value>virtual_source_0_3</value> </param> <param> - <key>affinity</key> + <key>stream_id</key> + <value>user2</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(724, 1880)</value> + <value>(232, 1052)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_4</value> + </param> + <param> + <key>stream_id</key> + <value>user2</value> + </param> </block> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>wxgui_scopesink2_0</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>2</sink_key> + </connection> + <connection> + <source_block_id>analog_random_source_x_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_add_xx_1</source_block_id> - <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> + <source_block_id>analog_random_source_x_1</source_block_id> + <sink_block_id>trellis_encoder_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> + <source_block_id>analog_random_source_x_1</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0_0_0_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>qtgui_number_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_2_0</source_block_id> - <sink_block_id>trellis_encoder_xx_2_0</sink_block_id> + <source_block_id>blks2_error_rate_0_0</source_block_id> + <sink_block_id>qtgui_number_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_1_2</source_block_id> - <sink_block_id>blocks_sub_xx_2_0</sink_block_id> + <source_block_id>blks2_error_rate_0_0_0</source_block_id> + <sink_block_id>qtgui_number_sink_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id> + <source_block_id>blks2_error_rate_0_0_0_0</source_block_id> + <sink_block_id>qtgui_number_sink_0_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_encoder_xx_2_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id> + <source_block_id>blocks_add_xx_0</source_block_id> + <sink_block_id>qtgui_const_sink_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id> - <sink_block_id>blocks_sub_xx_2_0</sink_block_id> + <source_block_id>blocks_add_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_2_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_0</source_block_id> + <sink_block_id>blocks_add_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> - <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_1</source_block_id> + <sink_block_id>blocks_add_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_4</source_block_id> - <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_2</source_block_id> + <sink_block_id>blocks_sub_xx_2</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0_0_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id> + <sink_block_id>blocks_sub_xx_2_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_2</source_block_id> - <sink_block_id>trellis_encoder_xx_2</sink_block_id> + <source_block_id>blocks_sub_xx_2</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_1_1</source_block_id> - <sink_block_id>blocks_sub_xx_2</sink_block_id> + <source_block_id>blocks_sub_xx_2_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_encoder_xx_2</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_2</source_block_id> - <sink_block_id>blocks_sub_xx_2</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_2</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0_0</source_block_id> - <sink_block_id>wxgui_numbersink2_2</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_3</source_block_id> - <sink_block_id>blks2_error_rate_0_0</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> - <sink_block_id>blks2_error_rate_0_0</sink_block_id> + <source_block_id>trellis_encoder_xx_1</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> - <sink_block_id>virtual_sink_0_2_0</sink_block_id> + <source_block_id>trellis_encoder_xx_2</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_1_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id> + <source_block_id>trellis_encoder_xx_2_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0</source_block_id> - <sink_block_id>wxgui_numbersink2_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> @@ -2511,86 +3787,74 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_1</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_1</source_block_id> - <sink_block_id>virtual_sink_0_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> + <sink_block_id>virtual_sink_0_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_encoder_xx_1</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id> + <source_block_id>virtual_source_0_1</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> + <source_block_id>virtual_source_0_1_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>virtual_source_0_1_1</source_block_id> + <sink_block_id>blocks_sub_xx_2</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_throttle_0</sink_block_id> + <source_block_id>virtual_source_0_1_2</source_block_id> + <sink_block_id>blocks_sub_xx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>trellis_encoder_xx_0</sink_block_id> + <source_block_id>virtual_source_0_2</source_block_id> + <sink_block_id>trellis_encoder_xx_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_1</source_block_id> - <sink_block_id>trellis_encoder_xx_1</sink_block_id> + <source_block_id>virtual_source_0_2_0</source_block_id> + <sink_block_id>trellis_encoder_xx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_multiply_const_vxx_1</source_block_id> - <sink_block_id>blocks_add_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_add_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_3</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_0</source_block_id> - <sink_block_id>blocks_add_xx_0</sink_block_id> + <source_block_id>virtual_source_0_4</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc index e10c70a614..d61d02f120 100644 --- a/gr-trellis/examples/grc/pccc.grc +++ b/gr-trellis/examples/grc/pccc.grc @@ -1,547 +1,626 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.6'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Fri Sep 26 12:26:16 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>pccc</value> + <key>author</key> + <value>AA</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>2048, 2048</value> </param> <param> - <key>title</key> - <value>Parallel Concatenated Convolutional Code</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> - <value>AA</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>gnuradio flow graph</value> </param> <param> - <key>window_size</key> - <value>2048, 2048</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(0, 4)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>pccc</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>alias</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(10, 10)</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <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>Parallel Concatenated Convolutional Code</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>prefix</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> + <key>_coordinate</key> + <value>(728, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 21)</value> + <key>id</key> + <value>Es</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value> </param> </block> <block> - <key>variable</key> + <key>variable_qtgui_range</key> <param> - <key>id</key> - <value>R</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>100e3</value> + <key>_coordinate</key> + <value>(864, 140)</value> </param> <param> - <key>alias</key> + <key>gui_hint</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(200, 101)</value> - </param> - <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>EsN0_dB</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>value</key> - <value>1000</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>alias</key> - <value></value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>_coordinate</key> - <value>(200, 37)</value> + <key>start</key> + <value>-10</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>20</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>dim</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>mod[0]</value> + <key>_coordinate</key> + <value>(184, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(688, 317)</value> + <key>id</key> + <value>R</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>100e3</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>constellation</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>mod[1]</value> + <key>_coordinate</key> + <value>(184, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(528, 317)</value> + <key>id</key> + <value>block</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>1000</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>dim</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> - <value>False</value> + <value>True</value> </param> <param> - <key>value</key> - <value>2</value> + <key>_coordinate</key> + <value>(488, 132)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(688, 189)</value> + <key>id</key> + <value>constellation</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>mod[1]</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>constellation</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>False</value> </param> <param> - <key>value</key> - <value>-3,-3,-1,-3,1,-3,3,-3, -3,-1,-1,-1,1,-1,3,-1, -3,1,-1,1,1,1,3,1, -3,3,-1,3,1,3,3,3 </value> + <key>_coordinate</key> + <value>(488, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(528, 189)</value> + <key>id</key> + <value>constellation</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>-3,-3,-1,-3,1,-3,3,-3, -3,-1,-1,-1,1,-1,3,-1, -3,1,-1,1,1,1,3,1, -3,3,-1,3,1,3,3,3 </value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>Es</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value> + <key>_coordinate</key> + <value>(648, 132)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(776, 141)</value> + <key>id</key> + <value>dim</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>mod[0]</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>noisevar</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> - <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <key>_coordinate</key> + <value>(648, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(1032, 149)</value> + <key>id</key> + <value>dim</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>2</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>interleaver</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>trellis.interleaver(block,666)</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> <key>_coordinate</key> - <value>(320, 213)</value> + <value>(288, 68)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> <value>fsm1</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>value</key> <value>trellis.fsm(prefix+"awgn1o2_4rsc.fsm")</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>(320, 85)</value> + <value>(288, 132)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> <value>fsm2</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>value</key> <value>trellis.fsm(prefix+"awgn1o1_4rsc.fsm")</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>(320, 149)</value> + <value>(288, 196)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>interleaver</value> + </param> + <param> + <key>value</key> + <value>trellis.interleaver(block,666)</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>mod</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(480, 68)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>mod</value> + </param> + <param> <key>value</key> <value>fu.psk2x3</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>(576, 253)</value> + <value>(648, 68)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_0</value> + <value>noisevar</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>stream_id</key> - <value>info</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(104, 1220)</value> + <value>(288, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>prefix</value> + </param> + <param> + <key>value</key> + <value>"@FSM_FILE_INSTALL_DIR@"</value> + </param> </block> <block> - <key>virtual_source</key> + <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>virtual_source_0_0_0</value> + <key>amp</key> + <value>noisevar**0.5</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <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>(88, 1292)</value> + <value>(648, 412)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>wxgui_numbersink2_3_0_0</value> + <value>analog_noise_source_x_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>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> <key>type</key> <value>float</value> </param> <param> - <key>title</key> - <value>BER</value> + <key>seed</key> + <value>-42</value> </param> + </block> + <block> + <key>analog_random_source_x</key> <param> - <key>units</key> - <value>BER</value> + <key>alias</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(0, 316)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>id</key> + <value>analog_random_source_x_0_0</value> </param> <param> - <key>ref_level</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>max</key> + <value>2</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>average</key> - <value>False</value> + <key>min</key> + <value>0</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>num_samps</key> + <value>block</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>win_size</key> - <value></value> + <key>repeat</key> + <value>True</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>grid_pos</key> - <value></value> + <key>bits_per_symbol</key> + <value>1</value> </param> <param> - <key>notebook</key> + <key>alias</key> <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -549,23 +628,28 @@ <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(680, 1205)</value> + <value>(256, 704)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> <key>id</key> <value>blks2_error_rate_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>type</key> @@ -575,132 +659,121 @@ <key>win_size</key> <value>block*100</value> </param> - <param> - <key>bits_per_symbol</key> - <value>1</value> - </param> + </block> + <block> + <key>blocks_add_xx</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(304, 1256)</value> + <value>(864, 344)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>estimate</value> + <value>blocks_add_xx_1</value> </param> <param> - <key>_coordinate</key> - <value>(768, 940)</value> + <key>type</key> + <value>float</value> </param> <param> - <key>_rotation</key> + <key>maxoutbuf</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_throttle</key> <param> - <key>_coordinate</key> - <value>(104, 940)</value> + <key>alias</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>comment</key> + <value></value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>info</value> - </param> - <param> <key>_coordinate</key> - <value>(224, 412)</value> + <value>(200, 340)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_throttle</key> <param> <key>id</key> <value>blocks_throttle_0_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>samples_per_second</key> <value>R</value> </param> <param> + <key>type</key> + <value>byte</value> + </param> + <param> <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_xx</key> <param> - <key>ignoretag</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -708,524 +781,667 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>dimension</key> + <value>dim</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(208, 492)</value> + <value>(624, 332)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>digital_chunks_to_symbols_xx_0</value> + </param> + <param> + <key>in_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_ports</key> + <value>1</value> + </param> + <param> + <key>out_type</key> + <value>float</value> + </param> + <param> + <key>symbol_table</key> + <value>constellation</value> + </param> </block> <block> - <key>analog_noise_source_x</key> + <key>import</key> <param> - <key>id</key> - <value>analog_noise_source_x_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>_coordinate</key> + <value>(0, 124)</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>id</key> + <value>import_0_0</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> + </param> + </block> + <block> + <key>qtgui_number_sink</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>avg</key> + <value>0</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(656, 646)</value> + <value>(608, 692)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_add_xx</key> <param> - <key>id</key> - <value>blocks_add_xx_1</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0</value> </param> <param> <key>type</key> <value>float</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>vlen</key> + <key>factor1</key> <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>label1</key> + <value>BER</value> </param> <param> - <key>affinity</key> + <key>unit1</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor10</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(880, 552)</value> + <key>label10</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit10</key> + <value></value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>label2</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(896, 676)</value> + <key>unit2</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color3</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>import</key> <param> - <key>id</key> - <value>import_0_0</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label3</key> + <value></value> </param> <param> - <key>import</key> - <value>import gnuradio.trellis.fsm_utils as fu</value> + <key>unit3</key> + <value></value> </param> <param> - <key>alias</key> + <key>color4</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor4</key> + <value>1</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(48, 132)</value> + <key>unit4</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color5</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>trellis_pccc_encoder_xx</key> <param> - <key>id</key> - <value>trellis_pccc_encoder_xx_0</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label5</key> + <value></value> </param> <param> - <key>type</key> - <value>bb</value> + <key>unit5</key> + <value></value> </param> <param> - <key>o_fsm_args</key> - <value>fsm1</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>o_init_state</key> - <value>0</value> + <key>factor6</key> + <value>1</value> </param> <param> - <key>i_fsm_args</key> - <value>fsm2</value> + <key>label6</key> + <value></value> </param> <param> - <key>i_init_state</key> - <value>0</value> + <key>unit6</key> + <value></value> </param> <param> - <key>interleaver_args</key> - <value>interleaver</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>bl</key> - <value>block</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>alias</key> + <key>label7</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit7</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(400, 457)</value> + <key>label8</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit8</key> + <value></value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <key>color9</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor9</key> + <value>1</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>label9</key> + <value></value> </param> <param> - <key>out_type</key> - <value>float</value> + <key>unit9</key> + <value></value> </param> <param> - <key>symbol_table</key> - <value>constellation</value> + <key>max</key> + <value>1</value> </param> <param> - <key>dimension</key> - <value>dim</value> + <key>min</key> + <value>0</value> </param> <param> - <key>num_ports</key> + <key>name</key> + <value>"BER"</value> + </param> + <param> + <key>nconnections</key> <value>1</value> </param> <param> + <key>update_time</key> + <value>0.10</value> + </param> + </block> + <block> + <key>trellis_pccc_decoder_combined_xx</key> + <param> <key>alias</key> <value></value> </param> <param> + <key>block_size</key> + <value>block</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>table</key> + <value>constellation</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>dim</key> + <value>dim</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>o_fsm_args</key> + <value>fsm1</value> + </param> + <param> + <key>i_fsm_args</key> + <value>fsm2</value> + </param> + <param> + <key>o_final_state</key> + <value>-1</value> + </param> + <param> + <key>i_final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(632, 485)</value> + <value>(312, 448)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>analog_random_source_x</key> <param> <key>id</key> - <value>analog_random_source_x_0_0</value> + <value>trellis_pccc_decoder_combined_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>o_init_state</key> + <value>0</value> + </param> + <param> + <key>i_init_state</key> + <value>0</value> </param> <param> <key>type</key> - <value>byte</value> + <value>f</value> </param> <param> - <key>min</key> + <key>interleaver</key> + <value>interleaver</value> + </param> + <param> + <key>iterations</key> + <value>10</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>max</key> - <value>2</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>num_samps</key> - <value>block</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>out_type</key> + <value>b</value> + </param> + <param> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> + </param> + <param> + <key>scaling</key> + <value>0.5/noisevar</value> </param> + </block> + <block> + <key>trellis_pccc_encoder_xx</key> <param> <key>alias</key> <value></value> </param> <param> + <key>bl</key> + <value>block</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>o_fsm_args</key> + <value>fsm1</value> + </param> + <param> + <key>i_fsm_args</key> + <value>fsm2</value> </param> <param> <key>_coordinate</key> - <value>(8, 471)</value> + <value>(392, 300)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable_slider</key> <param> <key>id</key> - <value>EsN0_dB</value> + <value>trellis_pccc_encoder_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>o_init_state</key> + <value>0</value> </param> <param> - <key>label</key> - <value>EsN0 (dB)</value> + <key>i_init_state</key> + <value>0</value> </param> <param> - <key>value</key> - <value>2</value> + <key>interleaver_args</key> + <value>interleaver</value> </param> <param> - <key>min</key> - <value>-10</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>max</key> - <value>20</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>type</key> + <value>bb</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>comment</key> + <value></value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>_coordinate</key> + <value>(968, 356)</value> </param> <param> - <key>notebook</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>alias</key> + <key>id</key> + <value>virtual_sink_0</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(896, 129)</value> + <value>(200, 404)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_sink_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> </block> <block> - <key>trellis_pccc_decoder_combined_xx</key> + <key>virtual_sink</key> <param> - <key>id</key> - <value>trellis_pccc_decoder_combined_xx_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>f</value> + <key>_coordinate</key> + <value>(680, 548)</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>o_fsm_args</key> - <value>fsm1</value> + <key>id</key> + <value>virtual_sink_0_1</value> </param> <param> - <key>o_init_state</key> - <value>0</value> + <key>stream_id</key> + <value>estimate</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>o_final_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>i_fsm_args</key> - <value>fsm2</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>i_init_state</key> - <value>0</value> + <key>_coordinate</key> + <value>(16, 548)</value> </param> <param> - <key>i_final_state</key> - <value>-1</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>interleaver</key> - <value>interleaver</value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>iterations</key> - <value>10</value> + <key>comment</key> + <value></value> </param> <param> - <key>dim</key> - <value>dim</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>table</key> - <value>constellation</value> + <key>_coordinate</key> + <value>(56, 676)</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> + <key>id</key> + <value>virtual_source_0_0</value> </param> <param> - <key>scaling</key> - <value>0.5/noisevar</value> + <key>stream_id</key> + <value>info</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_coordinate</key> + <value>(56, 732)</value> </param> <param> - <key>maxoutbuf</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(400, 849)</value> + <key>id</key> + <value>virtual_source_0_0_0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>stream_id</key> + <value>estimate</value> </param> </block> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> + <source_block_id>analog_random_source_x_0_0</source_block_id> + <sink_block_id>blocks_throttle_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>analog_random_source_x_0_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>qtgui_number_sink_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> <source_block_id>blocks_add_xx_1</source_block_id> @@ -1234,44 +1450,44 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id> - <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_block_id>blocks_throttle_0_0</source_block_id> + <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_pccc_encoder_xx_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0_0</source_block_id> - <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id> + <source_block_id>trellis_pccc_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0_0</source_block_id> - <sink_block_id>blocks_throttle_0_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0_0</source_block_id> - <sink_block_id>virtual_sink_0_0</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc index f31f3ce86d..ea53711a42 100644 --- a/gr-trellis/examples/grc/sccc.grc +++ b/gr-trellis/examples/grc/sccc.grc @@ -1,433 +1,533 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.6'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>sccc</value> + <key>author</key> + <value>AA</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>2048, 2048</value> </param> <param> - <key>title</key> - <value>Serially Concatenated Convolutional Code</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> - <value>AA</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>gnuradio flow graph</value> </param> <param> - <key>window_size</key> - <value>2048, 2048</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(0, 4)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>sccc</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>alias</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(10, 10)</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <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>Serially Concatenated Convolutional Code</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>prefix</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> + <key>_coordinate</key> + <value>(560, 132)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(344, 13)</value> + <key>id</key> + <value>Es</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value> </param> </block> <block> - <key>variable</key> + <key>variable_qtgui_range</key> <param> - <key>id</key> - <value>mod</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>fu.psk2x3</value> + <key>_coordinate</key> + <value>(640, 76)</value> </param> <param> - <key>alias</key> + <key>gui_hint</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(632, 101)</value> - </param> - <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>interleaver</value> + <value>EsN0_dB</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>value</key> - <value>trellis.interleaver(block,666)</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>alias</key> - <value></value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>_coordinate</key> - <value>(344, 205)</value> + <key>start</key> + <value>-10</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>20</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>Es</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value> + <key>_coordinate</key> + <value>(176, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(800, 133)</value> + <key>id</key> + <value>R</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>100e3</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>noisevar</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> <key>_coordinate</key> - <value>(1056, 141)</value> + <value>(176, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> <value>block</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>value</key> <value>1000</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>(224, 29)</value> + <value>(488, 68)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>constellation</value> + </param> + <param> + <key>value</key> + <value>mod[1]</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm_o</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> + <key>_coordinate</key> + <value>(488, 132)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(344, 77)</value> + <key>id</key> + <value>dim</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>mod[0]</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm_i</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(272, 132)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fsm_i</value> + </param> + <param> <key>value</key> <value>trellis.fsm(prefix+"/awgn2o3_4.fsm")</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>(344, 141)</value> + <value>(272, 68)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>fsm_o</value> + </param> + <param> + <key>value</key> + <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>constellation</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>mod[1]</value> + <key>_coordinate</key> + <value>(272, 196)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(568, 173)</value> + <key>id</key> + <value>interleaver</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>trellis.interleaver(block,666)</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>dim</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>mod[0]</value> + <key>_coordinate</key> + <value>(488, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(720, 173)</value> + <key>id</key> + <value>mod</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>fu.psk2x3</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(640, 4)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>noisevar</value> + </param> + <param> <key>value</key> - <value>100e3</value> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> <key>_coordinate</key> - <value>(224, 93)</value> + <value>(272, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0</value> + <value>prefix</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> + </block> + <block> + <key>analog_noise_source_x</key> <param> - <key>import</key> - <value>import numpy</value> + <key>amp</key> + <value>noisevar**0.5</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>_coordinate</key> - <value>(32, 148)</value> + <value>(680, 380)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0_0</value> + <value>analog_noise_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(192, 332)</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>type</key> + <value>float</value> + </param> + <param> + <key>seed</key> + <value>-42</value> </param> </block> <block> <key>analog_random_source_x</key> <param> - <key>id</key> - <value>analog_random_source_x_0</value> + <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>type</key> - <value>byte</value> + <key>_coordinate</key> + <value>(8, 292)</value> </param> <param> - <key>min</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>analog_random_source_x_0</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> @@ -435,598 +535,650 @@ <value>2</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> <key>num_samps</key> <value>1007</value> </param> <param> + <key>type</key> + <value>byte</value> + </param> + <param> <key>repeat</key> <value>True</value> </param> + </block> + <block> + <key>blks2_error_rate</key> + <param> + <key>bits_per_symbol</key> + <value>1</value> + </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(5, 384)</value> + <value>(608, 536)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_throttle</key> <param> <key>id</key> - <value>blocks_throttle_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blks2_error_rate_0</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>'SER'</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>win_size</key> + <value>block*100</value> </param> + </block> + <block> + <key>blocks_add_xx</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(232, 404)</value> + <value>(920, 320)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blocks_add_xx_1</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>type</key> + <value>float</value> </param> <param> - <key>out_type</key> - <value>float</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>symbol_table</key> - <value>constellation</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>dimension</key> - <value>dim</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>num_ports</key> + <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>blocks_throttle</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(672, 397)</value> + <value>(224, 316)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_add_xx</key> <param> <key>id</key> - <value>blocks_add_xx_1</value> + <value>blocks_throttle_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>samples_per_second</key> + <value>R</value> + </param> + <param> + <key>type</key> + <value>byte</value> </param> <param> <key>vlen</key> <value>1</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_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>minoutbuf</key> - <value>0</value> + <key>dimension</key> + <value>dim</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(960, 472)</value> + <value>(648, 308)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> <key>id</key> - <value>blks2_error_rate_0</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>type</key> - <value>'SER'</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> + <key>num_ports</key> <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>out_type</key> + <value>float</value> </param> <param> - <key>affinity</key> + <key>symbol_table</key> + <value>constellation</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(312, 1168)</value> + <value>(0, 116)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>import</key> + <value>import numpy</value> + </param> </block> <block> - <key>virtual_source</key> + <key>import</key> <param> - <key>id</key> - <value>virtual_source_0_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(96, 1204)</value> + <value>(0, 164)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>import_0_0</value> + </param> + <param> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> + </param> </block> <block> - <key>virtual_source</key> + <key>qtgui_number_sink</key> <param> - <key>id</key> - <value>virtual_source_0_0</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>avg</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <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>(112, 1132)</value> + <value>(824, 524)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> - <key>id</key> - <value>wxgui_numbersink2_3_0_0</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0</value> </param> <param> <key>type</key> <value>float</value> </param> <param> - <key>title</key> - <value>BER</value> + <key>color1</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor1</key> + <value>1</value> </param> <param> - <key>units</key> + <key>label1</key> <value>BER</value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>unit1</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>factor10</key> + <value>1</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>label10</key> + <value></value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>unit10</key> + <value></value> </param> <param> - <key>ref_level</key> - <value>0</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>label2</key> + <value></value> </param> <param> - <key>average</key> - <value>False</value> + <key>unit2</key> + <value></value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>win_size</key> + <key>label3</key> <value></value> </param> <param> - <key>grid_pos</key> + <key>unit3</key> <value></value> </param> <param> - <key>notebook</key> - <value></value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>alias</key> + <key>factor4</key> + <value>1</value> + </param> + <param> + <key>label4</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit4</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(688, 1117)</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor5</key> + <value>1</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0</value> + <key>label5</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit5</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>_coordinate</key> - <value>(88, 836)</value> + <key>factor6</key> + <value>1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>label6</key> + <value></value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0_1</value> + <key>unit6</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(744, 836)</value> + <key>label7</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit7</key> + <value></value> </param> - </block> - <block> - <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>analog_noise_source_x_0</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>type</key> - <value>float</value> + <key>label8</key> + <value></value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>unit8</key> + <value></value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>color9</key> + <value>("black", "black")</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>factor9</key> + <value>1</value> </param> <param> - <key>alias</key> + <key>label9</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit9</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>max</key> + <value>1</value> </param> <param> - <key>maxoutbuf</key> + <key>min</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(608, 510)</value> + <key>name</key> + <value>"BER"</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> </param> </block> <block> - <key>virtual_sink</key> + <key>trellis_sccc_decoder_combined_xx</key> <param> - <key>id</key> - <value>virtual_sink_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>comment</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(1064, 484)</value> + <key>table</key> + <value>constellation</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> - </block> - <block> - <key>variable_slider</key> <param> - <key>id</key> - <value>EsN0_dB</value> + <key>dim</key> + <value>dim</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>EsN0 (dB)</value> - </param> - <param> - <key>value</key> - <value>2</value> - </param> - <param> - <key>min</key> - <value>-10</value> + <key>_coordinate</key> + <value>(248, 464)</value> </param> <param> - <key>max</key> - <value>10</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>id</key> + <value>trellis_sccc_decoder_combined_xx_0</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>i_fsm_args</key> + <value>fsm_i</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>i_final_state</key> + <value>-1</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>i_init_state</key> + <value>0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>type</key> + <value>f</value> </param> <param> - <key>alias</key> - <value></value> + <key>interleaver</key> + <value>interleaver</value> </param> <param> - <key>_coordinate</key> - <value>(920, 113)</value> + <key>iterations</key> + <value>5</value> </param> <param> - <key>_rotation</key> + <key>maxoutbuf</key> <value>0</value> </param> - </block> - <block> - <key>trellis_sccc_encoder_xx</key> <param> - <key>id</key> - <value>trellis_sccc_encoder_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>type</key> - <value>bb</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>o_fsm_args</key> <value>fsm_o</value> </param> <param> + <key>o_final_state</key> + <value>-1</value> + </param> + <param> <key>o_init_state</key> <value>0</value> </param> <param> - <key>i_fsm_args</key> - <value>fsm_i</value> + <key>out_type</key> + <value>b</value> </param> <param> - <key>i_init_state</key> - <value>0</value> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> </param> <param> - <key>interleaver_args</key> - <value>interleaver</value> + <key>scaling</key> + <value>1.0/noisevar</value> + </param> + </block> + <block> + <key>trellis_sccc_encoder_xx</key> + <param> + <key>alias</key> + <value></value> </param> <param> <key>bl</key> <value>block</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -1034,146 +1186,160 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(416, 369)</value> + <value>(416, 276)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0_0</value> + <value>trellis_sccc_encoder_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>i_fsm_args</key> + <value>fsm_i</value> </param> <param> - <key>import</key> - <value>import gnuradio.trellis.fsm_utils as fu</value> + <key>i_init_state</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>interleaver_args</key> + <value>interleaver</value> </param> <param> - <key>_coordinate</key> - <value>(40, 204)</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>minoutbuf</key> <value>0</value> </param> + <param> + <key>o_fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>o_init_state</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>bb</value> + </param> </block> <block> - <key>trellis_sccc_decoder_combined_xx</key> + <key>virtual_sink</key> <param> - <key>id</key> - <value>trellis_sccc_decoder_combined_xx_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>f</value> + <key>_coordinate</key> + <value>(1024, 332)</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>o_fsm_args</key> - <value>fsm_o</value> + <key>id</key> + <value>virtual_sink_0</value> </param> <param> - <key>o_init_state</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>o_final_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>i_fsm_args</key> - <value>fsm_i</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>i_init_state</key> - <value>0</value> + <key>_coordinate</key> + <value>(232, 412)</value> </param> <param> - <key>i_final_state</key> - <value>-1</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>interleaver</key> - <value>interleaver</value> + <key>id</key> + <value>virtual_sink_0_0</value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>stream_id</key> + <value>info</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>iterations</key> - <value>5</value> + <key>comment</key> + <value></value> </param> <param> - <key>dim</key> - <value>dim</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>table</key> - <value>constellation</value> + <key>_coordinate</key> + <value>(0, 564)</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>scaling</key> - <value>1.0/noisevar</value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_coordinate</key> + <value>(336, 412)</value> </param> <param> - <key>maxoutbuf</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(400, 745)</value> + <key>id</key> + <value>virtual_source_0_0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>stream_id</key> + <value>info</value> </param> </block> <connection> @@ -1183,8 +1349,8 @@ <sink_key>1</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -1195,56 +1361,50 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>qtgui_number_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_sccc_encoder_xx_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0</source_block_id> + <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blks2_error_rate_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> + <source_block_id>trellis_sccc_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> - <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-trellis/examples/grc/tcm.grc b/gr-trellis/examples/grc/tcm.grc index 451d940962..9e2b57c8ff 100644 --- a/gr-trellis/examples/grc/tcm.grc +++ b/gr-trellis/examples/grc/tcm.grc @@ -1,384 +1,510 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.6'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>tcm</value> + <key>author</key> + <value>AA</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>2048, 2048</value> </param> <param> - <key>title</key> - <value>Trellis Coded Modulation</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> - <value>AA</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>gnuradio flow graph</value> </param> <param> - <key>window_size</key> - <value>2048, 2048</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(0, 4)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>tcm</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>alias</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(10, 10)</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <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>Trellis Coded Modulation</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>prefix</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(472, 4)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>Es</value> + </param> + <param> <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> + <value>sum(numpy.square(numpy.abs(constellation)))/(len(constellation)/(1.0*dim))</value> </param> + </block> + <block> + <key>variable_qtgui_range</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>value</key> + <value>2</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> <key>_coordinate</key> - <value>(320, 13)</value> + <value>(552, 4)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>dim</value> + <value>EsN0_dB</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>value</key> - <value>mod[0]</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>alias</key> - <value></value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>_coordinate</key> - <value>(464, 229)</value> + <key>start</key> + <value>-10</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>20</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>constellation</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>mod[1]</value> + <key>_coordinate</key> + <value>(176, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(312, 229)</value> + <key>id</key> + <value>R</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>100e3</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>mod</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>fu.psk4</value> + <key>_coordinate</key> + <value>(176, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(336, 157)</value> + <key>id</key> + <value>block</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>500*16</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>"awgn1o2_4.fsm"</value> + <key>_coordinate</key> + <value>(272, 196)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 77)</value> + <key>id</key> + <value>constellation</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>mod[1]</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>100e3</value> + <key>_coordinate</key> + <value>(472, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(216, 109)</value> + <key>id</key> + <value>dim</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>mod[0]</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>noisevar</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(272, 68)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>fsm</value> + </param> + <param> <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <value>"awgn1o2_4.fsm"</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>(728, 157)</value> + <value>(272, 132)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>mod</value> + </param> + <param> + <key>value</key> + <value>fu.psk4</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>Es</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(432, 132)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>noisevar</value> + </param> + <param> <key>value</key> - <value>sum(numpy.square(numpy.abs(constellation)))/(len(constellation)/(1.0*dim))</value> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> <key>_coordinate</key> - <value>(528, 157)</value> + <value>(272, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>prefix</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> + </block> + <block> + <key>analog_noise_source_x</key> <param> - <key>value</key> - <value>500*16</value> + <key>amp</key> + <value>noisevar**0.5</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>_coordinate</key> - <value>(216, 29)</value> + <value>(664, 356)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_throttle</key> <param> <key>id</key> - <value>blocks_throttle_0</value> + <value>analog_noise_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>float</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>seed</key> + <value>-42</value> </param> + </block> + <block> + <key>analog_random_source_x</key> <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> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(0, 276)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> + <key>id</key> + <value>analog_random_source_x_0</value> + </param> + <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(208, 380)</value> + <key>max</key> + <value>2</value> </param> <param> - <key>_rotation</key> + <key>minoutbuf</key> <value>0</value> </param> - </block> - <block> - <key>blocks_add_xx</key> <param> - <key>id</key> - <value>blocks_add_xx_1</value> + <key>min</key> + <value>0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>num_samps</key> + <value>1007</value> </param> <param> <key>type</key> - <value>float</value> + <value>byte</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>repeat</key> + <value>True</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>vlen</key> + <key>bits_per_symbol</key> <value>1</value> </param> <param> @@ -386,841 +512,893 @@ <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(912, 488)</value> + <value>(688, 504)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0_0</value> + <value>blks2_error_rate_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(224, 316)</value> + <key>type</key> + <value>'SER'</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>win_size</key> + <value>block*100</value> </param> </block> <block> - <key>virtual_sink</key> + <key>blocks_add_xx</key> <param> - <key>id</key> - <value>virtual_sink_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(832, 620)</value> + <value>(888, 304)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0</value> + <value>blocks_add_xx_1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>float</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(64, 732)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>num_inputs</key> + <value>2</value> + </param> + <param> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>virtual_sink</key> + <key>blocks_throttle</key> <param> - <key>id</key> - <value>virtual_sink_0_1</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(800, 732)</value> + <value>(208, 300)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>analog_noise_source_x</key> <param> <key>id</key> - <value>analog_noise_source_x_0</value> + <value>blocks_throttle_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>samples_per_second</key> + <value>R</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>type</key> + <value>byte</value> </param> <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>digital_chunks_to_symbols_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>minoutbuf</key> - <value>0</value> + <key>dimension</key> + <value>dim</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(384, 502)</value> + <value>(632, 292)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable_slider</key> <param> <key>id</key> - <value>EsN0_dB</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>label</key> - <value>Es/N0 (dB)</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> - <key>value</key> - <value>4.0</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>min</key> - <value>-10</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>max</key> - <value>30</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>num_ports</key> + <value>1</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>out_type</key> + <value>float</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>symbol_table</key> + <value>constellation</value> </param> + </block> + <block> + <key>import</key> <param> - <key>grid_pos</key> + <key>alias</key> <value></value> </param> <param> - <key>notebook</key> + <key>comment</key> <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(608, 105)</value> + <value>(0, 116)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>import</key> + <value>import numpy</value> + </param> </block> <block> - <key>analog_random_source_x</key> + <key>import</key> <param> - <key>id</key> - <value>analog_random_source_x_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>_coordinate</key> + <value>(0, 164)</value> </param> <param> - <key>min</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>max</key> - <value>2</value> - </param> - <param> - <key>num_samps</key> - <value>1007</value> + <key>id</key> + <value>import_0_0</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> </param> + </block> + <block> + <key>note</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(8, 359)</value> + <value>(312, 628)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>wxgui_numbersink2_3_0_0</value> + <value>note_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>note</key> + <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> </param> + </block> + <block> + <key>qtgui_number_sink</key> <param> - <key>type</key> - <value>float</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>title</key> - <value>BER</value> + <key>avg</key> + <value>0</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>alias</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>_enabled</key> + <value>1</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(896, 492)</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>gui_hint</key> + <value></value> </param> <param> - <key>ref_level</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>id</key> + <value>qtgui_number_sink_0</value> </param> <param> - <key>average</key> - <value>False</value> + <key>type</key> + <value>float</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>win_size</key> - <value></value> + <key>label1</key> + <value>BER</value> </param> <param> - <key>grid_pos</key> + <key>unit1</key> <value></value> </param> <param> - <key>notebook</key> - <value></value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>alias</key> + <key>factor10</key> + <value>1</value> + </param> + <param> + <key>label10</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit10</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(728, 1133)</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor2</key> + <value>1</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0</value> + <key>label2</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit2</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>_coordinate</key> - <value>(80, 1148)</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>label3</key> + <value></value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0_0</value> + <key>unit3</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>factor4</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(72, 1244)</value> + <key>label4</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit4</key> + <value></value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> - <key>id</key> - <value>blks2_error_rate_0</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>type</key> - <value>'SER'</value> + <key>label5</key> + <value></value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>unit5</key> + <value></value> </param> <param> - <key>bits_per_symbol</key> + <key>color6</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor6</key> <value>1</value> </param> <param> - <key>alias</key> + <key>label6</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(312, 1184)</value> + <key>label7</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit7</key> + <value></value> </param> - </block> - <block> - <key>note</key> <param> - <key>id</key> - <value>note_0</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>note</key> - <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> + <key>label8</key> + <value></value> </param> <param> - <key>alias</key> + <key>unit8</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(712, 868)</value> + <key>color9</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor9</key> + <value>1</value> </param> - </block> - <block> - <key>trellis_metrics_x</key> <param> - <key>id</key> - <value>trellis_metrics_x_0</value> + <key>label9</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>False</value> + <key>unit9</key> + <value></value> </param> <param> - <key>type</key> - <value>f</value> + <key>max</key> + <value>1</value> </param> <param> - <key>card</key> - <value>trellis.fsm(prefix+fsm).O()</value> + <key>min</key> + <value>0</value> </param> <param> - <key>dim</key> - <value>dim</value> + <key>name</key> + <value>"BER"</value> </param> <param> - <key>table</key> - <value>constellation</value> + <key>nconnections</key> + <value>1</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>update_time</key> + <value>0.10</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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fsm_args</key> + <value>prefix+fsm</value> </param> <param> <key>_coordinate</key> - <value>(304, 711)</value> + <value>(392, 292)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_x</key> <param> <key>id</key> - <value>trellis_viterbi_x_0</value> + <value>trellis_encoder_xx_0</value> </param> <param> - <key>_enabled</key> - <value>False</value> + <key>init_state</key> + <value>0</value> </param> <param> - <key>type</key> - <value>b</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>fsm_args</key> - <value>prefix+fsm</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>type</key> + <value>bb</value> </param> + </block> + <block> + <key>trellis_metrics_x</key> <param> - <key>init_state</key> - <value>-1</value> + <key>alias</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>table</key> + <value>constellation</value> </param> <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>dim</key> + <value>dim</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(544, 711)</value> + <value>(200, 684)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_0</value> + <value>trellis_metrics_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>f</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>fsm_args</key> - <value>prefix+fsm</value> + <key>card</key> + <value>trellis.fsm(prefix+fsm).O()</value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>type</key> + <value>f</value> </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> <param> - <key>init_state</key> - <value>-1</value> + <key>alias</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>dim</key> - <value>dim</value> + <key>comment</key> + <value></value> </param> <param> <key>table</key> <value>constellation</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>affinity</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>dim</key> + <value>dim</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>fsm_args</key> + <value>prefix+fsm</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(440, 866)</value> + <value>(248, 484)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0</value> + <value>trellis_viterbi_combined_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> - <key>import</key> - <value>import numpy</value> + <key>type</key> + <value>f</value> </param> <param> - <key>alias</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(16, 140)</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>_rotation</key> + <key>minoutbuf</key> <value>0</value> </param> + <param> + <key>out_type</key> + <value>b</value> + </param> </block> <block> - <key>import</key> + <key>trellis_viterbi_x</key> <param> - <key>id</key> - <value>import_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>import</key> - <value>import gnuradio.trellis.fsm_utils as fu</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> + <key>_enabled</key> + <value>False</value> + </param> + <param> + <key>fsm_args</key> + <value>prefix+fsm</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> + </param> + <param> <key>_coordinate</key> - <value>(24, 196)</value> + <value>(440, 684)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>trellis_viterbi_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>out_type</key> - <value>float</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>symbol_table</key> - <value>constellation</value> + <key>type</key> + <value>b</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>dimension</key> - <value>dim</value> + <key>comment</key> + <value></value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>alias</key> - <value></value> + <key>_coordinate</key> + <value>(992, 316)</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>id</key> + <value>virtual_sink_0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(696, 373)</value> + <value>(224, 428)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_sink_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>trellis_encoder_xx_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>bb</value> - </param> - <param> - <key>fsm_args</key> - <value>prefix+fsm</value> + <key>_coordinate</key> + <value>(0, 532)</value> </param> <param> - <key>init_state</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>blockwise</key> - <value>False</value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>blocklength</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_coordinate</key> + <value>(328, 428)</value> </param> <param> - <key>maxoutbuf</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(424, 373)</value> + <key>id</key> + <value>virtual_source_0_0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>stream_id</key> + <value>info</value> </param> </block> <connection> @@ -1230,26 +1408,20 @@ <sink_key>1</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> <source_block_id>analog_random_source_x_0</source_block_id> <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>trellis_encoder_xx_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0_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>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>qtgui_number_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -1260,57 +1432,57 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_metrics_x_0</sink_block_id> + <source_block_id>blocks_throttle_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>trellis_metrics_x_0</source_block_id> - <sink_block_id>trellis_viterbi_x_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>virtual_sink_0_0</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_x_0</source_block_id> - <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_block_id>trellis_metrics_x_0</source_block_id> + <sink_block_id>trellis_viterbi_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> - <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_block_id>trellis_viterbi_x_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_metrics_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0</source_block_id> + <source_block_id>virtual_source_0_0</source_block_id> <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> </flow_graph> diff --git a/gr-trellis/examples/grc/turbo_equalization.grc b/gr-trellis/examples/grc/turbo_equalization.grc index c83c59db20..5f9f78317a 100644 --- a/gr-trellis/examples/grc/turbo_equalization.grc +++ b/gr-trellis/examples/grc/turbo_equalization.grc @@ -1,675 +1,689 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.6'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>turbo_equalization</value> + <key>author</key> + <value>AA</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>2048, 3048</value> </param> <param> - <key>title</key> - <value>Hard/Soft/Turbo Equalization</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> - <value>AA</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>gnuradio flow graph</value> </param> <param> - <key>window_size</key> - <value>2048, 3048</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(0, 4)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>turbo_equalization</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>alias</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(10, 10)</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>run_options</key> + <value>prompt</value> </param> - </block> - <block> - <key>variable</key> <param> - <key>id</key> - <value>fsm_o</value> + <key>run</key> + <value>True</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>thread_safe_setters</key> + <value></value> </param> <param> - <key>value</key> - <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value> + <key>title</key> + <value>Hard/Soft/Turbo Equalization</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>(344, 21)</value> + <value>(376, 132)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>block_b</value> + <value>Es</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> + </param> + </block> + <block> + <key>variable_qtgui_range</key> + <param> + <key>comment</key> + <value></value> </param> <param> <key>value</key> - <value>bpsym*1000</value> + <value>2</value> </param> <param> - <key>alias</key> - <value></value> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(216, 21)</value> + <value>(656, 68)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>interleaver</value> + <value>EsN0_dB</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>value</key> - <value>trellis.interleaver(block_b/bpsym,666)</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>alias</key> - <value></value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>_coordinate</key> - <value>(528, 117)</value> + <key>start</key> + <value>-10</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>20</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>Es</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> + <key>_coordinate</key> + <value>(176, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(776, 181)</value> + <key>id</key> + <value>R</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>100e3</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>noisevar</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <key>_coordinate</key> + <value>(176, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(1080, 181)</value> + <key>id</key> + <value>block_b</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>bpsym*1000</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>bpsym</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>int(round(math.log(fsm_o.I())/math.log(2)))</value> + <key>_coordinate</key> + <value>(488, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(528, 29)</value> + <key>id</key> + <value>bpsym</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>int(round(math.log(fsm_o.I())/math.log(2)))</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>channel</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>fu.c_channel</value> + <key>_coordinate</key> + <value>(176, 196)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 205)</value> + <key>id</key> + <value>channel</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>fu.c_channel</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>modulation</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>fu.pam4</value> + <key>_coordinate</key> + <value>(304, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 117)</value> + <key>id</key> + <value>fsm_i</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>trellis.fsm(len(modulation[1]),len(channel))</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>100e3</value> + <key>_coordinate</key> + <value>(328, 4)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(216, 109)</value> + <key>id</key> + <value>fsm_o</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>tot_mod</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>fu.make_isi_lookup(modulation,channel,False)</value> + <key>_coordinate</key> + <value>(488, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 381)</value> + <key>id</key> + <value>interleaver</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>trellis.interleaver(block_b/bpsym,666)</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>prefix</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> + <key>_coordinate</key> + <value>(176, 132)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(768, 21)</value> + <key>id</key> + <value>modulation</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>fu.pam4</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm_i</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>trellis.fsm(len(modulation[1]),len(channel))</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> <key>_coordinate</key> - <value>(320, 293)</value> + <value>(376, 196)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0_0</value> + <value>noisevar</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>import</key> - <value>import gnuradio.trellis.fsm_utils as fu</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(24, 252)</value> + <value>(728, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0</value> + <value>prefix</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>value</key> + <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>import</key> - <value>import numpy</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(16, 140)</value> + <value>(488, 132)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>tot_mod</value> </param> <param> - <key>import</key> - <value>import math</value> + <key>value</key> + <value>fu.make_isi_lookup(modulation,channel,False)</value> </param> + </block> + <block> + <key>analog_const_source_x</key> <param> <key>alias</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(24, 188)</value> + <key>comment</key> + <value></value> </param> <param> - <key>_rotation</key> + <key>const</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>observation</value> - </param> - <param> <key>_coordinate</key> - <value>(608, 1076)</value> + <value>(0, 1148)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_add_xx</key> <param> <key>id</key> - <value>blocks_add_xx_1</value> + <value>analog_const_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>float</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>type</key> + <value>float</value> </param> + </block> + <block> + <key>analog_noise_source_x</key> <param> - <key>vlen</key> - <value>1</value> + <key>amp</key> + <value>noisevar**0.5</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(688, 944)</value> + <value>(520, 540)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>analog_noise_source_x</key> <param> <key>id</key> <value>analog_noise_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>float</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>noise_type</key> <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>type</key> + <value>float</value> </param> <param> <key>seed</key> <value>-42</value> </param> + </block> + <block> + <key>analog_random_source_x</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(288, 958)</value> + <value>(0, 300)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>fir_filter_xxx</key> <param> <key>id</key> - <value>fir_filter_xxx_0</value> + <value>analog_random_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>fff</value> + <key>max</key> + <value>2</value> </param> <param> - <key>decim</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>taps</key> - <value>fu.c_channel</value> + <key>min</key> + <value>0</value> </param> <param> - <key>samp_delay</key> - <value>0</value> + <key>num_samps</key> + <value>1007</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + </block> + <block> + <key>blks2_error_rate</key> + <param> + <key>bits_per_symbol</key> + <value>1</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(448, 861)</value> + <value>(904, 892)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blks2_error_rate_0_0</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>out_type</key> - <value>float</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>symbol_table</key> - <value>modulation[1]</value> + <key>type</key> + <value>'BER'</value> </param> <param> - <key>dimension</key> - <value>modulation[0]</value> + <key>win_size</key> + <value>block_b*100</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>num_ports</key> + <key>bits_per_symbol</key> <value>1</value> </param> <param> @@ -677,58 +691,58 @@ <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(480, 733)</value> + <value>(504, 1324)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_permutation</key> <param> <key>id</key> - <value>trellis_permutation_0</value> + <value>blks2_error_rate_0_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>interleaver_size</key> - <value>interleaver.K()</value> + <key>type</key> + <value>'BER'</value> </param> <param> - <key>table</key> - <value>interleaver.INTER()</value> + <key>win_size</key> + <value>block_b*100</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>syms_per_block</key> + <key>bits_per_symbol</key> <value>1</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>alias</key> + <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -736,561 +750,671 @@ <value></value> </param> <param> - <key>minoutbuf</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(584, 1548)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> + <key>id</key> + <value>blks2_error_rate_0_0_0_0</value> + </param> + <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(208, 726)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block_b*100</value> </param> </block> <block> - <key>virtual_sink</key> + <key>blocks_add_xx</key> <param> - <key>id</key> - <value>virtual_sink_0_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>info_i</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(968, 572)</value> + <value>(760, 488)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_throttle</key> <param> <key>id</key> - <value>blocks_throttle_0</value> + <value>blocks_add_xx_1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>float</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_char_to_float</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(256, 580)</value> + <value>(48, 924)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>analog_random_source_x</key> <param> <key>id</key> - <value>analog_random_source_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>byte</value> + <value>blocks_char_to_float_0</value> </param> <param> - <key>min</key> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>max</key> - <value>2</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>num_samps</key> - <value>1007</value> + <key>scale</key> + <value>1</value> </param> <param> - <key>repeat</key> - <value>True</value> + <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>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(16, 559)</value> + <value>(376, 324)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_pack_k_bits_bb</key> <param> <key>id</key> <value>blocks_pack_k_bits_bb_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>k</key> <value>bpsym</value> </param> <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_throttle</key> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(440, 580)</value> + <value>(200, 324)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>trellis_encoder_xx_0</value> + <value>blocks_throttle_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>type</key> - <value>bb</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>fsm_args</key> - <value>fsm_o</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>init_state</key> - <value>0</value> + <key>samples_per_second</key> + <value>R</value> </param> <param> - <key>blockwise</key> - <value>False</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>blocklength</key> - <value>0</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_unpack_k_bits_bb</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(672, 573)</value> + <value>(416, 924)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blocks_unpack_k_bits_bb_0</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>k</key> + <value>bpsym</value> </param> <param> - <key>_coordinate</key> - <value>(248, 524)</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>minoutbuf</key> <value>0</value> </param> </block> <block> - <key>virtual_sink</key> + <key>blocks_unpack_k_bits_bb</key> <param> - <key>id</key> - <value>virtual_sink_0_1</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(864, 1380)</value> + <value>(896, 1164)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_unpack_k_bits_bb</key> <param> <key>id</key> - <value>blocks_unpack_k_bits_bb_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blocks_unpack_k_bits_bb_0_0</value> </param> <param> <key>k</key> <value>bpsym</value> </param> <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_unpack_k_bits_bb</key> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(552, 1380)</value> + <value>(440, 1580)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_char_to_float</key> <param> <key>id</key> - <value>blocks_char_to_float_0</value> + <value>blocks_unpack_k_bits_bb_0_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>k</key> + <value>bpsym</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>scale</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_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>minoutbuf</key> - <value>0</value> + <key>dimension</key> + <value>modulation[0]</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(72, 1380)</value> + <value>(264, 476)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_permutation</key> <param> <key>id</key> - <value>trellis_permutation_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>digital_chunks_to_symbols_xx_0_0</value> </param> <param> - <key>type</key> + <key>in_type</key> <value>byte</value> </param> <param> - <key>interleaver_size</key> - <value>interleaver.K()</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>table</key> - <value>interleaver.DEINTER()</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>syms_per_block</key> + <key>num_ports</key> <value>1</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>out_type</key> + <value>float</value> </param> <param> + <key>symbol_table</key> + <value>modulation[1]</value> + </param> + </block> + <block> + <key>fir_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>minoutbuf</key> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(480, 476)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> + <key>id</key> + <value>fir_filter_xxx_0</value> + </param> + <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(568, 1222)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> + <key>samp_delay</key> <value>0</value> </param> + <param> + <key>taps</key> + <value>fu.c_channel</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> </block> <block> - <key>trellis_viterbi_combined_xx</key> + <key>import</key> <param> - <key>id</key> - <value>trellis_viterbi_combined_xx_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>f</value> + <key>_coordinate</key> + <value>(0, 124)</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>fsm_args</key> - <value>fsm_i</value> + <key>id</key> + <value>import_0</value> </param> <param> - <key>block_size</key> - <value>interleaver.K()</value> + <key>import</key> + <value>import numpy</value> </param> + </block> + <block> + <key>import</key> <param> - <key>init_state</key> - <value>-1</value> + <key>alias</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>dim</key> - <value>tot_mod[0]</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>table</key> - <value>tot_mod[1]</value> + <key>_coordinate</key> + <value>(0, 220)</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>import_0_0</value> </param> <param> - <key>affinity</key> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>alias</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(288, 1194)</value> + <value>(0, 172)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>import_0_1</value> + </param> + <param> + <key>import</key> + <value>import math</value> + </param> </block> <block> - <key>virtual_sink</key> + <key>note</key> <param> - <key>id</key> - <value>virtual_sink_0_1_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate_i</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(896, 1228)</value> + <value>(680, 820)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>note_0</value> + </param> + <param> + <key>note</key> + <value>This is the simplest hard Viterbi equalizer/hard Viterbi decoder</value> + </param> </block> <block> - <key>virtual_source</key> + <key>note</key> <param> - <key>id</key> - <value>virtual_source_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(40, 1236)</value> + <value>(464, 1244)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>note_0_0</value> + </param> + <param> + <key>note</key> + <value>This is a better soft-equalizer/Viterbi decoder</value> + </param> </block> <block> - <key>analog_const_source_x</key> + <key>note</key> <param> - <key>id</key> - <value>analog_const_source_x_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>_coordinate</key> + <value>(432, 1668)</value> </param> <param> - <key>const</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>note_0_1</value> + </param> + <param> + <key>note</key> + <value>This is the full-fledged turbo equalizer/decoder</value> + </param> + </block> + <block> + <key>qtgui_number_sink</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>avg</key> <value>0</value> </param> <param> @@ -1298,1264 +1422,1638 @@ <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(88, 1788)</value> + <value>(1080, 884)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_combined_xx</key> <param> - <key>id</key> - <value>trellis_viterbi_combined_xx_1</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0</value> </param> <param> <key>type</key> - <value>f</value> + <value>float</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>fsm_args</key> - <value>fsm_o</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>block_size</key> - <value>interleaver.K()</value> + <key>label1</key> + <value>BER</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>unit1</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>dim</key> + <key>factor10</key> <value>1</value> </param> <param> - <key>table</key> - <value>0,1,2,3</value> + <key>label10</key> + <value></value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_HARD_SYMBOL</value> + <key>unit10</key> + <value></value> </param> <param> - <key>alias</key> + <key>color2</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor2</key> + <value>1</value> + </param> + <param> + <key>label2</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit2</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(256, 1338)</value> + <key>label3</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit3</key> + <value></value> </param> - </block> - <block> - <key>trellis_siso_combined_f</key> <param> - <key>id</key> - <value>trellis_siso_combined_f_0</value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor4</key> + <value>1</value> </param> <param> - <key>fsm_args</key> - <value>fsm_i</value> + <key>label4</key> + <value></value> </param> <param> - <key>block_size</key> - <value>interleaver.K()</value> + <key>unit4</key> + <value></value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>a_post_in</key> - <value>True</value> + <key>label5</key> + <value></value> </param> <param> - <key>a_post_out</key> - <value>False</value> + <key>unit5</key> + <value></value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>dim</key> - <value>tot_mod[0]</value> + <key>factor6</key> + <value>1</value> </param> <param> - <key>table</key> - <value>tot_mod[1]</value> + <key>label6</key> + <value></value> </param> <param> - <key>metric_type</key> - <value>trellis.TRELLIS_EUCLIDEAN</value> + <key>unit6</key> + <value></value> </param> <param> - <key>alias</key> + <key>color7</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor7</key> + <value>1</value> + </param> + <param> + <key>label7</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit7</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(280, 1765)</value> + <key>label8</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit8</key> + <value></value> </param> - </block> - <block> - <key>trellis_permutation</key> <param> - <key>id</key> - <value>trellis_permutation_0_0_0</value> + <key>color9</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor9</key> + <value>1</value> </param> <param> - <key>type</key> - <value>float</value> + <key>label9</key> + <value></value> </param> <param> - <key>interleaver_size</key> - <value>interleaver.K()</value> + <key>unit9</key> + <value></value> </param> <param> - <key>table</key> - <value>interleaver.DEINTER()</value> + <key>max</key> + <value>1</value> </param> <param> - <key>syms_per_block</key> - <value>fsm_o.O()</value> + <key>min</key> + <value>0</value> </param> <param> - <key>vlen</key> + <key>name</key> + <value>"BER (Hard)"</value> + </param> + <param> + <key>nconnections</key> <value>1</value> </param> <param> + <key>update_time</key> + <value>0.10</value> + </param> + </block> + <block> + <key>qtgui_number_sink</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>avg</key> + <value>0</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(616, 1814)</value> + <value>(688, 1316)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_x</key> <param> - <key>id</key> - <value>trellis_viterbi_x_0</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0_0</value> </param> <param> <key>type</key> - <value>b</value> + <value>float</value> </param> <param> - <key>fsm_args</key> - <value>fsm_o</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>block_size</key> - <value>interleaver.K()</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>init_state</key> - <value>0</value> + <key>label1</key> + <value>BER</value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>unit1</key> + <value></value> </param> <param> - <key>alias</key> + <key>color10</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor10</key> + <value>1</value> + </param> + <param> + <key>label10</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit10</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(288, 2023)</value> + <key>label2</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit2</key> + <value></value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_1</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>label3</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(72, 1860)</value> + <key>unit3</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color4</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_1_0</value> + <key>factor4</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label4</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>unit4</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(88, 2564)</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor5</key> + <value>1</value> </param> - </block> - <block> - <key>blocks_unpack_k_bits_bb</key> <param> - <key>id</key> - <value>blocks_unpack_k_bits_bb_0_0</value> + <key>label5</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit5</key> + <value></value> </param> <param> - <key>k</key> - <value>bpsym</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>alias</key> + <key>factor6</key> + <value>1</value> + </param> + <param> + <key>label6</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit6</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(584, 2044)</value> + <key>label7</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit7</key> + <value></value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0_1_1</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>stream_id</key> - <value>estimate1</value> + <key>label8</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(896, 2044)</value> + <key>unit8</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color9</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0_0_0_0</value> + <key>factor9</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label9</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate1</value> + <key>unit9</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(144, 2284)</value> + <key>max</key> + <value>1</value> </param> <param> - <key>_rotation</key> + <key>min</key> <value>0</value> </param> + <param> + <key>name</key> + <value>"BER (Soft)"</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> </block> <block> - <key>virtual_source</key> + <key>qtgui_number_sink</key> <param> - <key>id</key> - <value>virtual_source_0_0_1_0</value> + <key>autoscale</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>avg</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <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>(152, 2188)</value> + <value>(776, 1540)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> + <param> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> + </param> <param> <key>id</key> - <value>virtual_source_0_0_1_0_0</value> + <value>qtgui_number_sink_0_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>type</key> + <value>float</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>_coordinate</key> - <value>(176, 2732)</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>label1</key> + <value>BER</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0_0_0_0_0</value> + <key>unit1</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>color10</key> + <value>("black", "black")</value> </param> <param> - <key>stream_id</key> - <value>estimate2</value> + <key>factor10</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(168, 2828)</value> + <key>label10</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit10</key> + <value></value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0_1</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>label2</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(80, 1556)</value> + <key>unit2</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>color3</key> + <value>("black", "black")</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0_0_0</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label3</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>unit3</key> + <value></value> </param> <param> - <key>_coordinate</key> - <value>(72, 1652)</value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor4</key> + <value>1</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> - <key>id</key> - <value>wxgui_numbersink2_3_0_0_0</value> + <key>label4</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit4</key> + <value></value> </param> <param> - <key>type</key> - <value>float</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>title</key> - <value>BER_hard</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>label5</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>unit5</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>factor6</key> + <value>1</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>label6</key> + <value></value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>unit6</key> + <value></value> </param> <param> - <key>ref_level</key> - <value>0</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>label7</key> + <value></value> </param> <param> - <key>average</key> - <value>False</value> + <key>unit7</key> + <value></value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>win_size</key> + <key>label8</key> <value></value> </param> <param> - <key>grid_pos</key> + <key>unit8</key> <value></value> </param> <param> - <key>notebook</key> + <key>color9</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor9</key> + <value>1</value> + </param> + <param> + <key>label9</key> <value></value> </param> <param> + <key>unit9</key> + <value></value> + </param> + <param> + <key>max</key> + <value>1</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>"BER (Turbo)"</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>update_time</key> + <value>0.10</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>True</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_o</value> + </param> + <param> <key>_coordinate</key> - <value>(504, 1549)</value> + <value>(504, 316)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>wxgui_numbersink2_3_0_0_0_0</value> + <value>trellis_encoder_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>0</value> </param> <param> - <key>type</key> - <value>float</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>title</key> - <value>BER_soft</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>type</key> + <value>bb</value> </param> + </block> + <block> + <key>trellis_permutation</key> <param> - <key>samp_rate</key> - <value>R</value> + <key>alias</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>_coordinate</key> + <value>(64, 468)</value> </param> <param> - <key>ref_level</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>id</key> + <value>trellis_permutation_0</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>interleaver_size</key> + <value>interleaver.K()</value> </param> <param> - <key>average</key> - <value>False</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>syms_per_block</key> + <value>1</value> </param> <param> - <key>win_size</key> - <value></value> + <key>table</key> + <value>interleaver.INTER()</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>type</key> + <value>byte</value> </param> <param> - <key>notebook</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>trellis_permutation</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>(576, 2181)</value> + <value>(432, 708)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>wxgui_numbersink2_3_0_0_0_0_0</value> + <value>trellis_permutation_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>interleaver_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>syms_per_block</key> + <value>1</value> + </param> + <param> + <key>table</key> + <value>interleaver.DEINTER()</value> </param> <param> <key>type</key> - <value>float</value> + <value>byte</value> </param> <param> - <key>title</key> - <value>BER_turbo</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>trellis_permutation</key> <param> - <key>units</key> - <value>BER</value> + <key>alias</key> + <value></value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(440, 1148)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>id</key> + <value>trellis_permutation_0_0_0</value> </param> <param> - <key>ref_level</key> + <key>interleaver_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>syms_per_block</key> + <value>fsm_o.O()</value> </param> <param> - <key>average</key> - <value>False</value> + <key>table</key> + <value>interleaver.DEINTER()</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>type</key> + <value>float</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>trellis_sccc_decoder_combined_xx</key> <param> - <key>win_size</key> + <key>alias</key> <value></value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>block_size</key> + <value>interleaver.K()</value> </param> <param> - <key>notebook</key> + <key>comment</key> <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>table</key> + <value>tot_mod[1]</value> </param> <param> <key>affinity</key> <value></value> </param> <param> + <key>dim</key> + <value>tot_mod[0]</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(600, 2725)</value> + <value>(200, 1480)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_sccc_decoder_combined_xx</key> <param> <key>id</key> <value>trellis_sccc_decoder_combined_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>i_fsm_args</key> + <value>fsm_i</value> + </param> + <param> + <key>i_final_state</key> + <value>-1</value> + </param> + <param> + <key>i_init_state</key> + <value>-1</value> </param> <param> <key>type</key> <value>f</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>interleaver</key> + <value>interleaver</value> + </param> + <param> + <key>iterations</key> + <value>5</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>o_fsm_args</key> <value>fsm_o</value> </param> <param> - <key>o_init_state</key> + <key>o_final_state</key> <value>-1</value> </param> <param> - <key>o_final_state</key> + <key>o_init_state</key> <value>-1</value> </param> <param> - <key>i_fsm_args</key> - <value>fsm_i</value> + <key>out_type</key> + <value>b</value> </param> <param> - <key>i_init_state</key> - <value>-1</value> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> </param> <param> - <key>i_final_state</key> - <value>-1</value> + <key>scaling</key> + <value>1.0</value> </param> + </block> + <block> + <key>trellis_siso_combined_f</key> <param> - <key>interleaver</key> - <value>interleaver</value> + <key>a_post_in</key> + <value>True</value> + </param> + <param> + <key>a_post_out</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> <key>block_size</key> <value>interleaver.K()</value> </param> <param> - <key>iterations</key> - <value>5</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>table</key> + <value>tot_mod[1]</value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>dim</key> <value>tot_mod[0]</value> </param> <param> - <key>table</key> - <value>tot_mod[1]</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>fsm_args</key> + <value>fsm_i</value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> + <key>final_state</key> + <value>-1</value> </param> <param> - <key>scaling</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(208, 1096)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>trellis_siso_combined_f_0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>maxoutbuf</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(456, 2481)</value> + <key>metric_type</key> + <value>trellis.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>_rotation</key> + <key>minoutbuf</key> <value>0</value> </param> + <param> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> + </param> </block> <block> - <key>blks2_error_rate</key> + <key>trellis_viterbi_combined_xx</key> <param> - <key>id</key> - <value>blks2_error_rate_0_0_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>block_size</key> + <value>interleaver.K()</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>comment</key> + <value></value> </param> <param> - <key>win_size</key> - <value>block_b*100</value> + <key>table</key> + <value>tot_mod[1]</value> </param> <param> - <key>bits_per_symbol</key> - <value>1</value> + <key>affinity</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>dim</key> + <value>tot_mod[0]</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>fsm_args</key> + <value>fsm_i</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(408, 2766)</value> + <value>(200, 676)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> <key>id</key> - <value>blks2_error_rate_0_0_0</value> + <value>trellis_viterbi_combined_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>type</key> - <value>'BER'</value> + <value>f</value> </param> <param> - <key>win_size</key> - <value>block_b*100</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> - <value>1</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>out_type</key> + <value>b</value> + </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> + <param> <key>alias</key> <value></value> </param> <param> + <key>block_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>table</key> + <value>0,1,2,3</value> + </param> + <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>dim</key> + <value>1</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(384, 2230)</value> + <value>(192, 876)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> <key>id</key> - <value>blks2_error_rate_0_0</value> + <value>trellis_viterbi_combined_xx_1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>type</key> - <value>'BER'</value> + <value>f</value> </param> <param> - <key>win_size</key> - <value>block_b*100</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>bits_per_symbol</key> - <value>1</value> + <key>metric_type</key> + <value>digital.TRELLIS_HARD_SYMBOL</value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>out_type</key> + <value>b</value> + </param> + </block> + <block> + <key>trellis_viterbi_x</key> + <param> <key>alias</key> <value></value> </param> <param> + <key>block_size</key> + <value>interleaver.K()</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>fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(312, 1598)</value> + <value>(664, 1140)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable_slider</key> <param> <key>id</key> - <value>EsN0_dB</value> + <value>trellis_viterbi_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>0</value> </param> <param> - <key>label</key> - <value>Es/N0 (dB)</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>value</key> - <value>13.0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>min</key> - <value>-10</value> + <key>type</key> + <value>b</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>max</key> - <value>30</value> + <key>comment</key> + <value></value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>_coordinate</key> + <value>(872, 500)</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>id</key> + <value>virtual_sink_0</value> </param> <param> - <key>notebook</key> - <value></value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(936, 129)</value> + <value>(224, 372)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_sink_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> </block> <block> - <key>blocks_unpack_k_bits_bb</key> + <key>virtual_sink</key> <param> - <key>id</key> - <value>blocks_unpack_k_bits_bb_0_0_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>k</key> - <value>bpsym</value> + <key>_coordinate</key> + <value>(864, 324)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_sink_0_0_0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>info_i</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(720, 2572)</value> + <value>(664, 724)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_sink_0_1_0</value> + </param> + <param> + <key>stream_id</key> + <value>estimate_i</value> + </param> </block> <block> <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0_1_1_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(1040, 1164)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>virtual_sink_0_1_1</value> + </param> + <param> <key>stream_id</key> - <value>estimate2</value> + <value>estimate1</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(920, 2572)</value> + <value>(0, 724)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> </block> <block> - <key>note</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>note_0_1</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>note</key> - <value>This is the full-fledged turbo equalizer/decoder</value> + <key>_coordinate</key> + <value>(304, 1356)</value> </param> <param> - <key>alias</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>virtual_source_0_0_0_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>estimate1</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(1144, 2572)</value> + <value>(736, 660)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_0_1</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> </block> <block> - <key>note</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>note_0_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>note</key> - <value>This is a better soft-equalizer/Viterbi decoder</value> + <key>_coordinate</key> + <value>(344, 1300)</value> </param> <param> - <key>alias</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>virtual_source_0_0_1_0</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(1016, 1908)</value> + <value>(400, 1484)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_0_1_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> </block> <block> - <key>note</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>note_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>note</key> - <value>This is the simplest hard Viterbi equalizer/hard Viterbi decoder</value> + <key>_coordinate</key> + <value>(0, 1204)</value> </param> <param> - <key>alias</key> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>virtual_source_0_1</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>comment</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(1096, 1316)</value> + <value>(0, 1580)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_1_0</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> </block> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>virtual_sink_0_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>analog_const_source_x_0</source_block_id> + <sink_block_id>trellis_siso_combined_f_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2566,116 +3064,116 @@ <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> - <sink_block_id>fir_filter_xxx_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>fir_filter_xxx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>blks2_error_rate_0_0</source_block_id> + <sink_block_id>qtgui_number_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id> + <source_block_id>blks2_error_rate_0_0_0</source_block_id> + <sink_block_id>qtgui_number_sink_0_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>trellis_encoder_xx_0</sink_block_id> + <source_block_id>blks2_error_rate_0_0_0_0</source_block_id> + <sink_block_id>qtgui_number_sink_0_0_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>trellis_permutation_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_permutation_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> + <source_block_id>blocks_char_to_float_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_1</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>virtual_sink_0_0_0</sink_block_id> + <source_block_id>blocks_pack_k_bits_bb_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_char_to_float_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id> + <source_block_id>blocks_throttle_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>trellis_permutation_0_0</source_block_id> - <sink_block_id>blocks_char_to_float_0</sink_block_id> + <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>trellis_permutation_0_0</source_block_id> - <sink_block_id>virtual_sink_0_1_0</sink_block_id> + <source_block_id>blocks_unpack_k_bits_bb_0_0</source_block_id> + <sink_block_id>virtual_sink_0_1_1</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>virtual_sink_0_1</sink_block_id> + <source_block_id>blocks_unpack_k_bits_bb_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> - <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> + <sink_block_id>fir_filter_xxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> - <sink_block_id>trellis_permutation_0_0</sink_block_id> + <source_block_id>fir_filter_xxx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>trellis_permutation_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_0</source_block_id> - <sink_block_id>virtual_sink_0_1_1</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_1</source_block_id> - <sink_block_id>trellis_siso_combined_f_0</sink_block_id> + <source_block_id>trellis_permutation_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_const_source_x_0</source_block_id> - <sink_block_id>trellis_siso_combined_f_0</sink_block_id> + <source_block_id>trellis_permutation_0_0</source_block_id> + <sink_block_id>blocks_char_to_float_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_siso_combined_f_0</source_block_id> - <sink_block_id>trellis_permutation_0_0_0</sink_block_id> + <source_block_id>trellis_permutation_0_0</source_block_id> + <sink_block_id>virtual_sink_0_1_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2686,38 +3184,38 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_x_0</source_block_id> - <sink_block_id>blocks_unpack_k_bits_bb_0_0</sink_block_id> + <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_1_0</source_block_id> - <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> + <source_block_id>trellis_siso_combined_f_0</source_block_id> + <sink_block_id>trellis_permutation_0_0_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_0_0</source_block_id> - <sink_block_id>virtual_sink_0_1_1_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>trellis_permutation_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> - <sink_block_id>blocks_unpack_k_bits_bb_0_0_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_1</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> <connection> - <source_block_id>blks2_error_rate_0_0_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0_0_0</sink_block_id> + <source_block_id>trellis_viterbi_x_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_1_0</source_block_id> - <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -2728,39 +3226,33 @@ <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0_0_0_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0_0_0_0</sink_block_id> + <source_block_id>virtual_source_0_0_1</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_1_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> + <source_block_id>virtual_source_0_0_1_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0_0_0_0</source_block_id> + <source_block_id>virtual_source_0_0_1_0_0</source_block_id> <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blks2_error_rate_0_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0_0</sink_block_id> - <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_1</source_block_id> - <sink_block_id>blks2_error_rate_0_0</sink_block_id> + <source_block_id>virtual_source_0_1</source_block_id> + <sink_block_id>trellis_siso_combined_f_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0_0</sink_block_id> + <source_block_id>virtual_source_0_1_0</source_block_id> + <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> </flow_graph> diff --git a/gr-trellis/examples/grc/viterbi_equalization.grc b/gr-trellis/examples/grc/viterbi_equalization.grc index 2f69ead429..2f50e6abdf 100644 --- a/gr-trellis/examples/grc/viterbi_equalization.grc +++ b/gr-trellis/examples/grc/viterbi_equalization.grc @@ -1,412 +1,508 @@ -<?xml version='1.0' encoding='ASCII'?> -<?grc format='1' created='3.7.6'?> +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.11'?> <flow_graph> <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> <key>options</key> <param> - <key>id</key> - <value>viterbi_equalization</value> + <key>author</key> + <value>AA</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>window_size</key> + <value>2048, 2048</value> </param> <param> - <key>title</key> - <value>Viterbi Equalization</value> + <key>category</key> + <value>Custom</value> </param> <param> - <key>author</key> - <value>AA</value> + <key>comment</key> + <value></value> </param> <param> <key>description</key> <value>gnuradio flow graph</value> </param> <param> - <key>window_size</key> - <value>2048, 2048</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>generate_options</key> - <value>wx_gui</value> + <key>_coordinate</key> + <value>(0, 4)</value> </param> <param> - <key>category</key> - <value>Custom</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>run_options</key> - <value>prompt</value> + <key>generate_options</key> + <value>qt_gui</value> </param> <param> - <key>run</key> - <value>True</value> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>viterbi_equalization</value> </param> <param> <key>max_nouts</key> <value>0</value> </param> <param> - <key>realtime_scheduling</key> + <key>qt_qss_theme</key> <value></value> </param> <param> - <key>alias</key> + <key>realtime_scheduling</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(10, 10)</value> + <key>run_command</key> + <value>{python} -u {filename}</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <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>Viterbi Equalization</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>noisevar</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <key>_coordinate</key> + <value>(464, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(872, 157)</value> + <key>id</key> + <value>Es</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> </param> </block> <block> - <key>variable</key> + <key>variable_qtgui_range</key> <param> - <key>id</key> - <value>bpsym</value> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>int(round(math.log(fsm.I())/math.log(2)))</value> + <key>_coordinate</key> + <value>(608, 4)</value> </param> <param> - <key>alias</key> + <key>gui_hint</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(528, 13)</value> - </param> - <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> - <value>channel</value> + <value>EsN0_dB</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>value</key> - <value>fu.c_channel</value> + <key>min_len</key> + <value>200</value> </param> <param> - <key>alias</key> - <value></value> + <key>orient</key> + <value>Qt.Horizontal</value> </param> <param> - <key>_coordinate</key> - <value>(320, 85)</value> + <key>start</key> + <value>-10</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>step</key> + <value>1</value> + </param> + <param> + <key>stop</key> + <value>30</value> + </param> + <param> + <key>rangeType</key> + <value>float</value> + </param> + <param> + <key>widget</key> + <value>counter_slider</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>R</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(176, 68)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>R</value> + </param> + <param> <key>value</key> <value>100e3</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>(216, 109)</value> + <value>(176, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>variable</key> <param> <key>id</key> <value>block</value> </param> <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> <key>value</key> <value>bpsym*1000</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>(216, 21)</value> + <value>(464, 4)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>bpsym</value> + </param> + <param> + <key>value</key> + <value>int(round(math.log(fsm.I())/math.log(2)))</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>fsm</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>trellis.fsm(len(modulation[1]),len(channel))</value> + <key>_coordinate</key> + <value>(272, 68)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 157)</value> + <key>id</key> + <value>channel</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>fu.c_channel</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>tot_mod</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>fu.make_isi_lookup(modulation,channel,False)</value> + <key>_coordinate</key> + <value>(272, 132)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(320, 229)</value> + <key>id</key> + <value>fsm</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>trellis.fsm(len(modulation[1]),len(channel))</value> </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>modulation</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> + <key>_coordinate</key> + <value>(272, 4)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>modulation</value> + </param> + <param> <key>value</key> <value>fu.pam4</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>(320, 21)</value> + <value>(464, 132)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>noisevar</value> + </param> + <param> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + </param> </block> <block> <key>variable</key> <param> - <key>id</key> - <value>Es</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> + <key>_coordinate</key> + <value>(272, 196)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(568, 157)</value> + <key>id</key> + <value>tot_mod</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>value</key> + <value>fu.make_isi_lookup(modulation,channel,False)</value> </param> </block> <block> - <key>import</key> + <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>import_0_0</value> + <key>amp</key> + <value>noisevar**0.5</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>import</key> - <value>import gnuradio.trellis.fsm_utils as fu</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(24, 252)</value> + <value>(752, 444)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>import</key> <param> <key>id</key> - <value>import_0</value> + <value>analog_noise_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>import</key> - <value>import numpy</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>_coordinate</key> - <value>(16, 140)</value> + <key>type</key> + <value>float</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>seed</key> + <value>-42</value> </param> </block> <block> - <key>import</key> + <key>analog_random_source_x</key> <param> - <key>id</key> - <value>import_0_1</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>import</key> - <value>import math</value> + <key>affinity</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(24, 188)</value> + <value>(0, 356)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blks2_error_rate</key> <param> <key>id</key> - <value>blks2_error_rate_0</value> + <value>analog_random_source_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>2</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>num_samps</key> + <value>1007</value> </param> <param> <key>type</key> - <value>'BER'</value> + <value>byte</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>repeat</key> + <value>True</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> <key>bits_per_symbol</key> <value>1</value> @@ -416,152 +512,152 @@ <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(312, 1766)</value> + <value>(816, 708)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_source</key> <param> <key>id</key> - <value>virtual_source_0_0</value> + <value>blks2_error_rate_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(80, 1724)</value> + <key>type</key> + <value>'BER'</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>win_size</key> + <value>block*100</value> </param> </block> <block> - <key>virtual_source</key> + <key>blocks_add_xx</key> <param> - <key>id</key> - <value>virtual_source_0_0_0</value> + <key>alias</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>comment</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(72, 1820)</value> + <value>(1048, 384)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>wxgui_numbersink2_3_0_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>blocks_add_xx_1</value> </param> <param> <key>type</key> <value>float</value> </param> <param> - <key>title</key> - <value>BER</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_null_sink</key> <param> - <key>max_value</key> - <value>1.0</value> + <key>alias</key> + <value></value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>bus_conns</key> + <value>[[0,],]</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>comment</key> + <value></value> </param> <param> - <key>ref_level</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>_coordinate</key> + <value>(1208, 344)</value> </param> <param> - <key>average</key> - <value>False</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>id</key> + <value>blocks_null_sink_1</value> </param> <param> - <key>show_gauge</key> - <value>False</value> + <key>type</key> + <value>float</value> </param> <param> - <key>win_size</key> - <value></value> + <key>num_inputs</key> + <value>1</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> + </block> + <block> + <key>blocks_pack_k_bits_bb</key> <param> - <key>notebook</key> + <key>alias</key> <value></value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -569,758 +665,865 @@ <value></value> </param> <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(728, 1709)</value> + <value>(384, 380)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>note</key> <param> <key>id</key> - <value>note_0</value> + <value>blocks_pack_k_bits_bb_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>k</key> + <value>bpsym</value> </param> <param> - <key>note</key> - <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>blocks_throttle</key> <param> - <key>_coordinate</key> - <value>(704, 1468)</value> + <key>alias</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>comment</key> + <value></value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>observation</value> - </param> - <param> <key>_coordinate</key> - <value>(40, 1236)</value> + <value>(208, 380)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0_0</value> + <value>blocks_throttle_0</value> </param> <param> - <key>_enabled</key> + <key>ignoretag</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(232, 524)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>samples_per_second</key> + <value>R</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>vlen</key> + <value>1</value> </param> </block> <block> - <key>analog_random_source_x</key> + <key>blocks_unpack_k_bits_bb</key> <param> - <key>id</key> - <value>analog_random_source_x_0</value> + <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>type</key> - <value>byte</value> + <key>_coordinate</key> + <value>(672, 740)</value> </param> <param> - <key>min</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>max</key> - <value>2</value> + <key>id</key> + <value>blocks_unpack_k_bits_bb_0</value> </param> <param> - <key>num_samps</key> - <value>1007</value> + <key>k</key> + <value>bpsym</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_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>minoutbuf</key> - <value>0</value> + <key>dimension</key> + <value>tot_mod[0]</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(16, 559)</value> + <value>(760, 244)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_null_sink</key> <param> <key>id</key> - <value>blocks_null_sink_1</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>in_type</key> + <value>short</value> </param> <param> - <key>type</key> - <value>float</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>num_inputs</key> + <key>num_ports</key> <value>1</value> </param> <param> - <key>bus_conns</key> - <value>[[0,],]</value> + <key>out_type</key> + <value>float</value> </param> <param> + <key>symbol_table</key> + <value>tot_mod[1]</value> + </param> + </block> + <block> + <key>digital_chunks_to_symbols_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>dimension</key> + <value>modulation[0]</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(800, 1008)</value> + <value>(512, 372)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0</value> + <value>digital_chunks_to_symbols_xx_0_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(608, 1076)</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>out_type</key> + <value>float</value> + </param> + <param> + <key>symbol_table</key> + <value>modulation[1]</value> </param> </block> <block> <key>fir_filter_xxx</key> <param> - <key>id</key> - <value>fir_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>fff</value> + <key>affinity</key> + <value></value> </param> <param> <key>decim</key> <value>1</value> </param> <param> - <key>taps</key> - <value>fu.c_channel</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>samp_delay</key> + <key>_coordinate</key> + <value>(712, 372)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>fir_filter_xxx_0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> <key>minoutbuf</key> <value>0</value> </param> <param> - <key>maxoutbuf</key> + <key>samp_delay</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(904, 613)</value> + <key>taps</key> + <value>fu.c_channel</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>type</key> + <value>fff</value> </param> </block> <block> - <key>blocks_add_xx</key> + <key>import</key> <param> - <key>id</key> - <value>blocks_add_xx_1</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> + <key>_coordinate</key> + <value>(0, 116)</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>import</key> + <value>import numpy</value> </param> + </block> + <block> + <key>import</key> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> + <key>_coordinate</key> + <value>(0, 212)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> <param> + <key>id</key> + <value>import_0_0</value> + </param> + <param> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> <key>_coordinate</key> - <value>(688, 944)</value> + <value>(0, 164)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>import_0_1</value> + </param> + <param> + <key>import</key> + <value>import math</value> + </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>note</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> - <value>False</value> + <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> + <key>_coordinate</key> + <value>(752, 612)</value> </param> <param> - <key>out_type</key> - <value>float</value> + <key>_rotation</key> + <value>0</value> </param> <param> - <key>symbol_table</key> - <value>tot_mod[1]</value> + <key>id</key> + <value>note_0</value> </param> <param> - <key>dimension</key> - <value>tot_mod[0]</value> + <key>note</key> + <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> </param> + </block> + <block> + <key>qtgui_number_sink</key> <param> - <key>num_ports</key> - <value>1</value> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>avg</key> + <value>0</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> + <key>comment</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>1</value> </param> <param> <key>_coordinate</key> - <value>(944, 461)</value> + <value>(984, 700)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>analog_noise_source_x_0</value> + <key>graph_type</key> + <value>qtgui.NUM_GRAPH_HORIZ</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>id</key> + <value>qtgui_number_sink_0</value> </param> <param> <key>type</key> <value>float</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>color1</key> + <value>("black", "black")</value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>factor1</key> + <value>1</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>label1</key> + <value>BER</value> </param> <param> - <key>alias</key> + <key>unit1</key> <value></value> </param> <param> - <key>affinity</key> + <key>color10</key> + <value>("black", "black")</value> + </param> + <param> + <key>factor10</key> + <value>1</value> + </param> + <param> + <key>label10</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>unit10</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>color2</key> + <value>("black", "black")</value> </param> <param> - <key>_coordinate</key> - <value>(288, 958)</value> + <key>factor2</key> + <value>1</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>label2</key> + <value></value> </param> - </block> - <block> - <key>trellis_metrics_x</key> <param> - <key>id</key> - <value>trellis_metrics_x_0</value> + <key>unit2</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>False</value> + <key>color3</key> + <value>("black", "black")</value> </param> <param> - <key>type</key> - <value>f</value> + <key>factor3</key> + <value>1</value> </param> <param> - <key>card</key> - <value>fsm.O()</value> + <key>label3</key> + <value></value> </param> <param> - <key>dim</key> - <value>tot_mod[0]</value> + <key>unit3</key> + <value></value> </param> <param> - <key>table</key> - <value>tot_mod[1]</value> + <key>color4</key> + <value>("black", "black")</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>factor4</key> + <value>1</value> </param> <param> - <key>alias</key> + <key>label4</key> <value></value> </param> <param> - <key>affinity</key> + <key>unit4</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>color5</key> + <value>("black", "black")</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor5</key> + <value>1</value> </param> <param> - <key>_coordinate</key> - <value>(272, 1271)</value> + <key>label5</key> + <value></value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>unit5</key> + <value></value> </param> - </block> - <block> - <key>variable_slider</key> <param> - <key>id</key> - <value>EsN0_dB</value> + <key>color6</key> + <value>("black", "black")</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>factor6</key> + <value>1</value> </param> <param> - <key>label</key> - <value>Es/N0 (dB)</value> + <key>label6</key> + <value></value> </param> <param> - <key>value</key> - <value>20.0</value> + <key>unit6</key> + <value></value> </param> <param> - <key>min</key> - <value>-10</value> + <key>color7</key> + <value>("black", "black")</value> </param> <param> - <key>max</key> - <value>30</value> + <key>factor7</key> + <value>1</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>label7</key> + <value></value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>unit7</key> + <value></value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>color8</key> + <value>("black", "black")</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>factor8</key> + <value>1</value> </param> <param> - <key>notebook</key> + <key>label8</key> <value></value> </param> <param> - <key>alias</key> + <key>unit8</key> <value></value> </param> <param> - <key>_coordinate</key> - <value>(728, 105)</value> + <key>color9</key> + <value>("black", "black")</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>factor9</key> + <value>1</value> </param> - </block> - <block> - <key>blocks_throttle</key> <param> - <key>id</key> - <value>blocks_throttle_0</value> + <key>label9</key> + <value></value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>unit9</key> + <value></value> </param> <param> - <key>type</key> - <value>byte</value> + <key>max</key> + <value>1</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>min</key> + <value>0</value> </param> <param> - <key>vlen</key> + <key>name</key> + <value>"BER"</value> + </param> + <param> + <key>nconnections</key> <value>1</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>update_time</key> + <value>0.10</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>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fsm_args</key> + <value>fsm</value> </param> <param> <key>_coordinate</key> - <value>(240, 580)</value> + <value>(520, 244)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0</value> + <value>trellis_encoder_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>0</value> </param> <param> - <key>in_type</key> - <value>byte</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>out_type</key> - <value>float</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>symbol_table</key> - <value>modulation[1]</value> + <key>type</key> + <value>bs</value> </param> + </block> + <block> + <key>trellis_metrics_x</key> <param> - <key>dimension</key> - <value>modulation[0]</value> + <key>alias</key> + <value></value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>comment</key> + <value></value> </param> <param> - <key>alias</key> - <value></value> + <key>table</key> + <value>tot_mod[1]</value> </param> <param> <key>affinity</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>dim</key> + <value>tot_mod[0]</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> <key>_coordinate</key> - <value>(672, 613)</value> + <value>(208, 548)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>trellis_metrics_x_0</value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(944, 1436)</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>_rotation</key> + <key>minoutbuf</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_x</key> <param> - <key>id</key> - <value>trellis_viterbi_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>False</value> + <key>card</key> + <value>fsm.O()</value> </param> <param> <key>type</key> - <value>b</value> + <value>f</value> </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> <param> - <key>fsm_args</key> - <value>fsm</value> + <key>alias</key> + <value></value> </param> <param> <key>block_size</key> <value>block/bpsym</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>comment</key> + <value></value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>table</key> + <value>tot_mod[1]</value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>dim</key> + <value>tot_mod[0]</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fsm_args</key> + <value>fsm</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(480, 1271)</value> + <value>(352, 692)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> <value>trellis_viterbi_combined_xx_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> <key>type</key> <value>f</value> </param> <param> - <key>out_type</key> - <value>b</value> - </param> - <param> - <key>fsm_args</key> - <value>fsm</value> - </param> - <param> - <key>block_size</key> - <value>block/bpsym</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>dim</key> - <value>tot_mod[0]</value> + <key>out_type</key> + <value>b</value> </param> + </block> + <block> + <key>trellis_viterbi_x</key> <param> - <key>table</key> - <value>tot_mod[1]</value> + <key>alias</key> + <value></value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>block_size</key> + <value>block/bpsym</value> </param> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> @@ -1328,210 +1531,217 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>False</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>fsm_args</key> + <value>fsm</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> </param> <param> <key>_coordinate</key> - <value>(352, 1410)</value> + <value>(432, 548)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_unpack_k_bits_bb</key> <param> <key>id</key> - <value>blocks_unpack_k_bits_bb_0</value> + <value>trellis_viterbi_x_0</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>init_state</key> + <value>-1</value> </param> <param> - <key>k</key> - <value>bpsym</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>type</key> + <value>b</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>minoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(728, 1364)</value> + <value>(1176, 396)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> - </block> - <block> - <key>blocks_pack_k_bits_bb</key> <param> <key>id</key> - <value>blocks_pack_k_bits_bb_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> + <value>virtual_sink_0</value> </param> <param> - <key>k</key> - <value>bpsym</value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>alias</key> + <key>comment</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_coordinate</key> + <value>(216, 460)</value> </param> <param> - <key>maxoutbuf</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(456, 572)</value> + <key>id</key> + <value>virtual_sink_0_0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>stream_id</key> + <value>info</value> </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>virtual_source</key> <param> - <key>id</key> - <value>trellis_encoder_xx_0</value> + <key>comment</key> + <value></value> </param> <param> <key>_enabled</key> - <value>False</value> - </param> - <param> - <key>type</key> - <value>bs</value> + <value>True</value> </param> <param> - <key>fsm_args</key> - <value>fsm</value> + <key>_coordinate</key> + <value>(0, 740)</value> </param> <param> - <key>init_state</key> + <key>_rotation</key> <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>stream_id</key> + <value>observation</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>minoutbuf</key> - <value>0</value> + <key>comment</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> <key>_coordinate</key> - <value>(672, 461)</value> + <value>(416, 460)</value> </param> <param> <key>_rotation</key> <value>0</value> </param> + <param> + <key>id</key> + <value>virtual_source_0_0</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> </block> <connection> - <source_block_id>blks2_error_rate_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_metrics_x_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>qtgui_number_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_metrics_x_0</source_block_id> - <sink_block_id>trellis_viterbi_x_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>blocks_null_sink_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>virtual_sink_0_0</sink_block_id> + <source_block_id>blocks_pack_k_bits_bb_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>blocks_pack_k_bits_bb_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>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>blocks_null_sink_1</sink_block_id> + <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -1548,50 +1758,44 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</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>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id> + <source_block_id>trellis_metrics_x_0</source_block_id> + <sink_block_id>trellis_viterbi_x_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>digital_chunks_to_symbols_xx_0_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_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> <connection> - <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id> - <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_block_id>trellis_viterbi_x_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> <connection> - <source_block_id>trellis_viterbi_x_0</source_block_id> - <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_metrics_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> - <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_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>trellis_encoder_xx_0</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-trellis/swig/CMakeLists.txt b/gr-trellis/swig/CMakeLists.txt index d03d0998ef..a493c67fcc 100644 --- a/gr-trellis/swig/CMakeLists.txt +++ b/gr-trellis/swig/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright 2012 Free Software Foundation, Inc. +# Copyright 2012,2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -24,10 +24,10 @@ include(GrPython) include(GrSwig) set(GR_SWIG_INCLUDE_DIRS - ${GR_TRELLIS_INCLUDE_DIRS} - ${GR_DIGITAL_INCLUDE_DIRS} - ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} - ${Boost_INCLUDE_DIRS} + ${GR_TRELLIS_INCLUDE_DIRS} + ${GR_DIGITAL_INCLUDE_DIRS} + ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} ) set(GR_SWIG_LIBRARIES gnuradio-trellis gnuradio-digital) @@ -36,27 +36,53 @@ if(ENABLE_GR_CTRLPORT) list(APPEND GR_SWIG_FLAGS "-DGR_CTRLPORT") endif(ENABLE_GR_CTRLPORT) -# Setup swig docs to depend on includes and pull in from build directory -set(GR_SWIG_TARGET_DEPS trellis_generated_includes) -set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/trellis_swig_doc.i) -set(GR_SWIG_DOC_DIRS - ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/trellis - ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/trellis +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/trellis_swig.py.in + ${CMAKE_CURRENT_BINARY_DIR}/trellis_swig.py +@ONLY) + +# We split up the swig files into multiple sections to minimize the +# memory overhead. If a .i file grows too large, create a new file +# named 'trellis_swigN.i' and add it to this list. +# +# Also add the line "from swig_trellisN import *" line to +# trellis_swig.py.in. +set(GR_SWIG_TRELLIS_IFILES + trellis_swig0 + trellis_swig1 ) -set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc) -GR_SWIG_MAKE(trellis_swig trellis_swig.i) +foreach(swigfile ${GR_SWIG_TRELLIS_IFILES}) + set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/${swigfile}_doc.i) + set(GR_SWIG_DOC_DIRS + ${CMAKE_CURRENT_SOURCE_DIR}/../include/gnuradio/trellis + ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/trellis + ) + set(GR_SWIG_DOCS_TARGET_DEPS runtime_swig_swig_doc) + set(GR_SWIG_TARGET_DEPS trellis_generated_includes) + set(GR_SWIG_LIBRARIES gnuradio-trellis gnuradio-digital) + GR_SWIG_MAKE(${swigfile} ${swigfile}.i) -GR_SWIG_INSTALL( - TARGETS trellis_swig + GR_SWIG_INSTALL( + TARGETS ${swigfile} DESTINATION ${GR_PYTHON_DIR}/gnuradio/trellis - COMPONENT "trellis_python" -) + COMPONENT "trellis_python") + + list(APPEND SWIGFILES ${swigfile}.i) + list(APPEND SWIGDOCFILES ${CMAKE_CURRENT_BINARY_DIR}/${swigfile}_doc.i) +endforeach(swigfile) install( FILES - trellis_swig.i - ${CMAKE_CURRENT_BINARY_DIR}/trellis_swig_doc.i + ${SWIGFILES} + ${SWIGDOCFILES} DESTINATION ${GR_INCLUDE_DIR}/gnuradio/swig COMPONENT "trellis_swig" ) + +# Install the Python file that pulls in the swig built files. +GR_PYTHON_INSTALL( + FILES ${CMAKE_CURRENT_BINARY_DIR}/trellis_swig.py + DESTINATION ${GR_PYTHON_DIR}/gnuradio/trellis + COMPONENT "trellis_python" +) diff --git a/gr-trellis/swig/trellis_swig.py.in b/gr-trellis/swig/trellis_swig.py.in new file mode 100644 index 0000000000..fac5f631e2 --- /dev/null +++ b/gr-trellis/swig/trellis_swig.py.in @@ -0,0 +1,23 @@ +# +# Copyright 2016 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio 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. +# +# GNU Radio 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 GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from trellis_swig0 import * +from trellis_swig1 import * diff --git a/gr-trellis/swig/trellis_swig0.i b/gr-trellis/swig/trellis_swig0.i new file mode 100644 index 0000000000..9f309c5ca3 --- /dev/null +++ b/gr-trellis/swig/trellis_swig0.i @@ -0,0 +1,117 @@ +/* + * Copyright 2012,2016 Free Software Foundation, Inc. + * + * This file is part of GNU Radio + * + * GNU Radio 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. + * + * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#define TRELLIS_API +#define DIGITAL_API + +%include "gnuradio.i" + +//load generated python docstrings +%include "trellis_swig0_doc.i" + +%include "gnuradio/digital/metric_type.h" +%include "gnuradio/digital/constellation.h" +%include "gnuradio/trellis/siso_type.h" +%include "gnuradio/trellis/fsm.h" +%include "gnuradio/trellis/interleaver.h" + +%{ +#include "gnuradio/trellis/constellation_metrics_cf.h" +#include "gnuradio/trellis/permutation.h" +#include "gnuradio/trellis/siso_combined_f.h" +#include "gnuradio/trellis/siso_f.h" +#include "gnuradio/trellis/encoder_bb.h" +#include "gnuradio/trellis/encoder_bs.h" +#include "gnuradio/trellis/encoder_bi.h" +#include "gnuradio/trellis/encoder_ss.h" +#include "gnuradio/trellis/encoder_si.h" +#include "gnuradio/trellis/encoder_ii.h" +#include "gnuradio/trellis/sccc_encoder_bb.h" +#include "gnuradio/trellis/sccc_encoder_bs.h" +#include "gnuradio/trellis/sccc_encoder_bi.h" +#include "gnuradio/trellis/sccc_encoder_ss.h" +#include "gnuradio/trellis/sccc_encoder_si.h" +#include "gnuradio/trellis/sccc_encoder_ii.h" +#include "gnuradio/trellis/pccc_encoder_bb.h" +#include "gnuradio/trellis/pccc_encoder_bs.h" +#include "gnuradio/trellis/pccc_encoder_bi.h" +#include "gnuradio/trellis/pccc_encoder_ss.h" +#include "gnuradio/trellis/pccc_encoder_si.h" +#include "gnuradio/trellis/pccc_encoder_ii.h" +#include "gnuradio/trellis/metrics_s.h" +#include "gnuradio/trellis/metrics_i.h" +#include "gnuradio/trellis/metrics_f.h" +#include "gnuradio/trellis/metrics_c.h" +%} + +%include "gnuradio/trellis/constellation_metrics_cf.h" +%include "gnuradio/trellis/permutation.h" +%include "gnuradio/trellis/siso_combined_f.h" +%include "gnuradio/trellis/siso_f.h" +%include "gnuradio/trellis/encoder_bb.h" +%include "gnuradio/trellis/encoder_bs.h" +%include "gnuradio/trellis/encoder_bi.h" +%include "gnuradio/trellis/encoder_ss.h" +%include "gnuradio/trellis/encoder_si.h" +%include "gnuradio/trellis/encoder_ii.h" +%include "gnuradio/trellis/sccc_encoder_bb.h" +%include "gnuradio/trellis/sccc_encoder_bs.h" +%include "gnuradio/trellis/sccc_encoder_bi.h" +%include "gnuradio/trellis/sccc_encoder_ss.h" +%include "gnuradio/trellis/sccc_encoder_si.h" +%include "gnuradio/trellis/sccc_encoder_ii.h" +%include "gnuradio/trellis/pccc_encoder_bb.h" +%include "gnuradio/trellis/pccc_encoder_bs.h" +%include "gnuradio/trellis/pccc_encoder_bi.h" +%include "gnuradio/trellis/pccc_encoder_ss.h" +%include "gnuradio/trellis/pccc_encoder_si.h" +%include "gnuradio/trellis/pccc_encoder_ii.h" +%include "gnuradio/trellis/metrics_s.h" +%include "gnuradio/trellis/metrics_i.h" +%include "gnuradio/trellis/metrics_f.h" +%include "gnuradio/trellis/metrics_c.h" + +GR_SWIG_BLOCK_MAGIC2(trellis, constellation_metrics_cf); +GR_SWIG_BLOCK_MAGIC2(trellis, permutation); +GR_SWIG_BLOCK_MAGIC2(trellis, siso_combined_f); +GR_SWIG_BLOCK_MAGIC2(trellis, siso_f); +GR_SWIG_BLOCK_MAGIC2(trellis, encoder_bb); +GR_SWIG_BLOCK_MAGIC2(trellis, encoder_bs); +GR_SWIG_BLOCK_MAGIC2(trellis, encoder_bi); +GR_SWIG_BLOCK_MAGIC2(trellis, encoder_ss); +GR_SWIG_BLOCK_MAGIC2(trellis, encoder_si); +GR_SWIG_BLOCK_MAGIC2(trellis, encoder_ii); +GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_bb); +GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_bs); +GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_bi); +GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_ss); +GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_si); +GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_ii); +GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_bb); +GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_bs); +GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_bi); +GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_ss); +GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_si); +GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_ii); +GR_SWIG_BLOCK_MAGIC2(trellis, metrics_s); +GR_SWIG_BLOCK_MAGIC2(trellis, metrics_i); +GR_SWIG_BLOCK_MAGIC2(trellis, metrics_f); +GR_SWIG_BLOCK_MAGIC2(trellis, metrics_c); diff --git a/gr-trellis/swig/trellis_swig.i b/gr-trellis/swig/trellis_swig1.i index 8c71a5e93c..6481aee245 100644 --- a/gr-trellis/swig/trellis_swig.i +++ b/gr-trellis/swig/trellis_swig1.i @@ -1,5 +1,5 @@ /* - * Copyright 2012 Free Software Foundation, Inc. + * Copyright 2016 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -25,41 +25,14 @@ %include "gnuradio.i" //load generated python docstrings -%include "trellis_swig_doc.i" +%include "trellis_swig1_doc.i" %include "gnuradio/digital/metric_type.h" -%include "gnuradio/digital/constellation.h" %include "gnuradio/trellis/siso_type.h" %include "gnuradio/trellis/fsm.h" %include "gnuradio/trellis/interleaver.h" %{ -#include "gnuradio/trellis/constellation_metrics_cf.h" -#include "gnuradio/trellis/permutation.h" -#include "gnuradio/trellis/siso_combined_f.h" -#include "gnuradio/trellis/siso_f.h" -#include "gnuradio/trellis/encoder_bb.h" -#include "gnuradio/trellis/encoder_bs.h" -#include "gnuradio/trellis/encoder_bi.h" -#include "gnuradio/trellis/encoder_ss.h" -#include "gnuradio/trellis/encoder_si.h" -#include "gnuradio/trellis/encoder_ii.h" -#include "gnuradio/trellis/sccc_encoder_bb.h" -#include "gnuradio/trellis/sccc_encoder_bs.h" -#include "gnuradio/trellis/sccc_encoder_bi.h" -#include "gnuradio/trellis/sccc_encoder_ss.h" -#include "gnuradio/trellis/sccc_encoder_si.h" -#include "gnuradio/trellis/sccc_encoder_ii.h" -#include "gnuradio/trellis/pccc_encoder_bb.h" -#include "gnuradio/trellis/pccc_encoder_bs.h" -#include "gnuradio/trellis/pccc_encoder_bi.h" -#include "gnuradio/trellis/pccc_encoder_ss.h" -#include "gnuradio/trellis/pccc_encoder_si.h" -#include "gnuradio/trellis/pccc_encoder_ii.h" -#include "gnuradio/trellis/metrics_s.h" -#include "gnuradio/trellis/metrics_i.h" -#include "gnuradio/trellis/metrics_f.h" -#include "gnuradio/trellis/metrics_c.h" #include "gnuradio/trellis/pccc_decoder_b.h" #include "gnuradio/trellis/pccc_decoder_s.h" #include "gnuradio/trellis/pccc_decoder_i.h" @@ -95,32 +68,6 @@ #include "gnuradio/trellis/sccc_decoder_combined_ci.h" %} -%include "gnuradio/trellis/constellation_metrics_cf.h" -%include "gnuradio/trellis/permutation.h" -%include "gnuradio/trellis/siso_combined_f.h" -%include "gnuradio/trellis/siso_f.h" -%include "gnuradio/trellis/encoder_bb.h" -%include "gnuradio/trellis/encoder_bs.h" -%include "gnuradio/trellis/encoder_bi.h" -%include "gnuradio/trellis/encoder_ss.h" -%include "gnuradio/trellis/encoder_si.h" -%include "gnuradio/trellis/encoder_ii.h" -%include "gnuradio/trellis/sccc_encoder_bb.h" -%include "gnuradio/trellis/sccc_encoder_bs.h" -%include "gnuradio/trellis/sccc_encoder_bi.h" -%include "gnuradio/trellis/sccc_encoder_ss.h" -%include "gnuradio/trellis/sccc_encoder_si.h" -%include "gnuradio/trellis/sccc_encoder_ii.h" -%include "gnuradio/trellis/pccc_encoder_bb.h" -%include "gnuradio/trellis/pccc_encoder_bs.h" -%include "gnuradio/trellis/pccc_encoder_bi.h" -%include "gnuradio/trellis/pccc_encoder_ss.h" -%include "gnuradio/trellis/pccc_encoder_si.h" -%include "gnuradio/trellis/pccc_encoder_ii.h" -%include "gnuradio/trellis/metrics_s.h" -%include "gnuradio/trellis/metrics_i.h" -%include "gnuradio/trellis/metrics_f.h" -%include "gnuradio/trellis/metrics_c.h" %include "gnuradio/trellis/pccc_decoder_b.h" %include "gnuradio/trellis/pccc_decoder_s.h" %include "gnuradio/trellis/pccc_decoder_i.h" @@ -155,32 +102,6 @@ %include "gnuradio/trellis/sccc_decoder_combined_cs.h" %include "gnuradio/trellis/sccc_decoder_combined_ci.h" -GR_SWIG_BLOCK_MAGIC2(trellis, constellation_metrics_cf); -GR_SWIG_BLOCK_MAGIC2(trellis, permutation); -GR_SWIG_BLOCK_MAGIC2(trellis, siso_combined_f); -GR_SWIG_BLOCK_MAGIC2(trellis, siso_f); -GR_SWIG_BLOCK_MAGIC2(trellis, encoder_bb); -GR_SWIG_BLOCK_MAGIC2(trellis, encoder_bs); -GR_SWIG_BLOCK_MAGIC2(trellis, encoder_bi); -GR_SWIG_BLOCK_MAGIC2(trellis, encoder_ss); -GR_SWIG_BLOCK_MAGIC2(trellis, encoder_si); -GR_SWIG_BLOCK_MAGIC2(trellis, encoder_ii); -GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_bb); -GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_bs); -GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_bi); -GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_ss); -GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_si); -GR_SWIG_BLOCK_MAGIC2(trellis, sccc_encoder_ii); -GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_bb); -GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_bs); -GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_bi); -GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_ss); -GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_si); -GR_SWIG_BLOCK_MAGIC2(trellis, pccc_encoder_ii); -GR_SWIG_BLOCK_MAGIC2(trellis, metrics_s); -GR_SWIG_BLOCK_MAGIC2(trellis, metrics_i); -GR_SWIG_BLOCK_MAGIC2(trellis, metrics_f); -GR_SWIG_BLOCK_MAGIC2(trellis, metrics_c); GR_SWIG_BLOCK_MAGIC2(trellis, pccc_decoder_b); GR_SWIG_BLOCK_MAGIC2(trellis, pccc_decoder_s); GR_SWIG_BLOCK_MAGIC2(trellis, pccc_decoder_i); diff --git a/gr-uhd/apps/uhd_app.py b/gr-uhd/apps/uhd_app.py index ff4412a140..8e377f0b4d 100644 --- a/gr-uhd/apps/uhd_app.py +++ b/gr-uhd/apps/uhd_app.py @@ -42,12 +42,25 @@ LONG_TPL = """{prefix} Motherboard: {mb_id} ({mb_serial}) """ class UHDApp(object): + " Base class for simple UHD-based applications " def __init__(self, prefix=None, args=None): self.prefix = prefix self.args = args self.verbose = args.verbose or 0 if self.args.sync == 'auto' and len(self.args.channels) > 1: self.args.sync = 'pps' + self.antenna = None + self.gain_range = None + self.samp_rate = None + self.has_lo_sensor = None + self.async_msgq = None + self.async_src = None + self.async_rcv = None + self.tr = None + self.gain = None + self.freq = None + self.channels = None + self.cpu_format = None def vprint(self, *args): """ @@ -78,7 +91,7 @@ class UHDApp(object): if info_pp['mb_serial'] == "": info_pp['mb_serial'] = "no serial" info_pp['db_subdev'] = usrp_info["{xx}_subdev_name".format(xx=tx_or_rx)] - info_pp['db_serial'] = ", " + usrp_info["{xx}_serial".format(xx=tx_or_rx)] + info_pp['db_serial'] = ", " + usrp_info["{xx}_serial".format(xx=tx_or_rx)] if info_pp['db_serial'] == "": info_pp['db_serial'] = "no serial" info_pp['subdev'] = self.usrp.get_subdev_spec(mboard) @@ -108,16 +121,30 @@ class UHDApp(object): antennas = [antennas[0],] * len(args.channels) return antennas + def normalize_subdev_sel(self, spec): + """ + """ + if spec is None: + return None + specs = [x.strip() for x in spec.split(",")] + if len(specs) == 1: + return spec + elif len(specs) != self.usrp.get_num_mboards(): + raise ValueError("Invalid subdev setting for {n} mboards: {a}".format( + n=len(self.usrp.get_num_mboards()), a=spec + )) + return specs + def async_callback(self, msg): """ Call this when USRP async metadata needs printing. """ - md = self.async_src.msg_to_async_metadata_t(msg) + metadata = self.async_src.msg_to_async_metadata_t(msg) print("[{prefix}] Channel: {chan} Time: {t} Event: {e}".format( prefix=self.prefix, - chan=md.channel, - t=md.time_spec.get_real_secs(), - e=md.event_code, + chan=metadata.channel, + t=metadata.time_spec.get_real_secs(), + e=metadata.event_code, )) def setup_usrp(self, ctor, args, cpu_format='fc32'): @@ -138,12 +165,20 @@ class UHDApp(object): ) ) # Set the subdevice spec: + args.spec = self.normalize_subdev_sel(args.spec) 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 isinstance(args.spec, list): + self.usrp.set_subdev_spec(args.spec[mb_idx], mb_idx) + else: + self.usrp.set_subdev_spec(args.spec, mb_idx) + # Set the clock and/or time source: if args.clock_source is not None: - self.usrp.set_clock_source(args.clock_source) + for mb_idx in xrange(self.usrp.get_num_mboards()): + self.usrp.set_clock_source(args.clock_source, mb_idx) + if args.time_source is not None: + for mb_idx in xrange(self.usrp.get_num_mboards()): + self.usrp.set_time_source(args.time_source, mb_idx) # Sampling rate: self.usrp.set_samp_rate(args.samp_rate) self.samp_rate = self.usrp.get_samp_rate() @@ -153,7 +188,7 @@ class UHDApp(object): if self.antenna is not None: for i, chan in enumerate(self.channels): if not self.antenna[i] in self.usrp.get_antennas(chan): - self.vprint("[ERROR] {} is not a valid antenna name for this USRP device!".format(ant)) + self.vprint("[ERROR] {} is not a valid antenna name for this USRP device!".format(self.antenna[i])) exit(1) self.usrp.set_antenna(self.antenna[i], chan) self.vprint("[{prefix}] Channel {chan}: Using antenna {ant}.".format( @@ -281,8 +316,8 @@ class UHDApp(object): tx_or_rx = tx_or_rx.strip() + " " group = parser.add_argument_group('USRP Arguments') group.add_argument("-a", "--args", default="", help="UHD device address args") - group.add_argument("--spec", help="Subdevice of UHD device where appropriate") - group.add_argument("-A", "--antenna", help="Select {xx}Antenna(s) where appropriate".format(xx=tx_or_rx)) + group.add_argument("--spec", help="Subdevice(s) of UHD device where appropriate. Use a comma-separated list to set different boards to different specs.") + group.add_argument("-A", "--antenna", help="Select {xx}antenna(s) where appropriate".format(xx=tx_or_rx)) group.add_argument("-s", "--samp-rate", type=eng_arg.eng_float, default=1e6, help="Sample rate") group.add_argument("-g", "--gain", type=eng_arg.eng_float, default=None, @@ -310,5 +345,7 @@ class UHDApp(object): 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'") + group.add_argument("--time-source", + help="Set the time source") return parser diff --git a/gr-uhd/apps/uhd_fft b/gr-uhd/apps/uhd_fft index bb557e96f0..aa10cdf900 100755 --- a/gr-uhd/apps/uhd_fft +++ b/gr-uhd/apps/uhd_fft @@ -1,6 +1,6 @@ #!/usr/bin/env python2 # -# Copyright 2015 Free Software Foundation, Inc. +# Copyright 2015-2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -277,7 +277,37 @@ class uhd_fft(gr.top_block, Qt.QWidget, UHDApp): _freeze_scope_thread = threading.Thread(target=lambda: _freeze_scaling(self.qtgui_time_sink_x_0, 2.0)) _freeze_scope_thread.daemon = True _freeze_scope_thread.start() - + if args.phase_relations and len(self.channels) > 1: + self.display_widget_phase = Qt.QWidget() + self.display_layout_phase = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom, self.display_widget_phase) + self.display_grid_layout_phase = Qt.QGridLayout() + self.display_layout_phase.addLayout(self.display_grid_layout_phase) + self.display.addTab(self.display_widget_phase, "Rel. Phase") + self.qtgui_phase_plot = qtgui.time_sink_f( + 1024, #size + self.samp_rate, #samp_rate + "", #name + len(self.channels) - 1 + ) + self.qtgui_phase_plot.set_update_time(self.update_rate) + self.qtgui_phase_plot.set_y_axis(-3.5, 3.5) + self.qtgui_phase_plot.set_y_label("Relative Phase", "") + self.qtgui_phase_plot.enable_tags(-1, True) + self.qtgui_phase_plot.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") + self.qtgui_phase_plot.enable_autoscale(False) + self.qtgui_phase_plot.enable_grid(True) + self.qtgui_phase_plot.enable_control_panel(True) + self.qtgui_phase_plot.disable_legend() + for i in xrange(len(self.channels) - 1): + self.qtgui_phase_plot.set_line_label(i, "Phase Delta Channels {0}/{1}".format(i, i+1)) + self.qtgui_phase_plot.set_line_width(i, widths[i]) + self.qtgui_phase_plot.set_line_color(i, colors[i]) + self.qtgui_phase_plot.set_line_style(i, styles[i]) + self.qtgui_phase_plot.set_line_marker(i, markers[i]) + self.qtgui_phase_plot.set_line_alpha(i, alphas[i]) + self._qtgui_phase_plot_win = sip.wrapinstance(self.qtgui_phase_plot.pyqwidget(), Qt.QWidget) + self.display_grid_layout_phase.addWidget(self._qtgui_phase_plot_win, 0,0,1,4) + ### Other widgets ################################################### self._lo_locked_probe_tool_bar = Qt.QToolBar(self) self._lo_locked_probe_formatter = lambda x: {True: 'Yes', False: 'No'}[x] if self.has_lo_sensor: @@ -317,10 +347,24 @@ class uhd_fft(gr.top_block, Qt.QWidget, UHDApp): ################################################## self.msg_connect((self.qtgui_freq_sink_x_0, 'freq'), (self.qtgui_freq_sink_x_0, 'freq')) self.msg_connect((self.qtgui_freq_sink_x_0, 'freq'), (self.usrp, 'command')) - for c in self.channels: - self.connect((self.usrp, c), (self.qtgui_freq_sink_x_0, c)) - self.connect((self.usrp, c), (self.qtgui_time_sink_x_0, c)) - self.connect((self.usrp, c), (self.qtgui_waterfall_sink_x_0, c)) + for c, idx in enumerate(self.channels): + self.connect((self.usrp, c), (self.qtgui_freq_sink_x_0, idx)) + self.connect((self.usrp, c), (self.qtgui_time_sink_x_0, idx)) + self.connect((self.usrp, c), (self.qtgui_waterfall_sink_x_0, idx)) + if args.phase_relations and len(self.channels) > 1: + for c, idx in enumerate(self.channels[:-1]): + self.connect_phase_plot( + (self.usrp, c), + (self.usrp, self.channels[idx+1]), + (self.qtgui_phase_plot, idx) + ) + + def connect_phase_plot(self, src_port1, src_port2, dst_port): + " Calculate relative phase between two src ports and send it dst_port " + from gnuradio import blocks + multiplier = blocks.multiply_cc() + self.connect(src_port1, (multiplier, 0), blocks.complex_to_arg(), dst_port) + self.connect(src_port2, blocks.conjugate_cc(), (multiplier, 1)) def closeEvent(self, event): self.settings = Qt.QSettings("GNU Radio", "uhd_fft") @@ -417,6 +461,8 @@ def setup_argparser(): help="Specify FFT average alpha (overrides --fft-average)") group.add_argument("--update-rate", dest="update_rate", type=eng_arg.eng_float, default=eng_notation.num_to_str(.1), help="Set GUI widget update rate") + group.add_argument("--phase-relations", action="store_true", + help="Plot relative phases between multiple channels") return parser diff --git a/gr-uhd/apps/uhd_siggen_base.py b/gr-uhd/apps/uhd_siggen_base.py index 31415dac41..cc699dd145 100644 --- a/gr-uhd/apps/uhd_siggen_base.py +++ b/gr-uhd/apps/uhd_siggen_base.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # # Copyright 2008,2009,2011,2012,2015 Free Software Foundation, Inc. # @@ -23,6 +23,17 @@ Provide a base flow graph for USRP signal generators. """ +from __future__ import print_function +import math +try: + from uhd_app import UHDApp +except ImportError: + from gnuradio.uhd.uhd_app import UHDApp +from gnuradio import gr, uhd, eng_notation, eng_arg +from gnuradio import analog +from gnuradio import blocks +from gnuradio.gr.pubsub import pubsub + DESC_KEY = 'desc' SAMP_RATE_KEY = 'samp_rate' LINK_RATE_KEY = 'link_rate' @@ -39,26 +50,9 @@ FREQ_RANGE_KEY = 'freq_range' GAIN_RANGE_KEY = 'gain_range' TYPE_KEY = 'type' -# FIXME figure out if this can be deleted -#def setter(ps, key, val): ps[key] = val - -import sys -import math -import argparse -try: - from uhd_app import UHDApp -except ImportError: - from gnuradio.uhd.uhd_app import UHDApp -from gnuradio import gr, gru, uhd, eng_notation, eng_arg -from gnuradio import analog -from gnuradio import blocks -from gnuradio.gr.pubsub import pubsub -from gnuradio.eng_option import eng_option -from optparse import OptionParser - n2s = eng_notation.num_to_str -waveforms = { +WAVEFORMS = { analog.GR_CONST_WAVE : "Constant", analog.GR_SIN_WAVE : "Complex Sinusoid", analog.GR_GAUSSIAN : "Gaussian Noise", @@ -78,6 +72,11 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): UHDApp.__init__(self, args=args, prefix="UHD-SIGGEN") self.extra_sink = None + # Allocate some attributes + self._src1 = None + self._src2 = None + self._src = None + # Initialize device: self.setup_usrp( ctor=uhd.usrp_sink, @@ -121,13 +120,13 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): self[key] = self[key] self[TYPE_KEY] = args.type #set type last - def set_samp_rate(self, sr): + def set_samp_rate(self, samp_rate): """ When sampling rate is updated, also update the signal sources. """ - self.vprint("Setting sampling rate to: {rate} Msps".format(rate=sr/1e6)) - self.usrp.set_samp_rate(sr) - sr = self.usrp.get_samp_rate() + self.vprint("Setting sampling rate to: {rate} Msps".format(rate=samp_rate/1e6)) + self.usrp.set_samp_rate(samp_rate) + samp_rate = self.usrp.get_samp_rate() if self[TYPE_KEY] in (analog.GR_SIN_WAVE, analog.GR_CONST_WAVE): self._src.set_sampling_freq(self[SAMP_RATE_KEY]) elif self[TYPE_KEY] == "2tone": @@ -138,10 +137,11 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): self._src2.set_sampling_freq(self[WAVEFORM_FREQ_KEY]*2*math.pi/self[SAMP_RATE_KEY]) else: return True # Waveform not yet set - self.vprint("Set sample rate to: {rate} Msps".format(rate=sr/1e6)) + self.vprint("Set sample rate to: {rate} Msps".format(rate=samp_rate/1e6)) return True def set_waveform_freq(self, freq): + " Change the frequency 1 of the generated waveform " if self[TYPE_KEY] == analog.GR_SIN_WAVE: self._src.set_frequency(freq) elif self[TYPE_KEY] == "2tone": @@ -152,6 +152,10 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): return True def set_waveform2_freq(self, freq): + """ + Change the frequency 2 of the generated waveform. This only + applies to 2-tone and sweep. + """ if freq is None: self[WAVEFORM2_FREQ_KEY] = -self[WAVEFORM_FREQ_KEY] return @@ -161,19 +165,22 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): self._src1.set_frequency(freq) return True - def set_waveform(self, type): + def set_waveform(self, waveform_type): + """ + Select the generated waveform + """ self.vprint("Selecting waveform...") self.lock() self.disconnect_all() - if type == analog.GR_SIN_WAVE or type == analog.GR_CONST_WAVE: + if waveform_type == analog.GR_SIN_WAVE or waveform_type == analog.GR_CONST_WAVE: self._src = analog.sig_source_c(self[SAMP_RATE_KEY], # Sample rate - type, # Waveform type + waveform_type, # Waveform waveform_type self[WAVEFORM_FREQ_KEY], # Waveform frequency self[AMPLITUDE_KEY], # Waveform amplitude self[WAVEFORM_OFFSET_KEY]) # Waveform offset - elif type == analog.GR_GAUSSIAN or type == analog.GR_UNIFORM: - self._src = analog.noise_source_c(type, self[AMPLITUDE_KEY]) - elif type == "2tone": + elif waveform_type == analog.GR_GAUSSIAN or waveform_type == analog.GR_UNIFORM: + self._src = analog.noise_source_c(waveform_type, self[AMPLITUDE_KEY]) + elif waveform_type == "2tone": self._src1 = analog.sig_source_c(self[SAMP_RATE_KEY], analog.GR_SIN_WAVE, self[WAVEFORM_FREQ_KEY], @@ -187,9 +194,9 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): self[AMPLITUDE_KEY]/2.0, 0) self._src = blocks.add_cc() - self.connect(self._src1,(self._src,0)) - self.connect(self._src2,(self._src,1)) - elif type == "sweep": + self.connect(self._src1, (self._src, 0)) + self.connect(self._src2, (self._src, 1)) + elif waveform_type == "sweep": # rf freq is center frequency # waveform_freq is total swept width # waveform2_freq is sweep rate @@ -205,21 +212,21 @@ class USRPSiggen(gr.top_block, pubsub, UHDApp): self._src = blocks.multiply_const_cc(self[AMPLITUDE_KEY]) self.connect(self._src1, self._src2, self._src) else: - raise RuntimeError("[UHD-SIGGEN] Unknown waveform type") - for c in xrange(len(self.channels)): - self.connect(self._src, (self.usrp, c)) + raise RuntimeError("[UHD-SIGGEN] Unknown waveform waveform_type") + for chan in xrange(len(self.channels)): + self.connect(self._src, (self.usrp, chan)) if self.extra_sink is not None: self.connect(self._src, self.extra_sink) self.unlock() - self.vprint("Set baseband modulation to:", waveforms[type]) - if type == analog.GR_SIN_WAVE: + self.vprint("Set baseband modulation to:", WAVEFORMS[waveform_type]) + if waveform_type == analog.GR_SIN_WAVE: self.vprint("Modulation frequency: %sHz" % (n2s(self[WAVEFORM_FREQ_KEY]),)) self.vprint("Initial phase:", self[WAVEFORM_OFFSET_KEY]) - elif type == "2tone": + elif waveform_type == "2tone": self.vprint("Tone 1: %sHz" % (n2s(self[WAVEFORM_FREQ_KEY]),)) self.vprint("Tone 2: %sHz" % (n2s(self[WAVEFORM2_FREQ_KEY]),)) - elif type == "sweep": - self.vprint("Sweeping across %sHz to %sHz" % (n2s(-self[WAVEFORM_FREQ_KEY]/2.0),n2s(self[WAVEFORM_FREQ_KEY]/2.0))) + elif waveform_type == "sweep": + self.vprint("Sweeping across %sHz to %sHz" % (n2s(-self[WAVEFORM_FREQ_KEY]/2.0), n2s(self[WAVEFORM_FREQ_KEY]/2.0))) self.vprint("Sweep rate: %sHz" % (n2s(self[WAVEFORM2_FREQ_KEY]),)) self.vprint("TX amplitude:", self[AMPLITUDE_KEY]) @@ -274,6 +281,7 @@ def setup_argparser(): return parser def main(): + " Go, go, go! " if gr.enable_realtime_scheduling() != gr.RT_OK: print("Note: failed to enable realtime scheduling, continuing") # Grab command line args and create top block @@ -281,8 +289,8 @@ def main(): parser = setup_argparser() args = parser.parse_args() tb = USRPSiggen(args) - except RuntimeError as e: - print(e) + except RuntimeError as ex: + print(ex) exit(1) tb.start() raw_input('[UHD-SIGGEN] Press Enter to quit:\n') diff --git a/gr-uhd/apps/uhd_siggen_gui b/gr-uhd/apps/uhd_siggen_gui index 4b70922757..9a57aa65ae 100755 --- a/gr-uhd/apps/uhd_siggen_gui +++ b/gr-uhd/apps/uhd_siggen_gui @@ -1,6 +1,6 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python # -# Copyright 2015 Free Software Foundation, Inc. +# Copyright 2015-2016 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -32,13 +32,14 @@ Signal Generator App # Generated: Sun Jun 28 17:21:28 2015 ################################################## +from __future__ import print_function import sip import sys import threading import time from distutils.version import StrictVersion from PyQt4 import Qt -from PyQt4.QtCore import QObject, pyqtSlot +from PyQt4.QtCore import pyqtSlot from gnuradio import analog from gnuradio import eng_notation from gnuradio import gr @@ -69,9 +70,9 @@ class uhd_siggen_gui(Qt.QWidget): Qt.QWidget.__init__(self) self.setWindowTitle("UHD Signal Generator") try: - self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) + self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: - pass + pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() @@ -90,8 +91,8 @@ class uhd_siggen_gui(Qt.QWidget): # Widgets + Controls ################################################## ### Waveform Selector - self._waveform_options = uhd_siggen.waveforms.keys() - self._waveform_labels = uhd_siggen.waveforms.values() + self._waveform_options = uhd_siggen.WAVEFORMS.keys() + self._waveform_labels = uhd_siggen.WAVEFORMS.values() self._waveform_group_box = Qt.QGroupBox("Waveform") self._waveform_box = Qt.QHBoxLayout() class variable_chooser_button_group(Qt.QButtonGroup): @@ -259,11 +260,12 @@ class uhd_siggen_gui(Qt.QWidget): self._lo_locked_probe_0_tool_bar.addWidget(self._lo_locked_probe_0_label) self.top_grid_layout.addWidget(self._lo_locked_probe_0_tool_bar, 8,0,1,1) def _chan0_lo_locked_probe(): + " Monitor lock status of LO on channel 0 " while True: - val = all([self.usrp.get_sensor('lo_locked', c).to_bool() for c in range(len(self._sg.channels))]) try: + val = all([self.usrp.get_sensor('lo_locked', c).to_bool() for c in range(len(self._sg.channels))]) self.set_chan0_lo_locked(val) - except AttributeError: + except: pass time.sleep(.1) _chan0_lo_locked_thread = threading.Thread(target=_chan0_lo_locked_probe) @@ -366,8 +368,8 @@ class uhd_siggen_gui(Qt.QWidget): self.freq_fine + self.freq_coarse, self.lo_offset ) - for idx, c in enumerate(self._sg.channels): - tune_res = self.usrp.set_center_freq(tune_req, c) + for idx, chan in enumerate(self._sg.channels): + tune_res = self.usrp.set_center_freq(tune_req, chan) if idx == 0: self.set_label_dsp_freq(tune_res.actual_dsp_freq) self.set_label_rf_freq(tune_res.actual_rf_freq) @@ -446,7 +448,7 @@ def main(): """ Go, go, go! """ parser = setup_parser() args = parser.parse_args() - if(StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0")): + if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): Qt.QApplication.setGraphicsSystem(gr.prefs().get_string('qtgui', 'style', 'raster')) qapp = Qt.QApplication(sys.argv) siggen_gui = uhd_siggen_gui(args) @@ -457,14 +459,17 @@ def main(): qapp.exec_() siggen_gui = None #to clean up Qt widgets -if __name__ == '__main__': +def x11_init_threads(): + " If on X11, init threads " import ctypes - import sys if sys.platform.startswith('linux'): try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print("Warning: failed to XInitThreads()") + +if __name__ == '__main__': + x11_init_threads() main() diff --git a/gr-uhd/lib/CMakeLists.txt b/gr-uhd/lib/CMakeLists.txt index b30a0d6b07..be77e22556 100644 --- a/gr-uhd/lib/CMakeLists.txt +++ b/gr-uhd/lib/CMakeLists.txt @@ -21,10 +21,10 @@ # Setup the include and linker paths ######################################################################## include_directories( - ${UHD_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${GR_UHD_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} + ${UHD_INCLUDE_DIRS} ${LOG4CXX_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ) diff --git a/gr-uhd/lib/usrp_source_impl.cc b/gr-uhd/lib/usrp_source_impl.cc index f0450a604d..b48b15165d 100644 --- a/gr-uhd/lib/usrp_source_impl.cc +++ b/gr-uhd/lib/usrp_source_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2010-2015 Free Software Foundation, Inc. + * Copyright 2010-2016 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -70,6 +70,7 @@ namespace gr { io_signature::make(0, 0, 0), args_to_io_sig(stream_args)), usrp_block_impl(device_addr, stream_args, ""), + _recv_timeout(0.1), // seconds _tag_now(false), _issue_stream_cmd_on_start(issue_stream_cmd_on_start) { @@ -480,6 +481,7 @@ namespace gr { { _dev->issue_stream_cmd(cmd, _stream_args.channels[i]); } + _tag_now = true; } bool @@ -612,15 +614,13 @@ namespace gr { //In order to allow for low-latency: //We receive all available packets without timeout. //This call can timeout under regular operation... - size_t num_samps = _rx_stream->recv - (output_items, noutput_items, _metadata, 0.0); - - //If receive resulted in a timeout condition: - //We now receive a single packet with a large timeout. - if(_metadata.error_code == ::uhd::rx_metadata_t::ERROR_CODE_TIMEOUT) { - num_samps = _rx_stream->recv - (output_items, noutput_items, _metadata, 0.1, true/*one pkt*/); - } + size_t num_samps = _rx_stream->recv( + output_items, + noutput_items, + _metadata, + _recv_timeout, + true /* one packet -> minimize latency */ + ); #else size_t num_samps = _dev->get_device()->recv (output_items, noutput_items, _metadata, diff --git a/gr-uhd/lib/usrp_source_impl.h b/gr-uhd/lib/usrp_source_impl.h index f6225a7e35..ab0f5c62c4 100644 --- a/gr-uhd/lib/usrp_source_impl.h +++ b/gr-uhd/lib/usrp_source_impl.h @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2010-2013 Free Software Foundation, Inc. + * Copyright 2010-2016 Software Foundation, Inc. * * This file is part of GNU Radio * @@ -126,6 +126,7 @@ namespace gr { #ifdef GR_UHD_USE_STREAM_API ::uhd::rx_streamer::sptr _rx_stream; size_t _samps_per_packet; + double _recv_timeout; #endif bool _tag_now; ::uhd::rx_metadata_t _metadata; diff --git a/gr-uhd/swig/CMakeLists.txt b/gr-uhd/swig/CMakeLists.txt index 163ca8f638..35f753c1fa 100644 --- a/gr-uhd/swig/CMakeLists.txt +++ b/gr-uhd/swig/CMakeLists.txt @@ -26,9 +26,9 @@ include(GrSwig) set(GR_SWIG_FLAGS -DGR_HAVE_UHD) #needed to parse uhd_swig.i set(GR_SWIG_INCLUDE_DIRS - ${UHD_INCLUDE_DIRS} ${GR_UHD_INCLUDE_DIRS} ${GNURADIO_RUNTIME_SWIG_INCLUDE_DIRS} + ${UHD_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ) diff --git a/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py index 0132ab86fd..78e8153768 100644 --- a/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py +++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/doxyxml/doxyindex.py @@ -43,13 +43,16 @@ class DoxyIndex(Base): self._root = index.parse(os.path.join(self._xml_path, 'index.xml')) for mem in self._root.compound: converted = self.convert_mem(mem) - # For files we want the contents to be accessible directly - # from the parent rather than having to go through the file - # object. + # For files and namespaces we want the contents to be + # accessible directly from the parent rather than having + # to go through the file object. if self.get_cls(mem) == DoxyFile: if mem.name.endswith('.h'): self._members += converted.members() self._members.append(converted) + elif self.get_cls(mem) == DoxyNamespace: + self._members += converted.members() + self._members.append(converted) else: self._members.append(converted) @@ -80,13 +83,29 @@ class DoxyCompMem(Base): self._data['brief_description'] = bd self._data['detailed_description'] = dd + def set_parameters(self, data): + vs = [ddc.value for ddc in data.detaileddescription.content_] + pls = [] + for v in vs: + if hasattr(v, 'parameterlist'): + pls += v.parameterlist + pis = [] + for pl in pls: + pis += pl.parameteritem + dpis = [] + for pi in pis: + dpi = DoxyParameterItem(pi) + dpi._parse() + dpis.append(dpi) + self._data['params'] = dpis + + class DoxyCompound(DoxyCompMem): pass class DoxyMember(DoxyCompMem): pass - class DoxyFunction(DoxyMember): __module__ = "gnuradio.utils.doxyxml" @@ -98,10 +117,13 @@ class DoxyFunction(DoxyMember): return super(DoxyFunction, self)._parse() self.set_descriptions(self._parse_data) - self._data['params'] = [] - prms = self._parse_data.param - for prm in prms: - self._data['params'].append(DoxyParam(prm)) + self.set_parameters(self._parse_data) + if not self._data['params']: + # If the params weren't set by a comment then just grab the names. + self._data['params'] = [] + prms = self._parse_data.param + for prm in prms: + self._data['params'].append(DoxyParam(prm)) brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) @@ -121,9 +143,39 @@ class DoxyParam(DoxyMember): self.set_descriptions(self._parse_data) self._data['declname'] = self._parse_data.declname + @property + def description(self): + descriptions = [] + if self.brief_description: + descriptions.append(self.brief_description) + if self.detailed_description: + descriptions.append(self.detailed_description) + return '\n\n'.join(descriptions) + brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) - declname = property(lambda self: self.data()['declname']) + name = property(lambda self: self.data()['declname']) + +class DoxyParameterItem(DoxyMember): + """A different representation of a parameter in Doxygen.""" + + def _parse(self): + if self._parsed: + return + super(DoxyParameterItem, self)._parse() + names = [] + for nl in self._parse_data.parameternamelist: + for pn in nl.parametername: + names.append(description(pn)) + # Just take first name + self._data['name'] = names[0] + # Get description + pd = description(self._parse_data.get_parameterdescription()) + self._data['description'] = pd + + description = property(lambda self: self.data()['description']) + name = property(lambda self: self.data()['name']) + class DoxyClass(DoxyCompound): @@ -139,12 +191,14 @@ class DoxyClass(DoxyCompound): if self._error: return self.set_descriptions(self._retrieved_data.compounddef) + self.set_parameters(self._retrieved_data.compounddef) # Sectiondef.kind tells about whether private or public. # We just ignore this for now. self.process_memberdefs() brief_description = property(lambda self: self.data()['brief_description']) detailed_description = property(lambda self: self.data()['detailed_description']) + params = property(lambda self: self.data()['params']) Base.mem_classes.append(DoxyClass) @@ -177,6 +231,16 @@ class DoxyNamespace(DoxyCompound): kind = 'namespace' + def _parse(self): + if self._parsed: + return + super(DoxyNamespace, self)._parse() + self.retrieve_data() + self.set_descriptions(self._retrieved_data.compounddef) + if self._error: + return + self.process_memberdefs() + Base.mem_classes.append(DoxyNamespace) @@ -227,11 +291,11 @@ class DoxyOther(Base): __module__ = "gnuradio.utils.doxyxml" - kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page']) + kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', + 'dir', 'page', 'signal', 'slot', 'property']) @classmethod def can_parse(cls, obj): return obj.kind in cls.kinds Base.mem_classes.append(DoxyOther) - diff --git a/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py b/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py index 4e1ce2e475..d3536db8d0 100644 --- a/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py +++ b/gr-utils/python/modtool/gr-newmod/docs/doxygen/swig_doc.py @@ -1,5 +1,5 @@ # -# Copyright 2010,2011 Free Software Foundation, Inc. +# Copyright 2010-2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -27,13 +27,10 @@ python docstrings. """ -import sys - -try: - from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base -except ImportError: - from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base +import sys, time +from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile +from doxyxml import DoxyOther, base def py_name(name): bits = name.split('_') @@ -56,7 +53,28 @@ class Block(object): # Check for a parsing error. if item.error(): return False - return item.has_member(make_name(item.name()), DoxyFriend) + friendname = make_name(item.name()) + is_a_block = item.has_member(friendname, DoxyFriend) + # But now sometimes the make function isn't a friend so check again. + if not is_a_block: + is_a_block = di.has_member(friendname, DoxyFunction) + return is_a_block + +class Block2(object): + """ + Checks if doxyxml produced objects correspond to a new style + gnuradio block. + """ + + @classmethod + def includes(cls, item): + if not isinstance(item, DoxyClass): + return False + # Check for a parsing error. + if item.error(): + return False + is_a_block2 = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther) + return is_a_block2 def utoascii(text): @@ -83,9 +101,15 @@ def combine_descriptions(obj): description.append(dd) return utoascii('\n\n'.join(description)).strip() +def format_params(parameteritems): + output = ['Args:'] + template = ' {0} : {1}' + for pi in parameteritems: + output.append(template.format(pi.name, pi.description)) + return '\n'.join(output) entry_templ = '%feature("docstring") {name} "{docstring}"' -def make_entry(obj, name=None, templ="{description}", description=None): +def make_entry(obj, name=None, templ="{description}", description=None, params=[]): """ Create a docstring entry for a swig interface file. @@ -102,13 +126,16 @@ def make_entry(obj, name=None, templ="{description}", description=None): return '' if description is None: description = combine_descriptions(obj) + if params: + description += '\n\n' + description += utoascii(format_params(params)) docstring = templ.format(description=description) if not docstring: return '' return entry_templ.format( name=name, docstring=docstring, - ) + ) def make_func_entry(func, name=None, description=None, params=None): @@ -121,27 +148,31 @@ def make_func_entry(func, name=None, description=None, params=None): used as the description instead of extracting it from func. params - a parameter list that overrides using func.params. """ - if params is None: - params = func.params - params = [prm.declname for prm in params] - if params: - sig = "Params: (%s)" % ", ".join(params) - else: - sig = "Params: (NONE)" - templ = "{description}\n\n" + sig - return make_entry(func, name=name, templ=utoascii(templ), - description=description) - - -def make_class_entry(klass, description=None): + #if params is None: + # params = func.params + #params = [prm.declname for prm in params] + #if params: + # sig = "Params: (%s)" % ", ".join(params) + #else: + # sig = "Params: (NONE)" + #templ = "{description}\n\n" + sig + #return make_entry(func, name=name, templ=utoascii(templ), + # description=description) + return make_entry(func, name=name, description=description, params=params) + + +def make_class_entry(klass, description=None, ignored_methods=[], params=None): """ Create a class docstring for a swig interface file. """ + if params is None: + params = klass.params output = [] - output.append(make_entry(klass, description=description)) + output.append(make_entry(klass, description=description, params=params)) for func in klass.in_category(DoxyFunction): - name = klass.name() + '::' + func.name() - output.append(make_func_entry(func, name=name)) + if func.name() not in ignored_methods: + name = klass.name() + '::' + func.name() + output.append(make_func_entry(func, name=name)) return "\n\n".join(output) @@ -175,11 +206,33 @@ def make_block_entry(di, block): # the make function. output = [] output.append(make_class_entry(block, description=super_description)) - creator = block.get_member(block.name(), DoxyFunction) output.append(make_func_entry(make_func, description=super_description, - params=creator.params)) + params=block.params)) return "\n\n".join(output) +def make_block2_entry(di, block): + """ + Create class and function docstrings of a new style gnuradio block for a + swig interface file. + """ + descriptions = [] + # For new style blocks all the relevant documentation should be + # associated with the 'make' method. + class_description = combine_descriptions(block) + make_func = block.get_member('make', DoxyFunction) + make_description = combine_descriptions(make_func) + description = class_description + "\n\nConstructor Specific Documentation:\n\n" + make_description + # Associate the combined description with the class and + # the make function. + output = [] + output.append(make_class_entry( + block, description=description, + ignored_methods=['make'], params=make_func.params)) + makename = block.name() + '::make' + output.append(make_func_entry( + make_func, name=makename, description=description, + params=make_func.params)) + return "\n\n".join(output) def make_swig_interface_file(di, swigdocfilename, custom_output=None): @@ -196,32 +249,52 @@ def make_swig_interface_file(di, swigdocfilename, custom_output=None): # Create docstrings for the blocks. blocks = di.in_category(Block) + blocks2 = di.in_category(Block2) + make_funcs = set([]) for block in blocks: try: make_func = di.get_member(make_name(block.name()), DoxyFunction) - make_funcs.add(make_func.name()) - output.append(make_block_entry(di, block)) + # Don't want to risk writing to output twice. + if make_func.name() not in make_funcs: + make_funcs.add(make_func.name()) + output.append(make_block_entry(di, block)) + except block.ParsingError: + sys.stderr.write('Parsing error for block {0}\n'.format(block.name())) + raise + + for block in blocks2: + try: + make_func = block.get_member('make', DoxyFunction) + make_func_name = block.name() +'::make' + # Don't want to risk writing to output twice. + if make_func_name not in make_funcs: + make_funcs.add(make_func_name) + output.append(make_block2_entry(di, block)) except block.ParsingError: - print('Parsing error for block %s' % block.name()) + sys.stderr.write('Parsing error for block {0}\n'.format(block.name())) + raise # Create docstrings for functions # Don't include the make functions since they have already been dealt with. - funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs] + funcs = [f for f in di.in_category(DoxyFunction) + if f.name() not in make_funcs and not f.name().startswith('std::')] for f in funcs: try: output.append(make_func_entry(f)) except f.ParsingError: - print('Parsing error for function %s' % f.name()) + sys.stderr.write('Parsing error for function {0}\n'.format(f.name())) # Create docstrings for classes block_names = [block.name() for block in blocks] - klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names] + block_names += [block.name() for block in blocks2] + klasses = [k for k in di.in_category(DoxyClass) + if k.name() not in block_names and not k.name().startswith('std::')] for k in klasses: try: output.append(make_class_entry(k)) except k.ParsingError: - print('Parsing error for class %s' % k.name()) + sys.stderr.write('Parsing error for class {0}\n'.format(k.name())) # Docstrings are not created for anything that is not a function or a class. # If this excludes anything important please add it here. diff --git a/grc/core/Config.py b/grc/core/Config.py index ac38d9978c..78ff344998 100644 --- a/grc/core/Config.py +++ b/grc/core/Config.py @@ -20,6 +20,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA import os from os.path import expanduser, normpath, expandvars, exists +from . import Constants + class Config(object): @@ -28,7 +30,7 @@ class Config(object): license = __doc__.strip() website = 'http://gnuradio.org' - hier_block_lib_dir = os.environ.get('GRC_HIER_PATH', expanduser('~/.grc_gnuradio')) + hier_block_lib_dir = os.environ.get('GRC_HIER_PATH', Constants.DEFAULT_HIER_BLOCK_LIB_DIR) def __init__(self, prefs_file, version, version_parts=None): self.prefs = prefs_file @@ -53,3 +55,12 @@ class Config(object): for path in collected_paths if exists(path)] return valid_paths + + @property + def default_flow_graph(self): + user_default = ( + os.environ.get('GRC_DEFAULT_FLOW_GRAPH') or + self.prefs.get_string('grc', 'default_flow_graph', '') or + os.path.join(self.hier_block_lib_dir, 'default_flow_graph.grc') + ) + return user_default if exists(user_default) else Constants.DEFAULT_FLOW_GRAPH diff --git a/grc/core/Constants.py b/grc/core/Constants.py index eeb1d7f848..61a44d0c78 100644 --- a/grc/core/Constants.py +++ b/grc/core/Constants.py @@ -27,6 +27,7 @@ FLOW_GRAPH_DTD = os.path.join(DATA_DIR, 'flow_graph.dtd') BLOCK_TREE_DTD = os.path.join(DATA_DIR, 'block_tree.dtd') BLOCK_DTD = os.path.join(DATA_DIR, 'block.dtd') DEFAULT_FLOW_GRAPH = os.path.join(DATA_DIR, 'default_flow_graph.grc') +DEFAULT_HIER_BLOCK_LIB_DIR = os.path.expanduser('~/.grc_gnuradio') DOMAIN_DTD = os.path.join(DATA_DIR, 'domain.dtd') # File format versions: diff --git a/grc/core/Platform.py b/grc/core/Platform.py index 416e61615f..297e8b0ae5 100644 --- a/grc/core/Platform.py +++ b/grc/core/Platform.py @@ -60,9 +60,6 @@ class Platform(Element): callback_finished=lambda: self.block_docstrings_loaded_callback() ) - self._block_dtd = Constants.BLOCK_DTD - self._default_flow_graph = Constants.DEFAULT_FLOW_GRAPH - # Create a dummy flow graph for the blocks self._flow_graph = Element(self) self._flow_graph.connections = [] @@ -188,7 +185,7 @@ class Platform(Element): def load_block_xml(self, xml_file): """Load block description from xml file""" # Validate and import - ParseXML.validate_dtd(xml_file, self._block_dtd) + ParseXML.validate_dtd(xml_file, Constants.BLOCK_DTD) n = ParseXML.from_file(xml_file).find('block') n['block_wrapper_path'] = xml_file # inject block wrapper path # Get block instance and add it to the list of blocks @@ -291,8 +288,8 @@ class Platform(Element): nested data @throws exception if the validation fails """ - flow_graph_file = flow_graph_file or self._default_flow_graph - open(flow_graph_file, 'r') # Test open + flow_graph_file = flow_graph_file or self.config.default_flow_graph + open(flow_graph_file, 'r').close() # Test open ParseXML.validate_dtd(flow_graph_file, Constants.FLOW_GRAPH_DTD) return ParseXML.from_file(flow_graph_file) diff --git a/grc/core/generator/flow_graph.tmpl b/grc/core/generator/flow_graph.tmpl index 07c4169525..1ef251c46b 100644 --- a/grc/core/generator/flow_graph.tmpl +++ b/grc/core/generator/flow_graph.tmpl @@ -91,6 +91,7 @@ class $(class_name)(grc_wxgui.top_block_gui): self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) #end if #elif $generate_options == 'qt_gui' +from gnuradio import qtgui class $(class_name)(gr.top_block, Qt.QWidget): @@ -99,6 +100,7 @@ class $(class_name)(gr.top_block, Qt.QWidget): gr.top_block.__init__(self, "$title") Qt.QWidget.__init__(self) self.setWindowTitle("$title") + qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: diff --git a/grc/grc.conf.in b/grc/grc.conf.in index 71c4f63bca..1dbb13bfaa 100644 --- a/grc/grc.conf.in +++ b/grc/grc.conf.in @@ -5,6 +5,7 @@ [grc] global_blocks_path = @blocksdir@ local_blocks_path = +default_flow_graph = xterm_executable = @GRC_XTERM_EXE@ canvas_font_size = 8 canvas_default_size = 1280, 1024 |