Préface
En plus de mon récent article, je voudrais également parler du sujet MU ( M ulti U ser) MIMO. J'ai déjà mentionné le très célèbre article du professeur Haardt où, avec ses collègues, il propose un algorithme de séparation des utilisateurs dans une liaison descendante basé sur des méthodes linéaires, à savoir la diagonalisation de bloc d'un canal. L'article contient un nombre impressionnant de citations et constitue également la publication fondamentale pour l'une des tâches d'examen. Par conséquent, pourquoi ne pas découvrir les bases de l'algorithme proposé?

Énoncé du problème
Tout d'abord, décidons dans quel domaine du thème MIMO nous allons travailler maintenant.
Classiquement, toutes les méthodes de transfert dans le cadre de la technologie MIMO peuvent être divisées en deux groupes principaux:
L'objectif principal est d'augmenter l'immunité au bruit de la transmission. Les canaux spatiaux, s'ils sont simplifiés, se dupliquent, ce qui nous permet d'obtenir la meilleure qualité de transmission.
Exemples:
- Codes de bloc (par exemple, le schéma Alamuti );
- Codes basés sur l'algorithme de Viterbi.
L'objectif principal est d'augmenter la vitesse de transmission. Nous avons déjà expliqué dans un article précédent que sous certaines conditions le canal MIMO peut être considéré comme une série de canaux SISO parallèles. En fait, c'est l'idée centrale du multiplexage spatial: obtenir le maximum de flux d'informations indépendants. Le problème principal dans ce cas est la suppression des interférences inter-canaux (inter-canaux) , pour lesquelles il existe plusieurs classes de solutions:
- séparation horizontale des canaux;
- vertical (par exemple, l'algorithme V-BLAST);
- diagonale (par exemple, l'algorithme D-BLAST).
Mais ce n'est bien sûr pas tout.
L'idée du multiplexage spatial peut être élargie: diviser non seulement les canaux, mais aussi les utilisateurs (SDMA - Space Division Multiple Access).

( lien vers la source de l'illustration )
Par conséquent, dans ce cas, il est déjà nécessaire de lutter contre les interférences entre utilisateurs . Pour cela, un algorithme appelé Block diagonalization Zero-Forcing a été proposé , que nous envisageons aujourd'hui.
Description mathématique
Commençons, comme précédemment, par le modèle de signal reçu. Plus précisément, nous montrons sur le diagramme d'où et d'où vient:

La matrice des canaux dans ce cas a la forme:
avec le nombre total d'antennes d'émission
et le nombre total d'antennes de réception
.
Important :
Cet algorithme ne peut être appliqué que si le nombre d'antennes d'émission est supérieur ou égal au nombre total d'antennes de réception:
Cette condition affecte directement les propriétés de la diagonalisation.
Ainsi, le modèle des symboles (signaux) reçus peut être écrit sous forme vectorielle comme:
Cependant, il est plus intéressant de regarder la formule pour un utilisateur spécifique:
En fait:
Est un signal utile pour le k-ème utilisateur,
- c'est une interférence d'autres utilisateurs,
- bruit additif.
Nous arrivons donc à la formulation de la tâche principale:
Vous pouvez trouver de telles matrices
de sorte que la partie d'interférence passe à zéro!
Voilà ce que nous allons faire.
Description de l'algorithme
Nous allons effectuer la description avec un exemple, et à titre d'illustration, je donnerai des captures d'écran de première main , en les commentant un peu.
Considérez le premier utilisateur:

Parlons des principales étapes:
- Nous faisons une matrice
des matrices de canaux de tous les autres utilisateurs.
Allez-y:

Et donc cette procédure sera répétée pour chaque utilisateur. N'est-ce pas la magie des mathématiques: en utilisant les méthodes de l'algèbre linéaire, nous résolvons des problèmes complètement techniques!
Notez qu'en pratique, non seulement les matrices de pré-codage obtenues sont utilisées, mais aussi les matrices de post-traitement et la matrice de valeurs singulières (voir diapositives ). Ce dernier, par exemple, permet d'équilibrer la puissance selon l' algorithme de coulée d'eau déjà connu.
Nous modélisons l'algorithme
Je pense qu'il ne sera pas superflu d'effectuer une petite simulation pour consolider le résultat. Pour ce faire, nous utiliserons Python 3, à savoir:
import numpy as np
pour les calculs de base, et:
import pandas as pd
pour afficher le résultat.
Afin de ne pas empiler, je vais mettre la source ici class ZeroForcingBD: def __init__(self, H, Mrs_arr): Mr, Mt = np.shape(H) self.Mr = Mr self.Mt = Mt self.H = H self.Mrs_arr = Mrs_arr def __routines(self, H, mr, shift):
Supposons que nous ayons 8 antennes d'émission et 3 utilisateurs qui ont respectivement 3, 2 et 3 antennes de réception:
Mrs_arr = [3,2,3]
Nous initialisons notre classe et appliquons les méthodes appropriées:
BD = ZeroForcingBD(H, Mrs_arr) F, D, Hs = BD.process() FF = BD.obtain_matrices()
Nous apportons sous une forme lisible:
df = pd.DataFrame(np.dot(H, FF)) df[abs(df).lt(1e-14)] = 0
Et prenons un peu d'ascenseur pour plus de clarté (bien que vous puissiez vous en passer):
print(pd.DataFrame(np.round(np.real(df),100)))
Vous devriez obtenir quelque chose comme ceci:

En fait, ici ce sont des blocs, ça y est et la diagonalisation. Et minimiser les interférences.
De telles choses.
Littérature
- Spencer, Quentin H., A. Lee Swindlehurst et Martin Haardt. "Méthodes de forçage nul pour le multiplexage spatial en liaison descendante dans les canaux MIMO multi-utilisateurs." Transactions IEEE sur le traitement du signal 52.2 (2004): 461-471.
- Martin Haard " Traitement de transmission robuste pour les systèmes MIMO multi-utilisateurs "
PS
Au corps enseignant et à la fraternité étudiante de ma profession natale, je dis bonjour!