
Vorwort
Im Sommer 2016 konnte Ihr bescheidener Diener unter einer Gruppe anderer Studenten aufgrund einer bekannten Veranstaltung Vorlesungen von Professor Martin Haardt zu MIMO- Themen besuchen, die er im Rahmen des internationalen Masterstudiengangs "Kommunikation und Signalverarbeitung" hielt . Leider wurde ich in anderthalb von zwei Wochen ziemlich krank - und daher fielen einige Themen einfach aus meinem Verständnis heraus ... Nach einiger Zeit wurde es jedoch zu meinem Hobby, die Grundlagen von MIMO zu analysieren - den Fall nicht unvollendet zu lassen.
All dies hat sich nach und nach zu einer Reihe kleiner abstrakter Seminare entwickelt , deren Weitergabe wahrscheinlich falsch wäre. Und heute, zu Ehren des Kommunikationstages , möchte ich mit Ihnen das Thema der Bandbreite des MIMO-Kanals diskutieren - das Thema ist einfach, verursacht aber immer noch gewisse Schwierigkeiten für Studenten (und nicht nur für Studenten).
Es mag unbeteiligt erscheinen, dass eine Erhöhung der Anzahl der Empfangs- und Sendeantennen im Rahmen der oben genannten Technologie die Systembandbreite um den gleichen Betrag erhöht: Wenn Sie beispielsweise 2 Antennen auf der Empfangsseite und 2 Antennen auf der Sendeseite (MIMO 2x2) platzieren, steigt der Durchsatz definitiv an 2 mal. Aber stimmt das überhaupt in der Theorie? Versuchen wir es herauszufinden!
Eine formellere Version in Englisch finden Sie unter dem Link und in meinem GitHub-Repository .
In diesem Artikel werden die Probleme der Antennenkorrelation und andere Implementierungsprobleme nicht berücksichtigt. Wir beschränken uns auf eine destillierte Theorie - für den Anfang.
Empfangenes Signalmodell

Bevor wir über die Bandbreite sprechen, werden wir uns zunächst mit der mathematischen Beschreibung des empfangenen Signals befassen. Dieser Teil sollte sehr sorgfältig behandelt werden, da aus dieser Formel viel hervorgeht. Das empfangene Signal kann also wie folgt dargestellt werden:
wo
- Sendeleistung,
- Anzahl der Sendeantennen,
- übertragene Zeichen
- additives Rauschen und
- Matrix der Übertragungskoeffizienten des Kanals (in der Tat der Fading-Prozess).
Das übertragene Signal kann auch etwas detaillierter gemalt werden:
wo
- eines der Informationssignale (
) und
- Verstärkung eines bestimmten Ausbreitungsweges einer EM-Welle (Wegverstärkung).
Geben wir an, was die Pfadverstärkung ist:
Das Verstärken des Ausbreitungspfades (oder des Antennengewichts) bedeutet die Verteilung der Ausgangsleistung proportional zur "Stärke" eines bestimmten Pfades. Mit anderen Worten, wir möchten mehr Leistung für gute Kanäle (Ausbreitungspfade) und weniger Energie für schlechte Kanäle bereitstellen.
Das Antennengewicht ist durch die Anzahl der Sendeantennen begrenzt:
wo
Ist der Rang der Kanalmatrix.
Apropos letzteres.
Matrixdimension
macht wieder gut
wo
- Anzahl der Empfangsantennen.
Bei mehreren Zeitmessungen sieht der Kanal folgendermaßen aus:

Als Referenz:
Vielleicht möchten Sie für komplexere Berechnungen und Modelle eines der beliebtesten Tools dafür verwenden - MatLab . In diesem Fall ist zu berücksichtigen, dass dort eine etwas andere Datenstruktur verwendet wird: Die Zeilen sind Zeitmessungen (Schnappschüsse), die Anzahl der Spalten entspricht der Anzahl der Sendeantennen
, seitliche Abmessung entspricht
.
Die Formel (1) kann leicht für spezielle Fälle von MIMO angepasst werden.
MISO ( M ultiple Input S ingle Output - mehrere Sendeantennen und eine Empfangsantenne):
wo
Ist ein Vektor
.
SIMO (Single Single M ultiple O utput - mehrere Empfangsantennen und eine Sendeantenne):
wo
Ist ein Vektor 
SISO (Single Single Single Output - eine Antenne auf der Empfangs- und Sendeseite):
Es scheint einfach zu sein.
Alle weiteren Überlegungen können in zwei große Fälle unterteilt werden: Kanalzustandsinformationen (CSI - Kanalzustandsinformationen) sind dem Sender unbekannt ( CU - Kanal unbekannt) und Kanalstatusinformationen sind dem Sender bekannt ( CK - Kanal bekannt).
Oben haben wir den Fall untersucht, in dem der Kanal dem Sender unbekannt ist ( Open-Loop-Fall , Übertragung ohne Rückkopplung). Mit anderen Worten, aufgrund des Mangels an notwendigen Informationen können wir keine effektive Richtung wählen und folgen daher dem einfachsten Weg: Wir übertragen die gleiche Leistung über alle Antennen (Pfade, Ausbreitungspfade). Daher beträgt die Verstärkung jeder Pfadverstärkung 1 :
Wir wiederholen jedoch: Wir wollen mehr Leistung für gute Kanäle (Ausbreitungspfade) und weniger Energie für schlechte Kanäle bereitstellen.
Es stellt sich die Frage, wie Macht effektiv verteilt werden kann.
Wenn der Kanal bekannt ist ( geschlossener Regelkreis - mit Rückkopplung), können wir erweiterte Übertragungsszenarien mit einigen zusätzlichen Signalverarbeitungsalgorithmen verwenden. Zum Beispiel mit linearen Ansätzen wie Vorcodierung und Nachbearbeitung .
Wir werden verstehen, was die letzten beiden Begriffe bedeuten.
Wenn wir CSI auf der Sendeseite haben, d.h. Matrix
können wir genau diese Matrix mathematisch verarbeiten. Beispiel: Anwenden des SVD- Algorithmus (Singular Value Decomposition).

Beachten Sie, dass die Matrix
Ist eine Diagonalmatrix, und die Elemente ihrer Diagonale (Singularwerte) sind im Wesentlichen Übertragungskoeffizienten eindeutiger Ausbreitungspfade. Mit anderen Worten, wenn wir die Multiplikation unseres Signals mit einer Matrix singulärer Werte erreichen
eher als voller Kanal
Dann zerfällt der MIMO- Kanal in ein Array paralleler SISO- Kanäle.
Die lineare Vorcodierungsmatrix (Filter) sollte also sein
und die Matrix der linearen Nachbearbeitung (Demodulator)
( H steht für hermitische Konjugation).
Offensichtlich für den Fall mit einem unbekannten Kanal
und
gleiche Identitätsmatrizen .
Wenn wir nun alle oben genannten Punkte kennen, definieren wir das Modell des empfangenen Signals neu:
Beachten Sie Folgendes:
hat die gleichen statistischen Eigenschaften wie
;;- Eigenwerte
sind die Quadrate der Singularwerte der Kanalmatrix
(
)
Schematisch kann dies dargestellt werden als:

Abb. 1. Das Schema der Vorcodierung und Nachbearbeitung [1, S.67].

Abb. 2. Schema der modalen Zersetzung
wenn der Kanal dem Sender und Empfänger bekannt ist [1, S.67].
Die Grundlagen werden auseinander genommen - wir können direkt zur Bandbreite übergehen !
Kapazität
Ich denke, jeder, der die Informationstheorie studiert hat, erinnert sich daran, dass der Begriff Bandbreite aus dieser speziellen Disziplin zu uns gekommen ist. Normalerweise (in meinem Studentenalter) konzentrierte sich die Betrachtung auf den klassischen Fall des AWGN-Kanals, aber die Formel kann für den Fall eines MIMO-Kanals mit Fading relativ leicht abgeleitet werden.
Um die Berechnungen aus den Büchern nicht noch einmal einzugeben, habe ich versucht, alles mehr oder weniger bunt und von Hand anzuordnen - um sozusagen Lebensformeln zu geben. Ich hoffe, dass dieses Format weniger langweilig wird.
Also schreiben wir noch einmal das Signalmodell:

Fahren wir nun mit der Bestimmung des Durchsatzes durch gegenseitige Information fort .

Wir schreiben die Autokovarianzmatrix des empfangenen Signals und seiner Komponenten:

Und wir verwenden sie zur Bestimmung der Differentialentropie :

Ersetzen Sie (4) und (5) in (2):

Und jetzt ersetzen wir (6) in (1):

Wir argumentieren weiter. Nehmen Sie den ersten Fall: Der Kanal ist unbekannt (Kanal unbekannt). Dies bedeutet für uns, dass es unmöglich ist, die optimale Übertragungsrichtung zu wählen, und daher sind die übertragenen Signale unabhängig und haben die gleiche Leistung (mit gleicher Leistung). Basierend auf der Maximalbedingung (
) können wir die Autokovarianzmatrix der übertragenen Zeichen gleich der Identitätsmatrix nehmen. Dann haben wir:

Wir verwenden die folgende Eigenschaft von Determinanten:
Dies ist unser Fall, und wir können die Matrizen so austauschen
(aus EVD-Eigenschaften). Wird bleiben:

Beim Übergang von Matrizen zu Summen haben wir:

Diese Formel veranschaulicht erneut den Ansatz, MIMO als parallele SISO-Kanäle zu betrachten.
Für den Fall mit dem bekannten Kanal (Kanal bekannt) werden die Antennengewichte zur Formel hinzugefügt:

Wir schreiben auch Formeln für Sonderfälle:

Hinweis :
Für Fälle von SIMO und MISO ist es nicht umsonst, dass die Quadrate der Frobenius-Norm in der Aufzeichnung erscheinen
- Aus mathematischer Sicht entsprechen sie Eigenwerten
. Wenn Sie also schnell etwas von Hand berechnen müssen, finden Sie hier einen Weg.
Nun, ich hoffe, meine Handschrift und mein Englisch haben die Wahrnehmung von Informationen nicht wesentlich beeinträchtigt, aber lassen Sie uns dennoch über den Hauptpunkt sprechen:
- Ja, die Bandbreite des MIMO- Kanals kann als Summe der Bandbreite der SISO- Kanäle betrachtet werden.
- Dieser Betrag ist jedoch durch den Rang des Kanals begrenzt!
Wassergießalgorithmus
Wie aus der auf der Sendeseite des Kanals bekannten Bandbreitenformel (CK - Channel Known) ersichtlich ist, kann die Energieverteilung über die Antennen optimiert werden. Dazu verwenden wir den Wassergießalgorithmus ( Füllen mit Wasser ) [1, S. 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:
Testen:
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]
Nun, es sieht vernünftig aus:
1) die Anzahl der beteiligten Sendeantennen entspricht dem Rang des Kanals;
2) Die Summe der Gewichte der Antennen entspricht der Anzahl der Sendeantennen.
Zwei Grenzfälle
Und jetzt lassen Sie uns ein wenig ablenken und die Probleme zum Verständnis lösen.
Lassen Sie uns zum Beispiel herausfinden, wie groß die Koeffizienten sein werden
mit SNR tendenziell
und
(auf einer logarithmischen Skala natürlich, weil es keine negativen Potenzen gibt).
Wir erinnern uns an die Korrespondenzformel zwischen Dezibel und Zeit:
wo
- Leistung des übertragenen Signals (für unsere Aufgaben entspricht es der Symbolenergie
) und
- Rauschleistung (in unserem Problem ist gleich der spektralen Dichte des Rauschens
)
Auf einer linearen Skala wird also sein:
Wir betrachten die Grundformeln des Algorithmus:
wo
Beginnt ein Iterator mit 1,
Ist der Rang der Kanalmatrix,
- i-ter Eigenwert des "Quadrats" der Kanalmatrix. Gammas werden nach folgender Formel berechnet:
Wir beginnen zu argumentieren:
Wenn
dann
. Deshalb
. Für die erste Iteration bleibt es:
Ersatz für Gamma:
Wir fassen zusammen:
Bei unendlich großer Übertragungsenergie oder infinitesimalem Rauschen muss beispielsweise nichts Besonderes erfunden werden - wir verteilen die Leistung gleichmäßig auf die Sendeantennen (unter Berücksichtigung des Ranges der Kanalmatrix).
Wir argumentieren weiter:
Und wozu tendiert der SNR?
? Hier werden wir nicht einmal in die Mathematik gehen, wir werden logisch argumentieren: Dieser Fall entspricht entweder unendlich großem Rauschen oder null Sendeleistung. Auf diese und jene Weise funktioniert unser System also nicht. Daher verschwindet die Frage mit Gammas automatisch ...
Dies sind manchmal Fragen, die bei einer Prüfung mit einem Professor auftreten.
Durchsatz zählen (endlich!)
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)
Scheint zu funktionieren. Wir gehen zu inhaltlicheren Bewertungen über.
Ergodische Kapazität
Wie aus den obigen Beispielen hervorgeht, arbeiten wir mit zufälligen Prozessen. Und ehrlich gesagt ist es ein Fehler, in einer Implementierung Schlussfolgerungen über zufällige Prozesse zu ziehen. Selbst wenn der Kanal im statistischen Sinne konstant ist, ist eine gewisse Mittelung über einen ausreichend großen Satz erforderlich.
Hier ist das Konzept der ergodischen Kapazität für uns nützlich:
wo
bezeichnet mat. Erwartung (erwarteter Wert).
Wir modellieren.
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()

Abb. 3. Bandbreitenkurven für verschiedene Übertragungsschemata. Vergleiche mit [1, S. 74].
Das sehen wir also
- Der MIMO- Fall ist den anderen voraussichtlich überlegen, und mit zunehmendem SNR nimmt der Bedarf an Kenntnis der Kanalmatrix ab (siehe Beispiel mit Unendlichkeiten).
- SIMO ist MISO überlegen, wenn der Sender den Kanal nicht kennt (die Leistung in MISO wird auf alle Antennen verteilt, aber nicht optimal) und stimmt bei einem bekannten Kanal mit MISO überein.
- Es wird erwartet, dass SISO in den Schwanz peitscht.
Und Seine Majestät regiert über den Rang der Kanalmatrix , was es uns nicht erlaubt, die Zunahme der Anzahl der Antennen eindeutig mit der Zunahme der Übertragungsgeschwindigkeit zu vergleichen.
Solche Dinge.
Literatur
(Es gibt zwar nur ein Buch, aber was für ein Buch!)
- Paulraj, Arogyaswami, Rohit Nabar und Dhananjay Gore.
Einführung in die drahtlose Raum-Zeit-Kommunikation. Cambridge University Press, 2003.