# Computing per stream SNR in a full CSI MIMO-OFDM system for fast link adaptation

Started by May 15, 2008
```Dear all,

I have a MIMO-OFDM system, like 802.11n. I assume full CSI in both TX
and RX and my goal is to obtain in the receiver a per spatial stream
and per OFDM subcarrier SNR estimation in order to perform a fast link
adaptation algorithm, i.e. I want to compute SNR[i][k] where i=1..Nss
(Nss: number of spatial streams) and j=1..Nsc (Nsc: number of OFDM
subcarriers).

Since I assume full CSI in both TX and RX the optimum MIMO
architecture is to perform the svd of the channel matrix H in order to
obtain the steering matrixs in TX and RX.  Notice that this has to be
done per OFDM subcarrier (there is one H per each OFDM subcarrier).

What boggles my mind is that when I observe the SNR per spatial stream
I obtain that sometimes (for some subcarriers) the SNR of the spatial
stream associated with the highest eigenvalue of the channel is not
the biggest one, and the reason for that is that I "colour" the noise
at the receiver. Is the previous possible or I am making some
mistake ?

Here is how I compute the SNR per spatial stream and OFDM subcarrier.

[U,D,V] = svd(H); %where H is the MIMO channel matrix of dimensions
Nrx*Ntx (antennas in RX and TX) and for a certain OFDM subcarrier

Then the transmitter sends in the channel:

x = V*s; %where s is a vector containing the information symbols

y = U'*r; %where s is a vector containing the received symbols

Then from the vector y that I have to estimate the SNR, i.e. each
component of y contains one spatial stream.

First I obtain the power of noise per OFDM subcarrier. This is
basically obtained like:

Noise_Power_per_sc = Tn*BW_sc*Nf

where:
Tn: Is the temperature of noise in the receiver
BW_sc: Is the BW occupied by one OFDM subcarrier
Nf: Is the noise figure in the receiver

All the previous quantities are linear (not dBs)

Now I generate a noise vector:

n = sqrt(Noise_Power_per_sc)*ones(Nrx,1);

Here I have a question and is that I generate a vector containing the
power of noise per each receiver antenna, I do not generate random
noise samples but just the power of noise because this is what the
receiver would use to do the SNR estimation.

Now if I assume that the same power was allocated to each spatial
stream, I can compute the received vector as:

H_eff = U'*H*V;
r = sqrt(TX_power/Nss)*H_eff*ones(Ntx,1) + U'*n;

And here I have a question that is whether is correct to assume
spatially correlated noise by multiplying by U in the receiver.

Then the SNR of spatial stream can simply be computed like:

a = sqrt(TX_power/Nss)*H_eff*ones(Ntx,1);
snr(i) = abs(a(i) / (r(i) - a(i)))^2

I have checked that the power received in the spatial stream
associated with the maximum eigenvalue is always above all the others.
The problem is that sometimes the noise is also above all the others
because we multiply the noise vector by U', and then I observe a lower
SNR for the spatial stream associated with the highest eigenvalue. Is
this correct ?

Regards

Daniel

```
```On May 15, 6:00&#2013266080;pm, Dani Camps <danicamp...@gmail.com> wrote:
> Dear all,
>
> I have a MIMO-OFDM system, like 802.11n. I assume full CSI in both TX
> and RX and my goal is to obtain in the receiver a per spatial stream
> and per OFDM subcarrier SNR estimation in order to perform a fast link
> adaptation algorithm, i.e. I want to compute SNR[i][k] where i=1..Nss
> (Nss: number of spatial streams) and j=1..Nsc (Nsc: number of OFDM
> subcarriers).
>
> Since I assume full CSI in both TX and RX the optimum MIMO
> architecture is to perform the svd of the channel matrix H in order to
> obtain the steering matrixs in TX and RX. &#2013266080;Notice that this has to be
> done per OFDM subcarrier (there is one H per each OFDM subcarrier).
>
> What boggles my mind is that when I observe the SNR per spatial stream
> I obtain that sometimes (for some subcarriers) the SNR of the spatial
> stream associated with the highest eigenvalue of the channel is not
> the biggest one, and the reason for that is that I "colour" the noise
> at the receiver. Is the previous possible or I am making some
> mistake ?
>
> Here is how I compute the SNR per spatial stream and OFDM subcarrier.
>
> [U,D,V] = svd(H); %where H is the MIMO channel matrix of dimensions
> Nrx*Ntx (antennas in RX and TX) and for a certain OFDM subcarrier
>
> Then the transmitter sends in the channel:
>
> x = V*s; %where s is a vector containing the information symbols
>
>
> y = U'*r; %where s is a vector containing the received symbols
>
> Then from the vector y that I have to estimate the SNR, i.e. each
> component of y contains one spatial stream.
>
> First I obtain the power of noise per OFDM subcarrier. This is
> basically obtained like:
>
> Noise_Power_per_sc = Tn*BW_sc*Nf
>
> where:
> Tn: Is the temperature of noise in the receiver
> BW_sc: Is the BW occupied by one OFDM subcarrier
> Nf: Is the noise figure in the receiver
>
> All the previous quantities are linear (not dBs)
>
> Now I generate a noise vector:
>
> n = sqrt(Noise_Power_per_sc)*ones(Nrx,1);
>
> Here I have a question and is that I generate a vector containing the
> power of noise per each receiver antenna, I do not generate random
> noise samples but just the power of noise because this is what the
> receiver would use to do the SNR estimation.
>
> Now if I assume that the same power was allocated to each spatial
> stream, I can compute the received vector as:
>
> H_eff = U'*H*V;
> r = sqrt(TX_power/Nss)*H_eff*ones(Ntx,1) + U'*n;
>
> And here I have a question that is whether is correct to assume
> spatially correlated noise by multiplying by U in the receiver.
>
> Then the SNR of spatial stream can simply be computed like:
>
> a = sqrt(TX_power/Nss)*H_eff*ones(Ntx,1);
> snr(i) = abs(a(i) / (r(i) - a(i)))^2
>
> I have checked that the power received in the spatial stream
> associated with the maximum eigenvalue is always above all the others.
> The problem is that sometimes the noise is also above all the others
> because we multiply the noise vector by U', and then I observe a lower
> SNR for the spatial stream associated with the highest eigenvalue. Is
> this correct ?
>
> Regards
>
> Daniel

Hi all,

I think I found the solution. What I am doing is wrong, I do not have
to multiply the noise by the receiver steering matrix when estimating
the SNR, i.e. n' = U'*n. The reason is that I am not working with
instantaneous noise samples but I just want to compute the SNR, and
for that I need to consider the statistics of the noise. Now, if n is
a complex gaussian random vector and U is a unitary matrix, i.e. U'*U
= I, then the statistics of U'*n and n are the same.

Regards

Daniel
```