
Prefácio
No verão de 2016, a partir de um evento bem conhecido, seu humilde servidor, entre um grupo de outros estudantes, pôde assistir a palestras do professor Martin Haardt sobre tópicos do MIMO , realizadas por ele no âmbito do programa de mestrado internacional "Comunicação e processamento de sinais" . Mas, infelizmente, uma semana e meia em duas fiquei muito doente - e, portanto, vários tópicos ficaram fora do meu escopo de compreensão ... No entanto, depois de algum tempo, analisar o básico do MIMO se tornou meu hobby - para não deixar o caso inacabado.
Pouco a pouco, tudo isso se transformou em uma série de pequenos seminários abstratos , que, provavelmente, seria errado não compartilhar. E hoje, em homenagem ao Dia da Comunicação , eu gostaria de discutir com você o tópico da largura de banda do canal MIMO - o tópico é simples, mas ainda está causando algumas dificuldades para os alunos (e não apenas para os alunos).
Pode parecer que as pessoas não estão envolvidas que um aumento no número de antenas de recepção e transmissão dentro da estrutura da tecnologia mencionada aumenta a largura de banda do sistema na mesma quantidade: por exemplo, se você colocar 2 antenas no lado de recebimento e 2 antenas no lado de transmissão (MIMO 2x2), o rendimento definitivamente aumentará 2 vezes. Mas isso é verdade em teoria? Vamos tentar descobrir!
Uma versão mais formal em inglês pode ser encontrada no link e no meu repositório GitHub .
Neste artigo, não consideraremos os problemas de correlação de antena e outros problemas de implementação. Nos limitamos a uma teoria destilada - para iniciantes.
Modelo de Sinal Recebido

Antes de começarmos a falar sobre largura de banda, trataremos primeiro da descrição matemática do sinal recebido. Esta parte deve ser tomada com muito cuidado, pois muito virá dessa fórmula. Portanto, o sinal recebido pode ser representado como:
onde
- potência do transmissor,
- número de antenas de transmissão,
- caracteres transmitidos
- ruído aditivo, e
- matriz de coeficientes de transmissão do canal (de fato, o processo de desbotamento).
O sinal transmitido também pode ser pintado com mais detalhes:
onde
- um dos sinais de informação (
) e
- amplificação de um certo caminho de propagação de uma onda EM (ganho de caminho).
Vamos declarar qual é o reforço do caminho:
Reforçar o caminho de propagação (ou o peso da antena) significa a distribuição da potência de saída proporcional à "força" de um caminho específico. Em outras palavras, queremos alocar mais energia para bons canais (caminhos de propagação) e menos energia para canais ruins.
Os pesos das antenas são limitados pelo número de antenas de transmissão:
onde
É a classificação da matriz do canal.
Falando nisso.
Dimensão da matriz
compõe
onde
- número de antenas receptoras.
Para várias medições de tempo, o canal ficará assim:

Para referência:
Talvez para cálculos e modelos mais complexos, você queira usar uma das ferramentas mais populares para isso - o MatLab . Nesse caso, vale a pena considerar que uma estrutura de dados ligeiramente diferente é usada lá: as linhas são medidas de tempo (instantâneos), o número de colunas corresponde ao número de antenas de transmissão
, a dimensão lateral corresponde a
.
A fórmula (1) pode ser facilmente adaptada para casos especiais de MIMO.
MISO (saída múltipla de entrada única - várias antenas de transmissão e uma receptora):
onde
É um vetor
.
SIMO (Única saída de múltiplos dispositivos - várias antenas receptoras e uma antena transmissora):
onde
É um vetor 
SISO (Única saída monofásica - uma antena nos lados receptor e transmissor):
Parece ser simples.
Todas as considerações adicionais podem ser divididas em dois casos grandes: as informações do estado do canal (CSI - informações do estado do canal) são desconhecidas para o transmissor ( CU - Canal desconhecido) e as informações do status do canal são conhecidas pelo transmissor ( CK - Canal conhecido).
Acima, examinamos o caso em que o canal é desconhecido para o transmissor ( caso de loop aberto , transmissão sem realimentação). Em outras palavras, devido à falta de informações necessárias, não podemos escolher nenhuma direção efetiva e, portanto, seguimos o caminho mais simples: transmitimos potência igual por todas as antenas (caminhos, caminhos de propagação). Portanto, o ganho de cada ganho de caminho é 1 :
No entanto, repetimos: queremos alocar mais energia para bons canais (caminhos de propagação) e menos energia para canais ruins .
Surge a questão: como distribuir efetivamente o poder?
Se o canal for conhecido ( caso de malha fechada - com feedback), podemos usar cenários avançados de transmissão com alguns algoritmos de processamento de sinal adicionais. Por exemplo, com abordagens lineares, como pré-codificação e pós-processamento .
Vamos entender o que os dois últimos termos significam.
Se tivermos CSI no lado da transmissão, ou seja, matriz
, podemos processar matematicamente essa mesma matriz. Por exemplo, aplicando o algoritmo SVD (Decomposição de Valor Singular).

Observe que a matriz
É uma matriz diagonal, e os elementos de sua diagonal (valores singulares) são, em essência, coeficientes de transmissão de caminhos de propagação únicos. Em outras palavras, se conseguirmos a multiplicação do nosso sinal por uma matriz de valores singulares
em vez de canal completo
, o canal MIMO se decompõe em uma matriz de canais SISO paralelos.
Portanto, a matriz de pré-codificação linear (filtro) deve ser
e a matriz de pós-processamento linear (desmodulador)
( H significa conjugação hermitiana).
Obviamente, para o caso com um canal desconhecido
e
matrizes de identidade iguais.
Agora, sabendo todas as opções acima, redefinimos o modelo do sinal recebido:
Note que:
tem as mesmas propriedades estatísticas que
;- Valores próprios
são os quadrados dos valores singulares da matriz do canal
(
)
Esquematicamente, isso pode ser representado como:

Fig. 1. O esquema de pré-codificação e pós-processamento [1, p.67].

Fig. 2. Esquema de decomposição modal
quando o canal é conhecido pelo transmissor e receptor [1, p.67].
O básico é desmontado - podemos prosseguir diretamente para a largura de banda !
Capacidade
Acho que todo mundo que estudou a teoria da informação lembra que o termo largura de banda chegou até nós nessa disciplina específica. Normalmente (na minha idade de estudante), a consideração era focada no caso clássico do canal AWGN, mas a fórmula pode ser relativamente facilmente derivada para o caso de um canal MIMO com desbotamento.
Para não redigitar os cálculos dos livros mais uma vez, tentei organizar tudo de forma mais ou menos colorida e à mão - a fim de fornecer fórmulas para a vida, por assim dizer. Espero que este formato seja menos tedioso.
Então, mais uma vez, escrevemos o modelo de sinal:

Agora, vamos determinar a taxa de transferência através de informações mútuas .

Escrevemos a matriz de autocovariância do sinal recebido e seus componentes:

E nós os usamos na determinação da entropia diferencial :

Substitua (4) e (5) em (2):

E agora substituímos (6) em (1):

Continuamos a raciocinar. Veja o primeiro caso: o canal é desconhecido (canal desconhecido). Isso significa para nós que é impossível escolher a direção de transmissão ideal e, portanto, os sinais transmitidos serão independentes e terão a mesma potência (com alimentação equi). Com base na condição máxima (
), podemos pegar a matriz de autocovariância dos caracteres transmitidos igual à matriz de identidade. Então nós temos:

Usamos a seguinte propriedade dos determinantes:
Este é o nosso caso, e podemos trocar as matrizes para que
(das propriedades EVD). Permanecerá:

Passando de matrizes para somas, temos:

Esta fórmula ilustra mais uma vez a abordagem de considerar o MIMO como canais SISO paralelos.
Para o caso do canal conhecido (canal K conhecido), os pesos da antena serão adicionados à fórmula:

Também escrevemos fórmulas para casos especiais:

Nota :
Para os casos SIMO e MISO, não é em vão que os quadrados da norma Frobenius aparecem no registro
- do ponto de vista matemático, são equivalentes a valores próprios
. Portanto, se você precisar calcular rapidamente algo à mão - aqui está uma maneira.
Bem, espero que minha caligrafia e meu inglês não interfiram muito na percepção da informação, mas, ainda assim, vamos falar sobre o ponto principal :
- Sim, a largura de banda do canal MIMO pode ser considerada como a soma da largura de banda dos canais SISO .
- No entanto, esse valor é limitado pela classificação do canal!
Algoritmo de vazamento de água
Como pode ser visto na fórmula de largura de banda conhecida no lado transmissor do canal (CK - Channel Known), a distribuição de energia nas antenas pode ser otimizada. Para isso, usamos o algoritmo Derramamento de água ( enchimento com água ) [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:
Teste:
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]
Bem, parece razoável:
1) o número de antenas de transmissão envolvidas é igual à classificação do canal;
2) a soma dos pesos das antenas é igual ao número de antenas transmissoras.
Dois casos limitantes
E agora vamos nos distrair um pouco e resolver os problemas de compreensão.
Vamos encontrar, por exemplo, quais serão os coeficientes iguais a
com o SNR tendendo a
e
(em escala logarítmica, é claro, porque não existem poderes negativos).
Recordamos a fórmula da correspondência entre decibéis e tempos:
onde
- potência do sinal transmitido (para nossas tarefas, é equivalente à energia do símbolo
) e
- potência do ruído (no nosso problema é igual à densidade espectral do ruído
)
Então, em uma escala linear será:
Examinamos as fórmulas básicas do algoritmo:
onde
É um iterador começando com 1,
É a classificação da matriz do canal,
- i-ésimo autovalor do "quadrado" da matriz do canal. Os gammas são calculados de acordo com a seguinte fórmula:
Começamos a raciocinar:
Se
então
. Portanto,
. Para a primeira iteração, ele permanece:
Substitua por gama:
Resumimos:
Com energia de transmissão infinitamente grande ou ruído infinitesimal, nada de especial precisa ser inventado, digamos assim - distribuímos uniformemente a potência entre as antenas de transmissão (levando em consideração a classificação da matriz do canal).
Nós raciocinamos ainda mais:
E o que o caso do SNR tendendo a
? Aqui nem vamos entrar em matemática, raciocinaremos logicamente: esse caso corresponde a um ruído infinitamente grande ou a uma potência de transmissão zero. Portanto, desta maneira e daquela, nosso sistema, considere, não funciona. Portanto, a questão com gama desaparece automaticamente ...
Às vezes, essas são perguntas que surgem em um exame com um professor.
Contando a taxa de transferência (finalmente!)
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)
Parece funcionar. Passamos a avaliações mais substantivas.
Capacidade ergódica
Como pode ser visto nos exemplos acima, trabalhamos com processos aleatórios. E, francamente, é um erro tirar conclusões sobre processos aleatórios em uma implementação. Mesmo que o canal seja constante no sentido estatístico, é necessária uma média de um conjunto suficientemente grande.
Aqui o conceito de capacidade ergódica é útil para nós:
onde
denota tapete. expectativa (valor esperado).
Estamos modelando.
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. Curvas de largura de banda para diferentes esquemas de transmissão. Compare com [1, p. 74]
Então nós vemos isso
- espera-se que o caso MIMO seja superior aos demais e, com o aumento do SNR, a necessidade de conhecimento da matriz do canal diminui (veja o exemplo com infinitos).
- O SIMO é superior ao MISO se o transmissor não conhece o canal (a energia no MISO é compartilhada em todas as antenas, mas não de maneira ideal) e coincide com o MISO no caso de um canal conhecido .
- SISO é esperado para chicotear na cauda.
E Sua Majestade reina sobre a classificação da matriz de canais , o que não nos permite comparar inequivocamente o aumento no número de antenas com o aumento na velocidade de transmissão.
Essas coisas.
Literatura
(embora haja um livro, mas que livro!)
- Paulraj, Arogyaswami, Rohit Nabar e Dhananjay Gore.
Introdução às comunicações sem fio no espaço-tempo. Cambridge University Press, 2003.