diff options
Diffstat (limited to 'gr-digital/lib/ofdm_serializer_vcc_impl.cc')
-rw-r--r-- | gr-digital/lib/ofdm_serializer_vcc_impl.cc | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/gr-digital/lib/ofdm_serializer_vcc_impl.cc b/gr-digital/lib/ofdm_serializer_vcc_impl.cc index 09c0039a1c..261111f22a 100644 --- a/gr-digital/lib/ofdm_serializer_vcc_impl.cc +++ b/gr-digital/lib/ofdm_serializer_vcc_impl.cc @@ -23,7 +23,7 @@ #include "config.h" #endif -#include <gr_io_signature.h> +#include <gnuradio/io_signature.h> #include "ofdm_serializer_vcc_impl.h" namespace gr { @@ -36,6 +36,7 @@ namespace gr { const std::string &len_tag_key, const std::string &packet_len_tag_key, int symbols_skipped, + const std::string &carr_offset_key, bool input_is_shifted ) { @@ -43,7 +44,9 @@ namespace gr { new ofdm_serializer_vcc_impl( fft_len, occupied_carriers, len_tag_key, packet_len_tag_key, - symbols_skipped, input_is_shifted + symbols_skipped, + carr_offset_key, + input_is_shifted ) ); } @@ -53,6 +56,7 @@ namespace gr { const gr::digital::ofdm_carrier_allocator_cvc::sptr &allocator, const std::string &packet_len_tag_key, int symbols_skipped, + const std::string &carr_offset_key, bool input_is_shifted ) { @@ -63,7 +67,8 @@ namespace gr { allocator->len_tag_key(), packet_len_tag_key, symbols_skipped, - input_is_shifted + carr_offset_key, + !input_is_shifted ) ); } @@ -74,30 +79,36 @@ namespace gr { const std::string &len_tag_key, const std::string &packet_len_tag_key, int symbols_skipped, + const std::string &carr_offset_key, bool input_is_shifted) - : gr_tagged_stream_block ("ofdm_serializer_vcc", - gr_make_io_signature(1, 1, sizeof (gr_complex) * fft_len), - gr_make_io_signature(1, 1, sizeof (gr_complex)), + : tagged_stream_block ("ofdm_serializer_vcc", + io_signature::make(1, 1, sizeof (gr_complex) * fft_len), + io_signature::make(1, 1, sizeof (gr_complex)), len_tag_key), d_fft_len(fft_len), d_occupied_carriers(occupied_carriers), d_packet_len_tag_key(pmt::string_to_symbol(packet_len_tag_key)), d_out_len_tag_key(pmt::string_to_symbol((packet_len_tag_key.empty() ? len_tag_key : packet_len_tag_key))), d_symbols_skipped(symbols_skipped % occupied_carriers.size()), + d_carr_offset_key(pmt::string_to_symbol(carr_offset_key)), d_curr_set(symbols_skipped % occupied_carriers.size()), d_symbols_per_set(0) { for (unsigned i = 0; i < d_occupied_carriers.size(); i++) { for (unsigned k = 0; k < d_occupied_carriers[i].size(); k++) { - if (d_occupied_carriers[i][k] < 0) { - d_occupied_carriers[i][k] += fft_len; + if (input_is_shifted) { + d_occupied_carriers[i][k] += fft_len/2; + if (d_occupied_carriers[i][k] > fft_len) { + d_occupied_carriers[i][k] -= fft_len; + } + } else { + if (d_occupied_carriers[i][k] < 0) { + d_occupied_carriers[i][k] += fft_len; + } } if (d_occupied_carriers[i][k] >= fft_len || d_occupied_carriers[i][k] < 0) { throw std::invalid_argument("ofdm_serializer_vcc: trying to occupy a carrier outside the fft length."); } - if (input_is_shifted) { - d_occupied_carriers[i][k] = (d_occupied_carriers[i][k] + fft_len) % fft_len; - } } } @@ -143,12 +154,12 @@ namespace gr { long packet_length = 0; // Output frame int carr_offset = 0; - std::vector<gr_tag_t> tags; + std::vector<tag_t> tags; // Packet mode if (!d_length_tag_key_str.empty()) { get_tags_in_range(tags, 0, nitems_read(0), nitems_read(0)+1); for (unsigned i = 0; i < tags.size(); i++) { - if (pmt::symbol_to_string(tags[i].key) == "ofdm_sync_carr_offset") { + if (tags[i].key == d_carr_offset_key) { carr_offset = pmt::to_long(tags[i].value); } if (tags[i].key == d_packet_len_tag_key) { @@ -176,8 +187,8 @@ namespace gr { ); for (unsigned t = 0; t < tags.size(); t++) { add_item_tag(0, nitems_written(0)+n_out_symbols, - tags[i].key, - tags[i].value + tags[t].key, + tags[t].value ); } for (unsigned k = 0; k < d_occupied_carriers[d_curr_set].size(); k++) { |