MIMO

class pylayers.measures.mesmimo.MIMO(**kwargs)[source]

Bases: object

This class handles the data coming from a MIMO Channel Sounder

H : raw channel matrix in frequency domain Hcal : calibrated channel matrix in frequency domain hcal : channel matrix in time domain

Methods Summary

Bcapacity([Pt, Tp])

calculates BLAST deterministic MIMO channel capacity

Scapacity([Pt, Tp])

equivalent SISO capacity

WFcapacity([Pt, Tp])

calculates deterministic MIMO channel capacity

animgrid(**kwargs)

calHa(**kwargs)

calculate the Ha function (angular domain representation)

calibration()

Apply calibration files

grid(M[, OR, OT, cT, cR])

Evaluate the data on a grid in the plane

linear_MMSE([cmd, m, snrdB])

linear MMSE precoding

linear_ZF([cmd, m, snrdB])

linear Zero Forcing precoding Parameters ———-

loadraw()

load a MIMO Nr x Nt raw data sounder file

mulcplot(mode, **kwargs)

normalize()

Normalization of H

plot([frequency, phase, dB, cal, fig, ax, color])

showgrid(**kwargs)

show the data on a spatial grid

svd()

singular value decomposition of matrix H

transfer()

calculate transfer matrix.

Methods Documentation

Bcapacity(Pt=array([0.001]), Tp=273)[source]

calculates BLAST deterministic MIMO channel capacity

Ptnp.array (,NPt)

the total power is assumed uniformaly distributed over the whole bandwidth

Tp : Receiver Temperature (K)

Cspectral efficiency (bit/s/Hz)

np.array (Nf,NPt)

rhoSNR

np.array (Nf,Nt,NPt)

log_2(det(I+(Et/(N0Nt))HH^{H})

Transferd to Mchannel

Done

Scapacity(Pt=0.001, Tp=273)[source]

equivalent SISO capacity

WFcapacity(Pt=array([0.001]), Tp=273)[source]

calculates deterministic MIMO channel capacity

Ptthe total power to be distributed over the different spatial

channels using water filling

Tp : Receiver Noise Temperature (K)

C : capacity (bit/s) rho : SNR (in linear scale)

log_2(det(It + HH^{H})

animgrid(**kwargs)[source]
calHa(**kwargs)[source]

calculate the Ha function (angular domain representation)

fcGHz : float duR : grid step in uR duT : grid step in uT time : boolean taumin : float 0 taumax : float Nz : int (20000)

See : David Tse (7.70 pp 373)

calibration()[source]

Apply calibration files

grid(M, OR=array([3.4, 0.73]), OT=array([5.29, 6.65]), cT=array([-0.07, 0. ]), cR=array([0.07, 0. ]))[source]

Evaluate the data on a grid in the plane

M : np.array() (Nx x Ny) OR : np.array (,2)

Origin of receiver [3.4,0.73]

OTnp.array (,2)

Origin of transmitter [5.29,6.65]

cRnp.array (,2)

array receiving vector [0.07,0]

cTnp.array (,2)

array transmitting vector [-0.07,0]

Updated object members

self.grid : M (Nx x Ny x 2) self.gloc : TUsignal (x (,ntau) y (Nx x Ny,ntau) )

linear_MMSE(cmd='QPSK', m=4, snrdB=array([ 0., 0.25252525, 0.50505051, 0.75757576, 1.01010101, 1.26262626, 1.51515152, 1.76767677, 2.02020202, 2.27272727, 2.52525253, 2.77777778, 3.03030303, 3.28282828, 3.53535354, 3.78787879, 4.04040404, 4.29292929, 4.54545455, 4.7979798, 5.05050505, 5.3030303, 5.55555556, 5.80808081, 6.06060606, 6.31313131, 6.56565657, 6.81818182, 7.07070707, 7.32323232, 7.57575758, 7.82828283, 8.08080808, 8.33333333, 8.58585859, 8.83838384, 9.09090909, 9.34343434, 9.5959596, 9.84848485, 10.1010101, 10.35353535, 10.60606061, 10.85858586, 11.11111111, 11.36363636, 11.61616162, 11.86868687, 12.12121212, 12.37373737, 12.62626263, 12.87878788, 13.13131313, 13.38383838, 13.63636364, 13.88888889, 14.14141414, 14.39393939, 14.64646465, 14.8989899, 15.15151515, 15.4040404, 15.65656566, 15.90909091, 16.16161616, 16.41414141, 16.66666667, 16.91919192, 17.17171717, 17.42424242, 17.67676768, 17.92929293, 18.18181818, 18.43434343, 18.68686869, 18.93939394, 19.19191919, 19.44444444, 19.6969697, 19.94949495, 20.2020202, 20.45454545, 20.70707071, 20.95959596, 21.21212121, 21.46464646, 21.71717172, 21.96969697, 22.22222222, 22.47474747, 22.72727273, 22.97979798, 23.23232323, 23.48484848, 23.73737374, 23.98989899, 24.24242424, 24.49494949, 24.74747475, 25. ]))[source]

linear MMSE precoding

linear_ZF(cmd='QPSK', m=4, snrdB=array([ 0., 0.25252525, 0.50505051, 0.75757576, 1.01010101, 1.26262626, 1.51515152, 1.76767677, 2.02020202, 2.27272727, 2.52525253, 2.77777778, 3.03030303, 3.28282828, 3.53535354, 3.78787879, 4.04040404, 4.29292929, 4.54545455, 4.7979798, 5.05050505, 5.3030303, 5.55555556, 5.80808081, 6.06060606, 6.31313131, 6.56565657, 6.81818182, 7.07070707, 7.32323232, 7.57575758, 7.82828283, 8.08080808, 8.33333333, 8.58585859, 8.83838384, 9.09090909, 9.34343434, 9.5959596, 9.84848485, 10.1010101, 10.35353535, 10.60606061, 10.85858586, 11.11111111, 11.36363636, 11.61616162, 11.86868687, 12.12121212, 12.37373737, 12.62626263, 12.87878788, 13.13131313, 13.38383838, 13.63636364, 13.88888889, 14.14141414, 14.39393939, 14.64646465, 14.8989899, 15.15151515, 15.4040404, 15.65656566, 15.90909091, 16.16161616, 16.41414141, 16.66666667, 16.91919192, 17.17171717, 17.42424242, 17.67676768, 17.92929293, 18.18181818, 18.43434343, 18.68686869, 18.93939394, 19.19191919, 19.44444444, 19.6969697, 19.94949495, 20.2020202, 20.45454545, 20.70707071, 20.95959596, 21.21212121, 21.46464646, 21.71717172, 21.96969697, 22.22222222, 22.47474747, 22.72727273, 22.97979798, 23.23232323, 23.48484848, 23.73737374, 23.98989899, 24.24242424, 24.49494949, 24.74747475, 25. ]))[source]

linear Zero Forcing precoding Parameters ———-

loadraw()[source]

load a MIMO Nr x Nt raw data sounder file

The sounder output file is a 2 columns ASCII csv file Module (dB) ; Angle (Degree)

mulcplot(mode, **kwargs)[source]
normalize()[source]

Normalization of H

plot(frequency=True, phase=False, dB=True, cal=True, fig=[], ax=[], color='k')[source]
showgrid(**kwargs)[source]

show the data on a spatial grid

layout:[], s:50, vmin : 0, vmax: 0.5, linewidth:0, fig:[], ax:[], save:True, filename:’showgrid1’, title:’‘, save:True, dB : False, OR : np.array([3.4,0.73]), OT : np.array([5.29,6.65]), cR : np.array([0.07,0]), cT : np.array([-0.07,0]), target : np.array([]), gating : False, dynamic : 30

This function accepts a Layout as input and allows to display a projection of the spatio-delay volume on a 2D grid.

svd()[source]

singular value decomposition of matrix H

The native H matrix is currently (nr x nt x nf ). For applying a broadcasted svd a reshaping in (nf x nr x nt ) is required. In the future, it would be a good thing to define the MIMO matrix as

nf x na x nb structure from the begining

or

ns x nf x na x nb

U : nf x nr x nr D : nf x min(nr,nt) Vh : nf x nt x nt

transfer()[source]
calculate transfer matrix.

it involves H and Hd against svd() which acts only over H.

HdH : Hermitian transfer matrix (nf x nt x nt ) U : Unitary tensor (nf x nt x nt ) S : Singular values (nf x nt) V : = Ud (in that case because HdH Hermitian) (nf x nt x nt)

HdH = U L U^{dagger}

Transfered to Mchannel DONE