32 static const gr_complex d_C_I;
35 int d_last_calced_sym;
41 handle_msg(pmt::pmt_t msg);
43 msg_extract_poss(std::vector<std::vector<int> > &pilot_carriers,
46 msg_extract_vals(std::vector<std::vector<gr_complex> > &pilot_symbols,
49 std::vector<std::vector<int> > d_pilot_carriers;
50 std::vector<gr_complex*> d_pilot_symbols;
54 init_pilot_symbol_arrays(
55 const std::vector<std::vector<gr_complex> > &pilot_symbols,
56 int n_frame_syms,
int max_pilots);
58 initialize_volk_vectors(
int max_pilots,
int subcarriers,
61 init_pilot_dependend_volk_vectors(
int max_pilots);
63 init_subcarrier_dependend_volk_vectors(
int subcarriers);
65 init_estimates_store_volk_vectors(
int subcarriers,
int n_frame_syms);
67 std::vector<std::vector<gr_complex*> > d_estimates;
68 std::vector<std::vector<float*> > d_mag_estimates;
69 std::vector<std::vector<float*> > d_phase_estimates;
73 const std::vector<std::vector<int> > &pilot_carriers);
75 get_nsyms_in_frame(
const std::vector<std::vector<int> > &pilot_carriers);
79 get_sym_num_from_tags(std::vector<gr::tag_t> &v_b);
81 copy_estimates_to_out_buf(gr_complex* out,
int sym_num,
86 calculate_channel_estimates(
const gr_complex* in_rx,
int sym_num,
89 calculate_ofdm_symbols_with_pilots(
const gr_complex* in_rx,
int first_sym,
90 int processable_items,
int rx);
93 calculate_interpolated_ofdm_symbols(
int first_sym,
int processable_items,
96 processed_items_to_complex(
int first_sym,
int processed_items,
int rx);
98 get_processable_items(
int sym_num,
int nitems);
100 get_last_processable_sym(
int first_sym,
int nitems);
104 estimate_ofdm_symbol(
float* mag_est_vec,
float* phase_est_vec,
105 gr_complex* symbol_vec, std::vector<int> pilot_pos,
106 gr_complex* pilot_sym);
112 calculate_mag_phase_diff(
float* diff_mag,
float* diff_phase,
113 gr_complex* rx_rs, gr_complex* pilot_sym,
115 gr_complex* d_diff_rx_rs;
118 extract_pilots(gr_complex* b_vec, gr_complex* a_vec,
119 std::vector<int> pilot_pos);
122 phase_bound_diff(
float* phase_vec,
int len);
124 phase_bound_abs(
float* phase_vec,
int len);
126 phase_bound_between_pilot_vectors(
int first_sym,
int processable_items,
129 phase_bound_between_vectors(
float* first,
float* last);
130 float* d_phase_bound_vector;
133 interpolate_between_vectors(std::vector<float*> &estimates,
134 int previous_sym,
int current_sym);
135 float* d_diff_vector;
139 interpolate_ofdm_symbol(
float* b_vec,
float* a_vec,
140 std::vector<int> pilot_pos);
142 interpolate(
float* interp_vals,
float first_val,
float last_val,
146 vector_mag_phase_to_complex(gr_complex* c_vec,
float* m_vec,
float* p_vec,
149 mag_phase_to_complex(
float mag,
float phase);
153 int rxant,
int subcarriers, std::string tag_key,
154 std::string msg_buf_name,
155 const std::vector<std::vector<int> > &pilot_carriers,
156 const std::vector<std::vector<gr_complex> > &pilot_symbols,
162 work(
int noutput_items, gr_vector_const_void_star &input_items,
163 gr_vector_void_star &output_items);
167 const std::vector<std::vector<gr_complex> > &pilot_symbols);
169 std::vector<std::vector<int> >
172 return d_pilot_carriers;