Hi all: Thank you in advance.I have read the source code:ofdm_chanest_vcvc_impl.cc.But i have a question.
void ofdm_chanest_vcvc_impl::get_chan_taps( const gr_complex *sync_sym1, const gr_complex *sync_sym2, int carr_offset, std::vector<gr_complex> &taps) { const gr_complex *sym = ((d_n_sync_syms == 2) ? sync_sym2 : sync_sym1); std::fill(taps.begin(), taps.end(), gr_complex(0, 0)); int loop_start = 0; int loop_end = d_fft_len; if (carr_offset > 0) { loop_start = carr_offset; } else if (carr_offset < 0) { loop_end = d_fft_len + carr_offset; } for (int i = loop_start; i < loop_end; i++) { if ((d_ref_sym[i-carr_offset] != gr_complex(0, 0))) { taps[i-carr_offset] = sym[i] / d_ref_sym[i-carr_offset]; } } //Question: //For example,when the carr_offset=2,then: //loop_start =2; //for example loop_end=64 // for (int i =2; i < loop_end; i++) { if ((d_ref_sym[i-carr_offset] != gr_complex(0, 0))) { taps[i-carr_offset] = sym[i] / d_ref_sym[i-carr_offset]; } } // Now the taps only have values on taps[0]---taps[63-2],and taps[62] taps[63] will be equal to zero.It means that the channel estimation have value 0.It is wrong? if (d_interpolate) { for (int i = d_first_active_carrier + 1; i < d_last_active_carrier; i += 2) { taps[i] = taps[i-1]; } taps[d_last_active_carrier] = taps[d_last_active_carrier-1]; } if (d_eq_noise_red_len) { // TODO // 1) IFFT // 2) Set all elements > d_eq_noise_red_len to zero // 3) FFT } } Thank you. Best regards, zswx
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio