Sunday, May 7, 2017

[Discuss-gnuradio] OFDM Channel Equalisation not unity for perfect channel

Hi everyone,

I've been working on a coded-OFDM system (looks similar to the standard OFDM flowgraphs) and have come to the stage where I am trying to improve channel estimation by implementing LS, STA and comb pilot interpolation methods similar to gr-ieee802.11. If I follow the default technique outlined in ofdm_equalizer_simpledfe and equalise just a single subcarrier using its estimated tap calculated by the OFDM Channel Estimation block, everything behaves as usual and I can decode my OFDM packets. If however I start using neighbouring subcarriers as per STA or when interpolating pilots, I am unable to decode any symbols.

Suspecting something strange was going on, I began investigating my flowgraph. Since I am running the system in simulation across a perfect channel, I would have expected the channel taps derived by the OFDM Channel Estimation block to all be equal to 1. Instead each channel appeared to be experiencing it's own arbitrary value (which explains why using multiple subcarriers wouldn't work). Since they are not equal to 1, I figured some other part of the flowgraph must be applying some unintended modulation.

At first I suspected irreversibility between the FFT/IFFT blocks, but after ensuring both were using fft.window.rectangular(fft_len) as the selected window function and correctly rescaling after the FFT, I was able to successfully recover the original signal directly after the IFFT. Next I took a look at the cyclic prefixer and header/payload demux combo, but after using a Keep M in N block after the cyclic prefixer I was again able to recover the signal.

This left only the Schmidl & Cox OFDM Sync block, analog frequency modulation block and the subsequent multiplication. Since I was on a perfect channel, it was no surprise that the fine frequency offset was 0Hz, meaning the frequency mod block resulted in a simply multiplication by 1. However,replacing the input to the frequency mod block with a constant source of zero changed the resulting channel estimations further down the line and meant they were correct (unity) for at least one packet (and again on every third packet for some reason...) I can't really explain what's going on...?

Now I might be on the totally incorrect path here, so if anyone has any suspicions or could recommend something for me to try out, it would be greatly appreciated. I could be misinterpreting the Schmidl/Cox technique for example or the role of channel equalisation altogether. Thanks in advance for your help!

Regards,
Justin

No comments:

Post a Comment