Prólogo
Además de mi artículo reciente, también me gustaría hablar sobre el tema de MU ( M ulti U ser) MIMO. Ya he mencionado un artículo muy famoso del profesor Haardt donde, junto con sus colegas, propone un algoritmo para separar a los usuarios en un enlace descendente basado en métodos lineales, a saber, la Diagonalización en bloque de un canal. El artículo tiene una cantidad impresionante de citas , y también es la publicación fundamental para una de las tareas del examen. Por lo tanto, ¿por qué no entender los conceptos básicos del algoritmo propuesto?

Declaración del problema.
Primero, decidamos en qué área del tema MIMO trabajaremos ahora.
Convencionalmente, todos los métodos de transferencia dentro del marco de la tecnología MIMO se pueden dividir en dos grupos principales:
El objetivo principal es aumentar la inmunidad al ruido de la transmisión. Los canales espaciales, si se simplifican, se duplican entre sí, por lo que obtenemos la mejor calidad de transmisión.
Ejemplos:
- Códigos de bloque (por ejemplo, el esquema Alamuti );
- Códigos basados en el algoritmo de Viterbi.
El objetivo principal es aumentar la velocidad de transmisión. Ya discutimos en un artículo anterior que, bajo ciertas condiciones, el canal MIMO puede considerarse como una serie de canales SISO paralelos. En realidad, esta es la idea central de la multiplexación espacial: lograr el número máximo de flujos de información independientes. El principal problema en este caso es la supresión de la interferencia entre canales (interferencia entre canales) , para lo cual existen varias clases de soluciones:
- separación horizontal del canal;
- vertical (por ejemplo, el algoritmo V-BLAST);
- diagonal (por ejemplo, el algoritmo D-BLAST).
Pero esto, por supuesto, no es todo.
La idea de multiplexación espacial se puede ampliar: para dividir no solo los canales, sino también los usuarios (SDMA - Acceso múltiple de la división espacial).

( enlace a la fuente de la ilustración )
En consecuencia, en este caso, ya es necesario luchar contra la interferencia entre usuarios . Para esto, se propuso un algoritmo llamado Block diagonalization Zero-Forcing , que estamos considerando hoy.
Descripción matemática
Comencemos, como antes, con el modelo de señal recibida. Más precisamente, mostramos en el diagrama de dónde y qué proviene:

La matriz de canales en este caso tiene la forma:
con el número total de antenas de transmisión
, y el número total de antenas receptoras
.
Importante :
Este algoritmo solo se puede aplicar siempre que el número de antenas de transmisión sea mayor o igual que el número total de antenas de recepción:
Esta condición afecta directamente las propiedades de diagonalización.
Entonces, el modelo de los símbolos recibidos (señales) se puede escribir en forma de vector como:
Sin embargo, es más interesante mirar la fórmula para un usuario específico:
De hecho:
Es una señal útil para el k-ésimo usuario,
- esto es interferencia de otros usuarios,
- ruido aditivo.
Entonces llegamos a la formulación de la tarea principal:
Puedes encontrar tales matrices
para que la parte de interferencia llegue a cero!
Esto es lo que haremos.
Descripción del algoritmo
Realizaremos la descripción con un ejemplo, y como ilustración daré capturas de pantalla de primera mano , comentando un poco sobre ellas.
Considere el primer usuario:

Hablemos de los pasos principales:
- Hacemos una matriz
de las matrices de canales de todos los demás usuarios.
Adelante

Y así, este procedimiento se repetirá para cada usuario. ¿No es esta la magia de las matemáticas: usando los métodos de álgebra lineal, resolvemos problemas completamente técnicos!
Tenga en cuenta que en la práctica no solo se utilizan las matrices de codificación previa obtenidas, sino también las matrices de procesamiento posterior y la matriz de valores singulares (ver diapositivas ). Este último, por ejemplo, para equilibrar la potencia de acuerdo con el algoritmo de vertido de agua ya conocido.
Modelamos el algoritmo
Creo que no será superfluo realizar una pequeña simulación para consolidar el resultado. Para hacer esto, usaremos Python 3, a saber:
import numpy as np
para cálculos básicos y:
import pandas as pd
para mostrar el resultado.
Para no amontonarse, pondré la fuente aquí 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):
Supongamos que tenemos 8 antenas transmisoras y 3 usuarios que tienen 3, 2 y 3 antenas receptoras, respectivamente:
Mrs_arr = [3,2,3]
Inicializamos nuestra clase y aplicamos los métodos apropiados:
BD = ZeroForcingBD(H, Mrs_arr) F, D, Hs = BD.process() FF = BD.obtain_matrices()
Traemos a una forma legible:
df = pd.DataFrame(np.dot(H, FF)) df[abs(df).lt(1e-14)] = 0
Y tomemos un pequeño impulso para mayor claridad (aunque puede sin ella):
print(pd.DataFrame(np.round(np.real(df),100)))
Deberías obtener algo como esto:

En realidad, aquí están los bloques, aquí está y la diagonalización. Y minimizando la interferencia.
Tales cosas
Literatura
- Spencer, Quentin H., A. Lee Swindlehurst y Martin Haardt. "Métodos de forzamiento cero para la multiplexación espacial de enlace descendente en canales MIMO multiusuario". Transacciones IEEE sobre procesamiento de señales 52.2 (2004): 461-471.
- Martin Haard " Procesamiento de transmisión robusto para sistemas MIMO multiusuario "
PS
¡Al personal docente y a la fraternidad estudiantil de mi profesión nativa les saludo!