I am currently trying to implement an LMMSE estimator/equalizer for a python based ofdm receiver. The actual reception is done with a SDR and iq-samples are stored in a file for the "ofdm-receiver" process in Python.
LMMSE theory
I've read through a multitude of resources. The final (simplified) formula for LMMSE i am trying to implement is (Edfors et. Al.):
$\hat{H}_{LMMSE} = R_{HH} (R_{HH} + \frac{\beta}{SNR}I)^{-1} \hat{H}_{LS}$
$R_{hh}$ denotes the Channel autocorrelation, $\beta$ is a modulation mapping dependent constant, $SNR$ the signal to noise ratio, $I$ an identity Matrix and $\hat{H}_{LS}$ the Least Squares channel estimate.
I've accomplished the computation for all the elements successfully (I think) except for the channel autocorrelation matrix. I am not shure how to compute this matrix correctly. As I dont have the true channel coefficients $H$, I intend to use the estimate $\hat{H}_{LS}$ instead. That LS-estimate is obtained by using the Long Training Sequence (LTS) from the preamble. $R_{HH}$ is computed as:
$R_{HH} = E\{HH^H\}$ with $(.)^H$ beeing the Hermetian operation.
I am working with a SISO system, so I only have one vector of estimated channel coefficients $\hat{H}_{LS}$ with dimensions $(64\times1)$. I've tried using numpys correlate function as well as the corrcoef function. So far, the resulting $\hat{H}_{LMMSE}$ is always incorrect and leads to worse equalization than using only the $\hat{H}_{LS}$. I would try to implement it manually, but I dont know how I would go about that. I know, that for equally propable outcomes of a random variable, the expectation simplifies to the arithmetic mean of all outcomes. So from Wikipedia: Autocorrelation and this StackExchange answer i conclude:
$R_{HH} = E[HH^H] = E\begin{bmatrix} \begin{bmatrix}H_1 \\H_2\\ \vdots \\ H_n \end{bmatrix} \begin{bmatrix}\bar{H_1} \bar{H_2} \dots \bar{H_n}\end{bmatrix} \end{bmatrix} = \begin{bmatrix} E[H_{1}\bar{H_{1}}]\quad E[H_{1}\bar{H_{2}}]\quad \cdots\quad E[H_{1}\bar{H_{n}}]\\ E[H_{2}\bar{H_{1}}]\quad E[H_{2}\bar{H_{2}}]\quad \cdots\quad E[H_{2}\bar{H_{n}}]\\ \vdots\quad\quad\quad \vdots\quad\quad \ddots\quad\quad \vdots\\ E[H_{n}\bar{H_{1}}]\quad E[H_{n}\bar{H_{2}}]\quad \cdots\quad E[H_{n}\bar{H_{n}}]\\ \end{bmatrix}$
For complex valued random variable $Z$. I've come to understand (StackExchange), that $H_1 H_2 \dots H_n$ are not the actual realizations of my random variable $H$ but rather random variables on their own.
My Question
- I don't really understand how to compute/implement the auto-correlation matrix $R_{HH}$. I saw that one would have to estimate it (Wiener Filter?) but I don't understand how to apply it to my ofdm case.
- What dimensions should the identity matrix $I$ have?
- My $SNR$ calculation follows (Edfors et. Al.): $SNR = \frac{E[\mid x_k \mid^2]}{\sigma_n^2}$ Where I interpreted the term in the numerator as the signal energy. Is that correct?
NOTE Maybe it is useful know that I don't have to realize a real time performance, since I am working on prerecorded data.
Thank you for your time and help! Cheers Lucas