discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Discuss-gnuradio] 回复: references using in ofdm_equalizer_simpledfe


From: Martin Braun
Subject: Re: [Discuss-gnuradio] 回复: references using in ofdm_equalizer_simpledfe
Date: Tue, 16 Sep 2014 11:28:47 -0400


On 15 Sep 2014 17:34, "Tiankun Hu" <address@hidden> wrote:
>
> Hi Aditya/Martin,
> I still looked at rx/tx_ofdm.grc.
> Seems there an issue in "ofdm_equalizer_simpledfe.cc line90".
> If we use "ofdm_carrier_allocator_cvc_impl.cc" to allocator data and pilot, the d_occupied_carriers[k] and d_pilot_carriers[d_pilot_carr_set][k] shouldn't equal to 1 at the same time, otherwise we will lose some data, right? if so, when code arrive at line93 it will always false, so no matter we use block type or comb type pilot, the pilot will always useless.

Yep. Your configuration must be sensible.
>
> In "qa_ofdm_frame_equalizer_vcvc.test_002_simpledfe", since we construct tx_data by hand, so this issue not occur, might we should remove line90~92 or let "ofdm_carrier_allocator_cvc_impl.cc" do not allocate data to carriers where both  d_occupied_carriers[k]/d_pilot_carriers[k] equal to 1.
>
> And second question is why "d_occupied_carriers" degrade to 1-d arrays when init this object?

It's flattened for easier lookup.

M
>
>  89     for (int k = 0; k < d_fft_len; k++) {
>  90       if (!d_occupied_carriers[k]) {
>  91         continue;
>  92       }
>  93       if (!d_pilot_carriers.empty() && d_pilot_carriers[d_pilot_carr_set][k]) {
>  94         d_channel_state[k] = d_alpha * d_channel_state[k]
>  95                    + (1-d_alpha) * frame[i*d_fft_len + k] / d_pilot_symbols[d_pilot_carr_set][k];
>  96         frame[i*d_fft_len+k] = d_pilot_symbols[d_pilot_carr_set][k];
>  97       } else {
>  98         sym_eq = frame[i*d_fft_len+k] / d_channel_state[k];
>  99 d_constellation->map_to_points(d_constellation->decision_maker(&sym_eq), &sym_est);
> 100         d_channel_state[k] = d_alpha * d_channel_state[k]
> 101                                + (1-d_alpha) * frame[i*d_fft_len + k] / sym_est;
> 102         frame[i*d_fft_len+k] = sym_est;
> 103       }
> 104     }
>
>
>
>
> 在 2014年09月06日 00:31, Aditya Dhananjay 写道:
>>
>> Hi Tiankun,
>>
>>
>> To add on to what Martin said: In DFE, the channel state H_I on
>> subcarrier i is updated everytime it receives a new symbol on that
>> subcarrier. It doesn't really care of that symbol is a pilot or a data
>> symbol. If it is a pilot, the channel estimate H_i is trivially
>> calculated and updated. If it is a data symbol, then the nearest
>> constellation point is found, and is then used to update H_i.
>>
>> And as Martin mentioned, the pilot placement pattern in the packet is
>> important to note. If I remember correctly, the reference implementation
>> uses the "comb" type pilot patter. Look at Figure 1(b) in the link
>> below. In the "comb" pilot pattern, the pilots are useless, as the
>> subcarriers that contain the pilot symbols do not carry data symbols.
>> You will need to use the "block" pilot pattern (look at Figure 1(a)
>> below, and you will immediately see how DFE is applicable in this case.
>>
>> http://scialert.net/fulltext/?doi=itj.2011.914.926&org=11
>>
>> Of course, there are other types of pilot patterns, but you can ignore
>> them for now. Good luck!
>>
>> best,
>> aditya
>>
>>
>>
>>
>> On Fri, Sep 5, 2014 at 12:15 PM, Martin Braun <address@hidden
>> <mailto:address@hidden>> wrote:
>>
>>     It uses them. It will reset the channel state estimate every time it
>>     encounters a pilot symbol. See eg the qa codes for examples. If you
>>     want to make use of them in your modem, you need to put pilots on
>>     the same carriers as the data.
>>
>>     M
>>
>>     On 5 Sep 2014 11:01, "Tiankun Hu" <address@hidden
>>     <mailto:address@hidden>> wrote:
>>
>>         Hi Aditya,
>>         Thanks your time!
>>         But how to use pilotes symbol's channel state to update data
>>         symbol's?
>>         "ofdm_equalizer_simpledfe" is so simple, so it didn't  realize
>>         that, right?
>>         Is there any example or paper can be for reference?
>>         Thanks
>>         Tiankun
>>
>>         ------------------ 原始邮件 ------------------
>>         *发件人:* "Aditya Dhananjay";<address@hidden
>>         <mailto:address@hidden>>;
>>         *发送时间:* 2014年9月4日(星期四) 晚上11:45
>>         *收件人:* "Tiankun Hu"<address@hidden
>>         <mailto:address@hidden>>; __
>>         *抄送:* "address@hidden
>>         <mailto:address@hidden>"<address@hidden
>>         <mailto:address@hidden>>; __
>>         *主题:* Re: [Discuss-gnuradio] references using in
>>
>>         ofdm_equalizer_simpledfe
>>
>>
>>
>>
>>         On Thu, Sep 4, 2014 at 11:29 AM, Tiankun Hu
>>         <address@hidden <mailto:address@hidden>> 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
>>         address@hidden <mailto:address@hidden>
>>         https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>
>>
>>
>>
>>
>> _______________________________________________
>> Discuss-gnuradio mailing list
>> address@hidden
>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>>
>
>
> --
> Thanks
> Tiankun
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]