# How to get sensor covariance matrix from CSI values?

I try to use musicdoa() function in Matlab to estimate the direction of arrival of the paths of signals received by the receiver in a wireless link. The function needs sensor covariance matrix as one of the arguments.

I have a matrix of Channel State Information (CSI) that is obtained from a WiFi card. The CSI values come in a matrix shown below:

$$C=\begin{bmatrix}c_{1,1} & c_{1,2} & ... & c_{1,30}\\ c_{2,1} & c_{2,2} & ... & c_{2,30}\\ c_{3,1} & c_{3,2} & ... & c_{3,30}\end{bmatrix}$$

In which, $$c_{i,j}$$ is the CSI value for $$i^{th}$$ antenna on $$j^{th}$$ subcarrier.

How can I get the sensor covariance matrix using the C matrix?

The Channel State Information (CSI) matrix is calculated over a packet of known signals that is sent as part of the communications protocol.

The CSI matrix contains two things (per carrier). The bearing of the "target" and the "strength" of transmission along the line of that bearing. So basically, this can tell you where is the transmitter with respect to the receiver array.

The CSI matrix is calculated via cross correlation between the signals received by each antenna and correlation is normalised covariance.

So, strictly speaking, it is impossible to derive covariance from the CSI because you need access to the received signals themselves. But, the angle (bearing) component of the CSI could be considered as being proportional to the real covariance for the pilot tones that are used to generate them. You could even obtain some theoretical covariance from the pilot tones by delaying them progressively but that would not include the covariance introduced due to noise.