StevenMHernandez / ESP32-CSI-Tool

Extract Channel State Information from WiFi-enabled ESP32 Microcontroller. Active and Passive modes available. (https://stevenmhernandez.github.io/ESP32-CSI-Tool/)
https://stevenmhernandez.github.io/ESP32-CSI-Tool/
MIT License
265 stars 72 forks source link

Can we obtain the Power Delay Profile from the ESP32 Wifi? #7

Closed rtmtree closed 3 years ago

rtmtree commented 3 years ago

I've been using this repo to obtain CSI data successfully. But I'm curious if the data can be applied more.

Power delay profile (PDP) is a time-domain measurement of signal power. It can be applied to many fields of work related to multi-path transmission. e.g. Fig 1

(ref : gaussianwaves) Let this be the PDP measured at the ESP32 as a receiver. If we move Access point further away , the P (blue line) should be at further time ( more right on x-axis) .

Now, I'm struggling with finding a way to obtain the Power Delay Profile from ESP32. Surely, I attached an external antenna to the ESP32 to enhance its signal precision.

First, I discovered that the Power Delay Profile (PDP) can be resulted from the Inverse fast Fourier transform (IFFT) of CSI data. But, the thing is the CSI that can be worked that way should be aligned in frequency domain so it can be turned into the time domain (PDP) . I obtain CSI data from callback function as many work does. Unfortunately, the CSI obtained from ESP32 is in subcarrier format and contains some null.

Fig 2

So, I need to convert ESP32 RAW CSI (Fig 2) (that is in subcarrier domain) to frequency domain CSI which can probably be done by some Frequency Matching algorithm. So , I posted this to ask if there is already a way to match subcarriers to frequency or to get a precise Power Delay Profile. May you share to be a big contribution to my work, please?

PS: I know that subcarrier represents a frequency. But I don't know exactly which subcarrier represents which frequency. And also there are many subcarriers (around 12) that always return 0. So, I want a document or a matching algorithm to tell me i-th subcarrier = what frequency band. and Also eliminate those unused subcarriers.

Or if I misunderstood about the way to obtain the Power Delay Profile , please inform me. And guide me to be able to obtain it correctly.

Thank you in advance.

StevenMHernandez commented 3 years ago
Screen Shot 2021-03-11 at 21 33 21

Here is a table showing which subcarriers from the ESP32-CSI-Tool correspond to which subcarriers in the frequency domain. You have a center subcarrier frequency (0) and then other subcarrier frequencies to the left (-) and the right (+) of the center frequency.

Null subcarriers (subcarrier # 0 as well as the 12 subcarriers you identified) are expected to be 0. This is an artifact of the use of FFT/IFFT which requires the number of subcarriers to be 2^N. Because there are really only 52 subcarriers with data, FFT/IFFT increases the size to be 64 by filling with these null subcarriers.

yujianyuanhaha commented 3 years ago

@StevenMHernandez meanwhile, does the CSI phase reliable? does the phase information include unknown offset and tweaks? the delay profile require precise phase information, I do see in some of your work the amplitude is pretty stable and good to go.

StevenMHernandez commented 3 years ago

The tool does not directly add any information about the offsets in phase. This is something that could be added after receiving the raw phase data.