Nous estimons le débit du canal MIMO (l'algorithme de versement d'eau est inclus)


Préface


Au cours de l'été 2016, à partir d'un événement bien connu, votre humble serviteur, parmi un groupe d'autres étudiants, a pu assister à des conférences du professeur Martin Haardt sur des sujets MIMO , organisées par lui dans le cadre du programme de master international "Communication et traitement du signal" . Mais, malheureusement, une semaine et demie sur deux, je suis tombé assez malade - et donc un certain nombre de sujets sont tombés hors de mon champ de compréhension ... Cependant, après un certain temps, analyser les bases du MIMO est devenu mon hobby - ne pas laisser l'affaire inachevée.


Petit à petit, tout cela s'est transformé en une série de petits séminaires abstraits , qu'il serait probablement faux de ne pas partager. Et aujourd'hui, en l'honneur de la Journée de la communication , je voudrais discuter avec vous du sujet de la bande passante du canal MIMO - un sujet simple, mais qui pose toujours certaines difficultés aux étudiants (et pas seulement aux étudiants).


Il peut sembler aux gens non impliqués qu'une augmentation du nombre d'antennes de réception et d'émission dans le cadre de la technologie susmentionnée augmente la bande passante du système de la même quantité: par exemple, si vous mettez 2 antennes du côté de réception et 2 antennes du côté d'émission (MIMO 2x2), le débit augmentera définitivement 2 fois. Mais est-ce même vrai en théorie? Essayons de le comprendre!


Une version plus formelle en anglais peut être trouvée sur le lien et dans mon référentiel GitHub .
Dans cet article, nous ne considérerons pas les problèmes de corrélation d'antenne et d'autres problèmes d'implémentation. Nous nous limitons à une théorie distillée - pour commencer.

Modèle de signal reçu



Avant de commencer à parler de bande passante, nous traiterons d'abord de la description mathématique du signal reçu. Cette partie doit être prise avec beaucoup de soin, car beaucoup proviendra de cette formule. Ainsi, le signal reçu peut être représenté comme:


\ mathbf {y} = \ sqrt {\ frac {P} {M_T}} \ mathbf {H} \ mathbf {s} + \ mathbf {n} \ qquad (1)

P - puissance d'émission, M_T - nombre d'antennes d'émission, \ mathbf {s} - caractères transmis \ mathbf {n} - bruit additif, et \ mathbf {H} - matrice des coefficients de transmission du canal (en fait, le processus d'évanouissement).


Le signal transmis peut également être peint un peu plus en détail:


s_i = \ gamma_i d_i \ quad i = 1,2, .. M_T \ qquad (2)

di - l'un des signaux d'information ( E \ {\ mathbf {d} \ mathbf {d} ^ H \} = M_T ) et \ gamma_i - amplification d'un certain chemin de propagation d'une onde EM (gain de chemin).


Indiquons ce qu'est le renforcement du chemin:
Le renforcement du chemin de propagation (ou du poids de l'antenne) signifie la distribution de la puissance de sortie proportionnelle à la "force" d'un chemin particulier. En d'autres termes, nous voulons allouer plus de puissance aux bons canaux (chemins de propagation) et moins d'énergie aux mauvais canaux.


Le poids des antennes est limité par le nombre d'antennes d'émission:


\ sum ^ r_ {i = 1} \ gamma_i = M_T \ qquad (3)

r Est le rang de la matrice de canaux.


En parlant de ce dernier.


Dimension de la matrice \ mathbf {H} compose M_R \ fois M_TM_R - nombre d'antennes de réception.
Pour plusieurs mesures de temps, le canal ressemblera à ceci:



Pour référence:
Peut-être pour des calculs et des modèles plus complexes, vous voudrez peut-être utiliser l'un des outils les plus populaires pour cela - MatLab . Dans ce cas, il convient de considérer qu'une structure de données légèrement différente y est utilisée: les lignes sont des mesures de temps (instantanés), le nombre de colonnes correspond au nombre d'antennes d'émission M_T , la dimension latérale correspond à M_R .

La formule (1) peut facilement être adaptée pour des cas particuliers de MIMO.


MISO ( M ultiple Input S ingle Output - plusieurs antennes d'émission et une de réception):


y = \ sqrt {\ frac {P} {M_T}} \ mathbf {h} \ mathbf {s} + n \ qquad (4)

\ mathbf {h} Est un vecteur 1 \ fois M_T .


SIMO (sortie unique à un seul M ultiple - plusieurs antennes de réception et une antenne d'émission):


y = \ sqrt {P} \ mathbf {h} s + \ mathbf {n} \ qquad (5)

\ mathbf {h} Est un vecteur M_R \ fois 1


SISO ( S ingle Single S ingle O utput - une antenne côté réception et émission):


y = \ sqrt {P} hs + n \ qquad (6)

Cela semble simple.


Toute autre considération peut être divisée en deux grands cas: les informations d'état de canal (CSI - informations d'état de canal) sont inconnues de l' émetteur ( CU - Canal inconnu) et les informations d'état de canal sont connues de l' émetteur ( CK - Canal connu).


Ci-dessus, nous avons examiné le cas où le canal est inconnu de l'émetteur ( cas en boucle ouverte , transmission sans retour). En d'autres termes, faute d'informations nécessaires, nous ne pouvons choisir aucune direction efficace, et donc nous suivons le chemin le plus simple: nous transmettons une puissance égale à travers toutes les antennes (chemins, chemins de propagation). Par conséquent, le gain de chaque gain de chemin est de 1 :


\ gamma_i = 1, \ quad i = 1,2, .. M_T \ qquad (7)

Cependant, nous répétons: nous voulons allouer plus de puissance aux bons canaux (chemins de propagation) et moins d' énergie aux mauvais canaux.


La question se pose: comment répartir efficacement le pouvoir?


Si le canal est connu ( cas en boucle fermée - avec rétroaction), nous pouvons utiliser des scénarios de transmission avancés avec quelques algorithmes de traitement du signal supplémentaires. Par exemple, avec des approches linéaires telles que le pré-codage et le post-traitement .


Nous comprendrons ce que signifient les deux derniers termes.


Si nous avons CSI du côté émission, c'est-à-dire matrice \ mathbf {H} , nous pouvons traiter mathématiquement cette matrice même. Par exemple, appliquer l'algorithme SVD (Singular Value Decomposition).



Notez que la matrice \ mathbf {\ Sigma} Est une matrice diagonale, et les éléments de sa diagonale (valeurs singulières) sont, par essence, des coefficients de transmission de chemins de propagation uniques. En d'autres termes, si nous réalisons la multiplication de notre signal par une matrice de valeurs singulières \ mathbf {\ Sigma} plutôt que le canal complet \ mathbf {H} , le canal MIMO se décomposera en un réseau de canaux SISO parallèles.


La matrice de précodage linéaire (filtre) doit donc être \ mathbf {F} = \ mathbf {V} _s , et la matrice de post-traitement linéaire (démodulateur) \ mathbf {D} = \ mathbf {U} ^ H_s ( H signifie conjugaison hermitienne).


De toute évidence, pour le cas avec un canal inconnu \ mathbf {F} et \ mathbf {D} matrices d' identité égales.

Maintenant, sachant tout ce qui précède, redéfinissons le modèle du signal reçu:


\ mathbf {Dy} = \ mathbf {D} \ left (\ sqrt {\ frac {P} {M_t}} \ mathbf {H} \ mathbf {F} \ mathbf {s} + \ mathbf {n} \ right) = \ mathbf {U} ^ H_s \ mathbf {y} = \ sqrt {\ frac {P} {M_t}} \ mathbf {U} ^ H_s \ mathbf {H} \ mathbf {V} _s \ mathbf {s} + \ mathbf {U} ^ H_s \ mathbf {n} = \ sqrt {\ frac {P} {M_t}} \ mathbf {\ Sigma} _s \ mathbf {s} + \ mathbf {\ hat {n}} = \ mathbf {\ hat {y}} \ qquad (8)

Notez que:


  • \ mathbf {\ hat {n}} a les mêmes propriétés statistiques que \ mathbf {n} ;
  • Valeurs propres \ mathbf {HH} ^ H sont les carrés des valeurs singulières de la matrice de canal \ mathbf {H} ( \ sigma_i = \ sqrt {\ lambda_i} )

Schématiquement, cela peut être représenté comme:


sch

Fig. 1. Le schéma de pré-codage et de post-traitement [1, p.67].


parall

Fig. 2. Schéma de décomposition modale \ mathbf {H} lorsque le canal est connu de l'émetteur et du récepteur [1, p.67].


Les bases sont démontées - on peut passer directement à la bande passante !


Capacité


Je pense que tous ceux qui ont étudié la théorie de l'information se souviennent que le terme bande passante nous est venu de cette discipline particulière. Habituellement (à mon âge étudiant), la considération était concentrée sur le cas classique du canal AWGN, mais la formule peut être dérivée relativement facilement pour le cas d'un canal MIMO avec décoloration.


Afin de ne pas retaper les calculs des livres, j'ai essayé de tout arranger plus ou moins coloré et à la main - pour donner des formules de vie, pour ainsi dire. J'espère que ce format sera moins fastidieux.

Donc, encore une fois, nous écrivons le modèle de signal:



Passons maintenant à la détermination du débit grâce aux informations mutuelles .



Nous écrivons la matrice d'autocovariance du signal reçu et de ses composants:



Et nous les utilisons pour déterminer l' entropie différentielle :



Remplacer (4) et (5) dans (2):



Et maintenant, nous substituons (6) à (1):



Nous continuons de raisonner. Prenons le premier cas: le canal est inconnu ( C hannel U inconnu). Cela signifie pour nous qu'il est impossible de choisir la direction de transmission optimale, et donc les signaux transmis seront indépendants et auront la même puissance (équi-alimenté). Sur la base de la condition maximale ( Tr \ {\ mathbf {R} _ {ss} \} = M_T ), on peut prendre la matrice d'autocovariance des caractères transmis égale à la matrice d'identité. Ensuite, nous avons:



Nous utilisons la propriété de déterminants suivante:


det \ left (\ mathbf {I} _m + \ mathbf {AB} \ right) = det \ left (\ mathbf {I} _n + \ mathbf {BA} \ right)

C'est notre cas, et nous pouvons échanger les matrices afin que \ mathbf {Q} \ mathbf {Q} ^ H = \ mathbf {I} (à partir des propriétés EVD). Restera:



En passant des matrices aux sommes, nous avons:



Cette formule illustre une fois de plus l'approche consistant à considérer le MIMO comme des canaux SISO parallèles.
Pour le cas avec le canal connu ( C hannel K connu), les poids d'antenne seront ajoutés à la formule:



Nous écrivons également des formules pour des cas particuliers:



Remarque :
Pour les cas de SIMO et MISO, ce n'est pas en vain que les carrés de la norme Frobenius apparaissent dans le dossier || \ mathbf {h} || _F ^ 2 - d'un point de vue mathématique, ils sont équivalents aux valeurs propres \ mathbf {h} \ mathbf {h} ^ H . Par conséquent, si vous devez calculer rapidement quelque chose à la main - voici un moyen.

Eh bien, j'espère que mon écriture et mon anglais n'interfèrent pas beaucoup avec la perception de l'information, mais quand même, parlons du point principal :


  • Oui, la bande passante du canal MIMO peut être considérée comme la somme de la bande passante des canaux SISO .
  • Cependant, ce montant est limité par le rang de la chaîne!

Algorithme de versement d'eau


Comme le montre la formule de bande passante connue du côté émission du canal (CK - Channel Known), la distribution d'énergie sur les antennes peut être optimisée. Pour ce faire, nous utilisons l'algorithme Water-versing ( remplissage d'eau ) [1, p. 68-69]:


import numpy as np from numpy import linalg as LA import matplotlib.pyplot as plt def waterpouring(Mt, SNR_dB, H_chan): SNR = 10**(SNR_dB/10) r = LA.matrix_rank(H_chan) H_sq = np.dot(H_chan,np.matrix(H_chan, dtype=complex).H) lambdas = LA.eigvals(H_sq) lambdas = np.sort(lambdas)[::-1] p = 1; gammas = np.zeros((r,1)) flag = True while flag == True: lambdas_r_p_1 = lambdas[0:(r-p+1)] inv_lambdas_sum = np.sum(1/lambdas_r_p_1) mu = ( Mt / (r - p + 1) ) * ( 1 + (1/SNR) * inv_lambdas_sum) for idx, item in enumerate(lambdas_r_p_1): gammas[idx] = mu - (Mt/(SNR*item)) if gammas[rp] < 0: #due to Python starts from 0 gammas[rp] = 0 #due to Python starts from 0 p = p + 1 else: flag = False res = [] for gamma in gammas: res.append(float(gamma)) return np.array(res) 

Test:


 Mt = 3 SNR_db = 10 H_chan = np.array([[1,0,2],[0,1,0], [0,1,0]], dtype = float) gammas = waterpouring(Mt, SNR_db, H_chan) print('Rank of the matrix: '+str(LA.matrix_rank(H_chan))) print('Gammas:\n'+str(gammas)) >>> Rank of the matrix: 2 >>> Gammas: >>> [1.545 1.455] 

Eh bien, cela semble raisonnable:
1) le nombre d'antennes d'émission concernées est égal au rang du canal;
2) la somme des poids des antennes est égale au nombre d'antennes d'émission.


Deux cas limites


Et maintenant, soyons un peu distraits et résolvons les problèmes de compréhension.


Trouvons, par exemple, ce que les coefficients seront égaux à \ gamma_i avec SNR tendant à + \ infty et - \ infty (sur une échelle logarithmique, bien sûr, car il n'y a pas de pouvoirs négatifs).


On rappelle la formule de correspondance entre décibels et temps:


SNR_ {dB} = 10log_ {10} \ left (\ frac {S} {N} \ right)

S - puissance du signal transmis (pour nos tâches, elle équivaut à l'énergie du symbole E_s ) et N - puissance du bruit (dans notre problème est égal à la densité spectrale du bruit N_0 )


Donc, sur une échelle linéaire sera:


\ frac {E_s} {N_0} \ equiv \ frac {S} {N} = 10 ^ {SNR_ {dB} / 10}

Nous regardons les formules de base de l'algorithme:


\ mu = \ frac {M_T} {(r-p + 1)} \ left [1 + \ frac {N_0} {E_s} \ sum_ {i = 1} ^ {r-p + 1} \ frac {1} {\ lambda_i} \ droite]

p Est un itérateur commençant par 1, r Est le rang de la matrice des canaux, \ lambda_i - i-ème valeur propre du "carré" de la matrice de canal. Les gammas sont calculés à l'aide de la formule suivante:


\ gamma_i = \ left (\ mu - \ frac {M_TN_0} {E_s \ lambda_i} \ right) \ quad i = 1,2, ..., r-p + 1

Nous commençons à raisonner:


Si SNR_ {dB} \ à + \ infty alors \ frac {E_s} {N_0} \ to + \ infty . Par conséquent \ frac {N_0} {E_s} \ à 0 . Pour la première itération, il reste:


\ mu = \ frac {M_T} {r}

Substitut au gamma:


\ gamma_i = \ mu = \ frac {M_T} {r} \ quad i = 1,2, ..., r

Nous résumons:


Avec une énergie de transmission infiniment grande ou un bruit infinitésimal, rien de spécial n’a besoin d’être inventé, disons-le - nous répartissons également la puissance entre les antennes de transmission (en tenant compte du rang de la matrice des canaux).


Nous raisonnons plus loin:


Et que signifie le cas du SNR - \ infty ? Ici nous n'entrerons même pas dans les mathématiques, nous raisonnerons logiquement: ce cas correspond soit à un bruit infiniment grand soit à une puissance d'émission nulle. Donc, de cette façon et cela, notre système, considérons, ne fonctionne pas. Par conséquent, la question avec les gammas disparaît automatiquement ...


Ce sont parfois des questions que l'on rencontre lors d'un examen avec un professeur.


Compter le débit (enfin!)


 def siso_capacity(H_chan, SNR_dB): SNR = 10**(SNR_dB/10) c = np.log2(1 + SNR*(np.abs(H_chan)**2)) return c def openloop_capacity(H_chan, SNR_dB): SNR = 10**(SNR_dB/10) Mt = np.shape(H_chan)[1] H_sq = np.dot(H_chan,np.matrix(H_chan, dtype=complex).H) lambdas = LA.eigvals(H_sq) lambdas = np.sort(lambdas)[::-1] c = 0 for eig in lambdas: c = c + np.log2(1 + SNR*eig/Mt) return np.real(c) def closedloop_capacity(H_chan, SNR_dB): SNR = 10**(SNR_dB/10) Mt = np.shape(H_chan)[1] H_sq = np.dot(H_chan,np.matrix(H_chan, dtype=complex).H) lambdas = LA.eigvals(H_sq) lambdas = np.real(np.sort(lambdas))[::-1] c = 0 gammas = waterpouring(Mt, SNR_dB, H_chan) for idx, item in enumerate(lambdas): c = c + np.log2(1 + SNR*item*gammas[idx]/Mt) return np.real(c) Mr = 4 Mt = 4 H_chan = (np.random.randn(Mr,Mt) \ + 1j*np.random.randn(Mr, Mt))/np.sqrt(2) #Rayleigh flat fading c = openloop_capacity(H_chan, 10) print(c) c = closedloop_capacity(H_chan, 10) print(c) c = siso_capacity(H_chan[0,0], 10) print(c) >>> 11.978909197556913 >>> 12.342571770086721 >>> 3.9058582578551193 

Semble fonctionner. Nous passons à des évaluations plus substantielles.


Capacité ergodique


Comme le montrent les exemples ci-dessus, nous travaillons avec des processus aléatoires. Et, franchement, c'est une erreur de tirer des conclusions sur les processus aléatoires dans une implémentation. Même si le canal est constant au sens statistique, une moyenne sur un ensemble suffisamment grand est nécessaire.


Ici, le concept de capacité ergodique nous est utile:


\ hat {C} = E \ left \ {C \ right \} \ qquad (9)

E \ {* \} désigne le mat. attente (valeur attendue).


Nous modélisons.


 Mr = 4 Mt = 4 counter = 1000 SNR_dBs = [i for i in range(1, 21)] C_MIMO_CU = np.empty((len(SNR_dBs), counter)) C_MIMO_CK = np.empty((len(SNR_dBs), counter)) C_SISO = np.empty((len(SNR_dBs), counter)) C_SIMO = np.empty((len(SNR_dBs), counter)) C_MISO_CU = np.empty((len(SNR_dBs), counter)) C_MISO_CK = np.empty((len(SNR_dBs), counter)) for c in range(counter): H_MIMO = (np.random.randn(Mr,Mt) + 1j*np.random.randn(Mr, Mt))/np.sqrt(2) H_SISO = H_MIMO[0,0] H_SIMO = H_MIMO[:,0].reshape(Mr,1) H_MISO = H_MIMO[0,:].reshape(1,Mt) for idx, SNR_dB in enumerate(SNR_dBs): C_MIMO_CU[idx, c] = openloop_capacity(H_MIMO, SNR_dB) C_MIMO_CK[idx, c] = closedloop_capacity(H_MIMO, SNR_dB) C_SISO[idx, c] = siso_capacity(H_SISO, SNR_dB) C_SIMO[idx, c] = openloop_capacity(H_SIMO, SNR_dB) C_MISO_CU[idx, c] = openloop_capacity(H_MISO, SNR_dB) C_MISO_CK[idx, c] = closedloop_capacity(H_MISO, SNR_dB) C_MIMO_CU_erg = np.mean(C_MIMO_CU, axis=1) C_MIMO_CK_erg = np.mean(C_MIMO_CK, axis=1) C_SISO_erg = np.mean(C_SISO, axis=1) C_SIMO_erg = np.mean(C_SIMO, axis=1) C_MISO_CU_erg = np.mean(C_MISO_CU, axis=1) C_MISO_CK_erg = np.mean(C_MISO_CK, axis=1) plt.figure(figsize=(7, 5), dpi=600) plt.plot(SNR_dBs, C_MIMO_CU_erg,'g-o', label='$M_R=4$, $M_T=4$ (CU)') plt.plot(SNR_dBs, C_MIMO_CK_erg,'g-v', label='$M_R=4$, $M_T=4$ (CK)') plt.plot(SNR_dBs, C_MISO_CU_erg, 'm-o', label='$M_R=1$, $M_T=4$ (CU)') plt.plot(SNR_dBs, C_MISO_CK_erg, 'm-v', label='$M_R=1$, $M_T=4$ (CK)') plt.plot(SNR_dBs, C_SISO_erg, 'k-', label='$M_R=1$, $M_T=1$') plt.plot(SNR_dBs, C_SIMO_erg, 'c-', label='$M_R=4$, $M_T=1$') plt.title("Ergodic Capacity") plt.xlabel('SNR (dB)') plt.ylabel('Capacity (bps/Hz)') plt.legend() plt.minorticks_on() plt.grid(which='major') plt.grid(which='minor', linestyle=':') plt.show() 


Fig.3. Courbes de bande passante pour différents schémas de transmission. Comparer avec [1, p. 74].


Nous voyons donc que


  • on s'attend à ce que le cas MIMO soit supérieur aux autres, et avec l'augmentation du SNR, le besoin de connaître la matrice des canaux diminue (voir l'exemple avec les infinis).
  • SIMO est supérieur à MISO si l'émetteur ne connaît pas le canal (la puissance dans MISO est partagée entre toutes les antennes, mais pas de manière optimale) et coïncide avec MISO dans le cas d'un canal connu .
  • SISO devrait fouetter la queue.

Et Sa Majesté règne sur le rang de la matrice des canaux , ce qui ne nous permet pas de comparer sans ambiguïté l'augmentation du nombre d'antennes avec l'augmentation de la vitesse de transmission.


De telles choses.


Littérature


(bien qu'il n'y ait qu'un seul livre, mais quel livre!)


  1. Paulraj, Arogyaswami, Rohit Nabar et Dhananjay Gore.
    Introduction aux communications sans fil spatio-temporelles. Cambridge University Press, 2003.

Source: https://habr.com/ru/post/fr448570/


All Articles