diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2017-07-20 10:56:58 -0700 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2017-07-20 10:56:58 -0700 |
commit | a6ed53ecd93cd6b1e0b4fdd627615e4e24697d04 (patch) | |
tree | 64a98c024cff4dd3f907342d49471a14be6938e0 | |
parent | c5e16c83cc15e34551af438b6b0dc7cf4d0bed70 (diff) | |
parent | 3b3a403e8871bdb83f8cd9bdc904626de14a7cca (diff) |
Merge branch 'master' into next
Conflicts:
gr-fcd/lib/CMakeLists.txt
-rw-r--r-- | gr-blocks/lib/file_source_impl.cc | 10 | ||||
-rw-r--r-- | gr-digital/lib/interpolating_resampler.cc | 28 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc | 13 | ||||
-rw-r--r-- | gr-fec/grc/variable_polar_code_configurator.xml | 14 |
4 files changed, 36 insertions, 29 deletions
diff --git a/gr-blocks/lib/file_source_impl.cc b/gr-blocks/lib/file_source_impl.cc index 9dfd30c016..c077c74fd9 100644 --- a/gr-blocks/lib/file_source_impl.cc +++ b/gr-blocks/lib/file_source_impl.cc @@ -115,6 +115,16 @@ namespace gr { throw std::runtime_error("can't open file"); } + //Check to ensure the file will be consumed according to item size + fseek(d_new_fp, 0, SEEK_END); + int file_size = ftell(d_new_fp); + rewind (d_new_fp); + + //Warn the user if part of the file will not be consumed. + if(file_size % d_itemsize){ + GR_LOG_WARN(d_logger, "WARNING: File will not be fully consumed with the current output type"); + } + d_updated = true; d_repeat = repeat; } diff --git a/gr-digital/lib/interpolating_resampler.cc b/gr-digital/lib/interpolating_resampler.cc index 3ec27b05de..7cda29d073 100644 --- a/gr-digital/lib/interpolating_resampler.cc +++ b/gr-digital/lib/interpolating_resampler.cc @@ -291,11 +291,8 @@ namespace gr { // N.B. We create an extra final row for an offset of 1.0, because it's // easier than dealing with wrap around from 0.99... to 0.0 shifted // by 1 tap. - d_filters = std::vector<filter::kernel::fir_filter_ccf*>(d_nfilters + 1, - NULL); - d_diff_filters = std::vector<filter::kernel::fir_filter_ccf*>( - d_nfilters + 1, - NULL); + d_filters = std::vector<filter::kernel::fir_filter_ccf*>(d_nfilters + 1); + d_diff_filters = std::vector<filter::kernel::fir_filter_ccf*>(d_nfilters + 1); std::vector<float> t(NTAPS, 0); int incr = NSTEPS/d_nfilters; @@ -388,11 +385,8 @@ namespace gr { // N.B. We create an extra final row for an offset of 1.0, because it's // easier than dealing with wrap around from 0.99... to 0.0 shifted // by 1 tap. - d_filters = std::vector<filter::kernel::fir_filter_fff*>(d_nfilters + 1, - NULL); - d_diff_filters = std::vector<filter::kernel::fir_filter_fff*>( - d_nfilters + 1, - NULL); + d_filters = std::vector<filter::kernel::fir_filter_fff*>(d_nfilters + 1); + d_diff_filters = std::vector<filter::kernel::fir_filter_fff*>(d_nfilters + 1); std::vector<float> t(NTAPS, 0); int incr = NSTEPS/d_nfilters; @@ -541,11 +535,8 @@ namespace gr { // N.B. We create an extra final row for an offset of 1.0, because it's // easier than dealing with wrap around from 0.99... to 0.0 shifted // by 1 tap. - d_filters = std::vector<filter::kernel::fir_filter_ccf*>(d_nfilters + 1, - NULL); - d_diff_filters = std::vector<filter::kernel::fir_filter_ccf*>( - d_nfilters + 1, - NULL); + d_filters = std::vector<filter::kernel::fir_filter_ccf*>(d_nfilters + 1); + d_diff_filters = std::vector<filter::kernel::fir_filter_ccf*>(d_nfilters + 1); m = taps.size(); n = diff_taps.size(); @@ -709,11 +700,8 @@ namespace gr { // N.B. We create an extra final row for an offset of 1.0, because it's // easier than dealing with wrap around from 0.99... to 0.0 shifted // by 1 tap. - d_filters = std::vector<filter::kernel::fir_filter_fff*>(d_nfilters + 1, - NULL); - d_diff_filters = std::vector<filter::kernel::fir_filter_fff*>( - d_nfilters + 1, - NULL); + d_filters = std::vector<filter::kernel::fir_filter_fff*>(d_nfilters + 1); + d_diff_filters = std::vector<filter::kernel::fir_filter_fff*>(d_nfilters + 1); m = taps.size(); n = diff_taps.size(); 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 663301d614..9092321462 100644 --- a/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc +++ b/gr-dtv/lib/dvbt/dvbt_reed_solomon_enc_impl.cc @@ -25,8 +25,6 @@ #include <gnuradio/io_signature.h> #include "dvbt_reed_solomon_enc_impl.h" -#define MPEG_TS_PKT_LENGTH 188 - namespace gr { namespace dtv { @@ -55,7 +53,8 @@ namespace gr { 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)); + // The full input frame size (d_k) (no need to add in d_s, as the block input is the pre-shortedned K) + d_data = (unsigned char *) malloc(sizeof(unsigned char) * (d_k)); if (d_data == NULL) { GR_LOG_FATAL(d_logger, "Reed-Solomon Encoder, cannot allocate memory for d_data."); free_rs_char(d_rs); @@ -83,11 +82,13 @@ namespace gr { { // 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); + // This is the number of data bytes we need from the input stream. + int shortened_k = d_k-d_s; + std::memcpy(&d_data[d_s], in, shortened_k); // 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]); + std::memcpy(out, in, shortened_k); + encode_rs_char(d_rs, d_data, &out[shortened_k]); } int diff --git a/gr-fec/grc/variable_polar_code_configurator.xml b/gr-fec/grc/variable_polar_code_configurator.xml index 24004b8a03..ee145b16f7 100644 --- a/gr-fec/grc/variable_polar_code_configurator.xml +++ b/gr-fec/grc/variable_polar_code_configurator.xml @@ -25,12 +25,14 @@ <param> <name>Block size (N)</name> <key>block_size</key> + <value>32</value> <type>int</type> </param> <param> - <name>#Info Bits (K)</name> + <name>Info Bits (K)</name> <key>num_info_bits</key> + <value>16</value> <type>int</type> </param> @@ -46,6 +48,12 @@ <key>mu</key> <value>16</value> <type>int</type> - <hide>#if 'BEC' in $getVar('channel') then 'all' else 'none' #</hide> </param> -</block>
\ No newline at end of file + <doc>This block serves as an interface to the underlying Python functions for channel construction. + + Current channel types are: BEC/AWGN + Block size must be a power of 2! + Info Bits must be 0 smaller K smaller N + Design SNR does affect the target transmission SNR and thus performance. + The parameter mu is only relevant for AWGN channels. It is passed on to the corresponding Channel construction algorithm.</doc> +</block> |