On Thu, Sep 4, 2014 at 11:29 AM, Tiankun Hu <tiankun...@foxmail.com> wrote:

> Hi Aditya,
> What's use of pilot symbols in "ofdm_equalizer_simpledfe" ?
> I just found pilot symbols update their carrier's channel state, but
> didn't find what's the use of these pilot channel state, seems them has no
> relate with data symbol, data symbol also only use themselves to update
> channel state.
>
>
>                 for (int i = 0; i < n_sym; i++) {
>                     for (int k = 0; k < d_fft_len; k++) {
>                         if (!d_occupied_carriers[k]) {
>                             continue;
>                         }
>                         if (!d_pilot_carriers.empty() &&
> d_pilot_carriers[d_pilot_carr_set][k]) {
> ======>         //didn't find any use of these channel state in pilot
> carriers   <=========
>                            //seems has not relate with data symbol
>                             d_channel_state[k] = d_alpha *
> d_channel_state[k]
>                                     + (1-d_alpha) * frame[i*d_fft_len + k]
>                                     / d_pilot_symbols[d_pilot_carr_
> set][k];
>                             frame[i*d_fft_len+k] =
> d_pilot_symbols[d_pilot_carr_set][k];
>                         } else {
>                             sym_eq = frame[i*d_fft_len+k] /
> d_channel_state[k];
>                             d_constellation->
>                                  map_to_points(d_constellation->
>                                         decision_maker(&sym_eq),
> &sym_est);
>                             d_channel_state[k] = d_alpha *
> d_channel_state[k]
>                                 + (1-d_alpha) * frame[i*d_fft_len + k] /
> sym_est;
>                             frame[i*d_fft_len+k] = sym_est;
>                         }
>                     }
>                     if (!d_pilot_carriers.empty()) {
>                         d_pilot_carr_set = (d_pilot_carr_set + 1) %
> d_pilot_carriers.size();
>                     }
>                 }



​Hello Tiankun,

That's a good question. The answer depends on how you want to implement DFE
-- and there are a couple of options.

a) Ignore pilots altogether. This is what I had described in my earlier
email.

b) Since pilots are known symbols, if a pilot is encountered, the new
channel estimate will always be correct. We know the received symbol r_i
and the expected symbol E_i, so it is trivial to calculate the channel
estimate H_i. However if you ignore the pilots, then Doppler or residual
CFO can make the decoding on a non-pilot symbol incorrect, leading to an
incorrect estimate of H_i propagating to all subsequent symbol indices on
that subcarrier 'i'.

Hope that helps.

Best,
Aditya
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to