2 #ifndef INCLUDED_LORA_SDR_FRAME_SYNC_IMPL_H
3 #define INCLUDED_LORA_SDR_FRAME_SYNC_IMPL_H
10 #include <gnuradio/io_signature.h>
14 #include <volk/volk.h>
32 enum DecoderState { DETECT, SYNC, FRAC_CFO_CORREC, STOP };
43 enum SyncState { NET_ID1, NET_ID2, DOWNCHIRP1, DOWNCHIRP2, QUARTER_DOWN };
51 uint8_t m_invalid_header;
53 std::vector<uint16_t> m_sync_words;
56 uint32_t m_number_of_bins;
63 std::vector<gr_complex> in_down;
64 std::vector<gr_complex> m_downchirp;
65 std::vector<gr_complex> m_upchirp;
72 uint8_t symbols_to_skip;
81 std::vector<gr_complex>
84 std::vector<gr_complex>
96 std::vector<gr_complex> CFO_frac_correc;
98 std::vector<gr_complex> symb_corr;
103 #ifdef GRLORA_MEASUREMENTS
106 std::ofstream sync_log;
110 int numb_symbol_to_save;
112 std::vector<gr_complex>
116 std::ofstream preamb_file;
117 std::ofstream payload_file;
123 void frame_info_handler(pmt::pmt_t frame_info);
131 void estimate_CFO(gr_complex *samples);
136 void estimate_CFO_Bernier();
151 uint32_t get_symbol_val(
const gr_complex *samples, gr_complex *ref_chirp);
159 float determine_energy(
const gr_complex *samples);
164 void header_err_handler(pmt::pmt_t payload_len);
177 bool impl_head, std::vector<uint16_t> sync_word);
190 void forecast(
int noutput_items, gr_vector_int &ninput_items_required);
201 int general_work(
int noutput_items, gr_vector_int &ninput_items,
202 gr_vector_const_void_star &input_items,
203 gr_vector_void_star &output_items);