Thomas Kolb
85ce667d7b
This adds 4 pilot symbols each after 128 and 256 data symbols. These are used for precision frequency estimation and feed-forward correction, resulting in less decoder errors at the end of the packet. Due to this change, this system can no longer transmit packets shorter than 64 bytes!
66 lines
2.1 KiB
C++
66 lines
2.1 KiB
C++
/* -*- c++ -*- */
|
|
/*
|
|
* Copyright 2019 Thomas Kolb.
|
|
*
|
|
* 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_HAMNET70_CORRECT_FREQUENCY_FROM_PILOT_SYMS_IMPL_H
|
|
#define INCLUDED_HAMNET70_CORRECT_FREQUENCY_FROM_PILOT_SYMS_IMPL_H
|
|
|
|
#include <hamnet70/correct_frequency_from_pilot_syms.h>
|
|
|
|
#include <map>
|
|
|
|
namespace gr {
|
|
namespace hamnet70 {
|
|
|
|
class correct_frequency_from_pilot_syms_impl : public correct_frequency_from_pilot_syms
|
|
{
|
|
private:
|
|
std::vector<size_t> d_offsets;
|
|
std::vector<gr_complex> d_pilot_sequence;
|
|
size_t d_phase_ref_offset;
|
|
pmt::pmt_t d_start_tag;
|
|
|
|
std::vector<tag_t> d_tags_in_packet;
|
|
|
|
std::vector<gr_complex> d_packet;
|
|
|
|
size_t d_items_required;
|
|
bool d_tag_found;
|
|
float d_phase_inc_per_symbol;
|
|
float d_current_phase;
|
|
|
|
public:
|
|
correct_frequency_from_pilot_syms_impl(const std::vector<gr_complex> &pilot_sequence, const std::vector<size_t> &offsets, size_t phase_ref_offset, const std::string &start_tag);
|
|
~correct_frequency_from_pilot_syms_impl();
|
|
|
|
// Where all the action really happens
|
|
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
|
|
|
|
int general_work(int noutput_items,
|
|
gr_vector_int &ninput_items,
|
|
gr_vector_const_void_star &input_items,
|
|
gr_vector_void_star &output_items);
|
|
};
|
|
|
|
} // namespace hamnet70
|
|
} // namespace gr
|
|
|
|
#endif /* INCLUDED_HAMNET70_CORRECT_FREQUENCY_FROM_PILOT_SYMS_IMPL_H */
|
|
|