bastibl / gr-ieee802-11

IEEE 802.11 a/g/p Transceiver
https://wime-project.net/
GNU General Public License v3.0
753 stars 293 forks source link

Different Channel Profiles in Single Tuning #135

Closed usmanwardag closed 5 years ago

usmanwardag commented 6 years ago

Hello Bastian.

I am extracting the channel phase response for all the sub-carriers, but I am a little confused about the output I am getting. I will briefly explain my setup and the way I am extracting d_H.

I am using USRP N210 with a wired connection between TX and RX ports (hence no channel noise). Messages are continuously transmitted using BPSK 1/2 modulation and decoded using LS estimator. To get the channel response I print out d_H in ls.cc for n=4.

Now, when I plot the phase response for over 1000 packets, I get 5 distinct phase profiles. Please see the figure in image here. The X-axis has 51 sub-carriers (I have removed the guard bands and central sub-carrier) and the Y-axis has the phase in radians.

All the packets are collected in a single USRP tuning, so I am a little confused why I am seeing 5 different phase profiles. Is there a reason that could explain the results I am seeing?

Thank you very much for your time!

bastibl commented 6 years ago

Hi, very interesting. I have to admit, I have no explanation for this. Do you know if this changed over time or if it is constantly switching back and forth. Also, I sometimes experienced strange effects, even when connecting the devices via cable. You could check if touching the cables has any effect. You could also try different samples rates. The N210 should show an uncompensated filter at 20MHz, but that's not what we are seeing here. Let me know if you figure it out.

usmanwardag commented 6 years ago

Thanks for the response!

It constantly changes back and forth. I have also tested over a wireless channel and with different sampling rates but I still see the same problem. Is there some offset estimation going on in the code that could explain this?

As I understand, the LS estimator estimates channel for a few training symbols. If I were to increase the number of training symbols, would it help solve the problem? Finally, I am observing a Gaussian distribution for the subcarrier phase across a large number of packets. So, if I average the channel response across a large number of packets, would the mean response be a decent representation of the channel?

bastibl commented 6 years ago

Another thing that would come to my mind is sampling frequency correction in the frame equalizer. Can you try disabling the d_epsilon0 and d_er stuff in lib/frame_equalizer.cc.

You could add more training symbols, but I think it would be better to understand what's going on. Samples over a large number of frames characterize the channel in frequency domain. If the resolution is good enough depends on you applications.

sonebu commented 1 year ago

Hi, sorry to bump an old thread, but this potentially-unsolved issue seemed important for what I'm currently trying to understand in my own project (see [note] below for details). @bastibl I can remove this post or move the discussion elsewhere if you don't think this is the appropriate place.

@usmanwardag @bastibl:

gr_80211_phaseprofiles

If it's Case A...

I don't have a guess for Case B.

Eager to hear your takes on this.

[note] I'm hoping to develop a precise object detection-localization system based on 802.11 CSI info. Currently trying to understand how precise the channel estimation algorithms can get before hitting some fundamental (algorithm performance against noise etc.) and/or practical (radio chain, hardware-related etc.) barriers. If I'm understanding @usmanwardag s test setup correctly this is a pretty good "toy" setup where you would expect most things to work nearly perfectly so understanding the phenomenon he experienced would be informative.

P.S. @bastibl thanks for this package and your contributions to this field in general, I've learned a lot from all of it.

bastibl commented 1 year ago

Thanks for following up on the topic. Your argument for case A sounds very reasonable to me, but I don't have any measured data available. Maybe @usmanwardag could share some?