# Channel estimation/equalization in OFDM

**URL:** <https://www.ruby-forum.com/t/channel-estimation-equalization-in-ofdm/246047>\
**Category:** GNU Radio\
**Created:** [August 21, 2013, 11:34am UTC](https://www.ruby-forum.com/t/channel-estimation-equalization-in-ofdm/246047 "2013-08-21T11:34:44Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sadaf\_N](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/858c86/32.png) [@Sadaf\_N](https://www.ruby-forum.com/u/Sadaf_N)\
**Post date:** [August 21, 2013, 11:34am UTC](https://www.ruby-forum.com/t/channel-estimation-equalization-in-ofdm/246047/1 "2013-08-21T11:34:44Z")

</div>

Dear All,

I’ve been trying to investigate how channel estimation works in OFDM  
based  
on the implementation provided in Gnuradio for OFDM transmission. I  
found  
that it was done in the block digital\_ofdm\_frame\_acquisition.cc/h. As I  
understand, the digital\_ofdm\_frame\_acquisition::calculate\_equalizer does  
the job: based on known transmitted symbols (stored in d\_known\_symbol)  
and  
received symbols (stored in symbol), the inverse of the channel  
coefficient  
can be obtained according an equation similar to the following:

channel\_coefficient = symbol/d\_known\_symbol

However, there are two differences in the implementation in relation to  
this equation: 1) the block computes the inverse of the channel  
coefficient  
(d\_known\_symbol/symbol), and 2) there is a frequency compensation term  
(coasre\_freq\_comp) which basically rotates the complex samples by phase  
corresponding to the frequency deviation and obtained via the preceding  
sync block. One final note is that channel coefficient is obtained in  
every  
other tab, and the coefficient in the inter-taps are obtained via linear  
interpolation of the acquired channels.

Now, my questions are as follows:

1. Does this explanation seems correct?

2. By modifying the VERBOSE variable to be equal to 1 in  
digital\_ofdm\_frame\_acquisition.cc, the block also plots the estimated  
channel coefficients in the following order: transmitted symbol →   
known  
symbol → estimated channel inverse → output). I noticed that when  
using  
a file source/sink to store/receive packets from OFDM benchmark  
transmitter  
and receiver, the channel coefficients are still not equal to 1, despite  
the fact that no receive noise nor wireless fading occurs. What do these  
coefficients represent?

3. Are the obtained coefficients eligible to be used in further  
precoding  
of transmitted packets, assuming that the channel between Tx/Rx is  
reciprocal, and that a receiver can switch roles with the transmitter?

Thank you

–

_---------------------------------------------------_  
_Mohammed Hassan Karmoose_  
_Teaching Assistant, Electrical Engineering Dept._  
_Faculty of Engineering, Alexandria University_  
_Al-Horeya Rd, El-Hadara,_ _Alexandria, Egypt - 21544_  
\*Tel: \*_(++203)592-1852_ | \*Fax: \*_(++203)592-1853_  
_Email: m [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)\_h\_karmoose@a [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
lexu.edu.eg_

---

<div class="post-metadata">

**Author:** ![Mohammed\_Karmoose](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/m/7c8e57/32.png) [@Mohammed\_Karmoose](https://www.ruby-forum.com/u/Mohammed_Karmoose)\
**Post date:** [August 21, 2013, 12:00pm UTC](https://www.ruby-forum.com/t/channel-estimation-equalization-in-ofdm/246047/2 "2013-08-21T12:00:27Z")

</div>

Mohammed,

you should also check the new OFDM implementation (see  
examples/ofdm/rx\_ofdm.grc and python/digital/ofdm\_txrx.py). Much more  
modular.

On Wed, Aug 21, 2013 at 11:33:26AM +0200, Mohammed Karmoose wrote:

> Now, my questions are as follows:
> 
> 1. Does this explanation seems correct?

Hm… coarse freq compensation deals with freq. offsets larger than one  
sub-carrier spacing. Interpolation is done in frequency direction (the  
Schmidl & Cox sync algo requires double sub-carrier spacing on the sync  
symbol).

> 1. By modifying the VERBOSE variable to be equal to 1 in  
> digital\_ofdm\_frame\_acquisition.cc, the block also plots the estimated channel  
> coefficients in the following order: transmitted symbol → known symbol →   
> estimated channel inverse → output). I noticed that when using a file source/  
> sink to store/receive packets from OFDM benchmark transmitter and receiver, the  
> channel coefficients are still not equal to 1, despite the fact that no receive  
> noise nor wireless fading occurs. What do these coefficients represent?

Most likely phase rotation due to cyclic prefix and timing errors. Have  
you checked the magnitude? It’s probably 1.

> 1. Are the obtained coefficients eligible to be used in further precoding of  
> transmitted packets, assuming that the channel between Tx/Rx is reciprocal, and  
> that a receiver can switch roles with the transmitter?

That’s more of a signal processing question, and as such the (annoying)  
answer is: Depends on your application. Are you attempting some kind of  
waterfilling algorithm? In any case, discard the phase before you do  
so, and make sure you have some kind of limiter.

MB

–  
Karlsruhe Institute of Technology (KIT)  
Communications Engineering Lab (CEL)

Dipl.-Ing. Martin B.  
Research Associate

Kaiserstraße 12  
Building 05.01  
76131 Karlsruhe

Phone: +49 721 608-43790  
Fax: +49 721 608-46071  
www.cel.kit.edu

KIT – University of the State of Baden-Württemberg and  
National Laboratory of the Helmholtz Association
