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)
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)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
-
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})
-
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)
-
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)
-
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
-