16-QAM mithilfe von MATLAB untersuchen
Dieses Beispiel veranschaulicht, wie mithilfe einer Kommunikationsverbindung, die aus einem Basisband-Modulator, -Kanal und -Demodulator besteht, ein Datenstrom verarbeitet wird. Im Beispiel werden ein Teil der Zufallsdaten in einem Stamm-Blatt-Diagramm und die übertragenen und die empfangenen Signale in Konstellationsdiagrammen dargestellt und die Bitfehlerrate (Bit Error Rate, BER) berechnet. Informationen zum Hinzufügen eines Impulsformungsfilters zur Kommunikationsverbindung finden Sie im Beispiel Impulsformung bei einem 16-QAM-Signal verwenden. Informationen zum Hinzufügen der Vorwärtsfehlerkorrektur zur Kommunikationsverbindung mit Impulsformfilterung finden Sie im Beispiel Vorwärtsfehlerkorrektur bei einem 16-QAM-Signal verwenden.
Zufallssignal modulieren
Das Modulationsschema verwendet Basisband-16-QAM und das Signal durchläuft einen Additive-White-Gaussian-Noise-(AWGN-)Kanal (AWGN = additives weißes Gaußsches Rauschen). In der Basissimulation verwenden die Operationen die folgenden Communications Toolbox™- und MATLAB®-Funktionen.
rng
: Steuert die Generierung von Zufallszahlenrandi
: Generiert einen Zufallsdatenstrombit2int
: Konvertiert die binären Daten in Symbole ganzzahliger Werteqammod
: Moduliert mit 16-QAMcomm.AWGNChannel
: Beeinflusst mit AWGN die übertragenen Datenscatterplot
: Erstellt Konstellationsdiagrammeqamdemod
: Demoduliert mit 16-QAMint2bit
: Konvertiert die Symbole ganzzahliger Werte in binäre Datenbiterr
: Berechnet die BER des Systems
Strom zufälliger binärer Daten generieren
Normalerweise wird ein Signal in MATLAB als Vektor oder Matrix dargestellt. Die Funktion randi
erstellt einen Spaltenvektor, der die Werte eines Stroms binärer Daten enthält. Die Länge dieses Binärdatenstroms (also die Anzahl der Zeilen im Spaltenvektor) wird anfänglich auf 30.000 festgelegt.
Definieren Sie die Parameter.
M = 16; % Modulation order (alphabet size or number of points in signal constellation) k = log2(M); % Number of bits per symbol n = 30000; % Number of bits to process sps = 1; % Number of samples per symbol (oversampling factor)
Verwenden Sie die Funktion rng
mit ihren Standardeinstellungen oder legen Sie einen statischen Startwert fest, damit das Beispiel wiederholbare Ergebnisse generiert. Verwenden Sie anschließend die Funktion randi
, um zufällige binäre Daten zu generieren.
rng default; dataIn = randi([0 1],n,1); % Generate vector of binary data
Verwenden Sie ein Stamm-Blatt-Diagramm, um die Binärwerte der ersten 40 Bits des Stroms zufälliger binärer Daten anzuzeigen. Verwenden Sie den Doppelpunkt-Operator (:
) im Aufruf der Funktion stem
, um einen Teil des binären Vektors auszuwählen.
stem(dataIn(1:40),'filled'); title('Random Bits'); xlabel('Bit Index'); ylabel('Binary Value');
Binäre Daten in Symbole ganzzahliger Werte konvertieren
In der Standardkonfiguration der Funktion qammod
wird erwartet, dass die zu modulierenden Eingabesymbole Daten mit ganzzahligem Wert sind. In diesem Beispiel wird der Binärdatenstrom in ganzzahlige Werte konvertiert, bevor die Funktion qammod
verwendet wird. Dabei konvertiert die Funktion bit2int
jedes 4-Tupel in eine entsprechende ganze Zahl im Bereich [0, (M–
1)]. Als Modulationsordnung M
wird in diesem Beispiel 16 verwendet.
Führen Sie durch Bestimmung der Anzahl der Bits pro Symbol, die durch definiert ist, eine Bit-zu-Symbol-Zuordnung durch. Verwenden Sie anschließend die Funktion bit2int
, um jedes 4-Tupel in einen ganzzahligen Wert zu konvertieren.
dataSymbolsIn = bit2int(dataIn,k);
Stellen Sie die ersten 10 Symbole in einem Stamm-Blatt-Diagramm dar.
figure; % Create new figure window. stem(dataSymbolsIn(1:10)); title('Random Symbols'); xlabel('Symbol Index'); ylabel('Integer Value');
Mit 16-QAM modulieren
Verwenden Sie die Funktion qammod
, um eine 16-QAM-Modulation mit Phasenverschiebung Null auf den Spaltenvektor dataSymbolsIn
für binär codierte und Gray-codierte Bit-zu-Symbol-Zuordnungen anzuwenden.
dataMod = qammod(dataSymbolsIn,M,'bin'); % Binary-encoded dataModG = qammod(dataSymbolsIn,M); % Gray-encoded
Die Ausgabe der Modulationsoperation sind komplexe Spaltenvektoren mit Werten, die Elemente der 16-QAM-Signalkonstellation sind. Später in diesem Beispiel wird in Konstellationsdiagrammen die Zuordnung der Binär- und Gray-Symbole dargestellt.
Weitere Informationen zu Modulationsfunktionen finden Sie unter Digital Baseband Modulation. Ein Beispiel für die Verwendung der Gray-Codierung mit Phase-Shift-Keying-(PSK-)Modulation (PSK: dt. Phasenumtastung) finden Sie unter Symbol Mapping Examples.
Weißes Gaußsches Rauschen hinzufügen
Das modulierte Signal durchläuft den Kanal unter Verwendung der Funktion awgn
mit dem angegebenen Signal-Rausch-Verhältnis (Signal-to-Noise Ratio, SNR). Konvertieren Sie das Verhältnis der Energie pro Bit zur Spektraldichte der Rauschleistung () in einen SNR-Wert für die Verwendung durch die Funktion awgn
. Die Variable sps
ist in diesem Beispiel nicht signifikant, erleichtert aber die zusätzliche Verwendung der Impulsformung im Beispiel. Weitere Informationen finden Sie im Beispiel Impulsformung bei einem 16-QAM-Signal verwenden.
Berechnen Sie das SNR, wenn der Kanal ein von 10 dB hat.
EbNo = 10; snr = EbNo+10*log10(k)-10*log10(sps);
Leiten Sie das Signal für die Zuordnung der binär und Gray-codierten Symbole durch den AWGN-Kanal.
receivedSignal = awgn(dataMod,snr,'measured'); receivedSignalG = awgn(dataModG,snr,'measured');
Konstellationsdiagramm erstellen
Verwenden Sie die Funktion scatterplot
, um die gleichphasige Komponente (Wirkkomponente) und die um 90 Grad phasenverschobene Komponente (Blindkomponente) des modulierten Signals dataMod
und das mit Rauschen behaftete Signal, das hinter dem Kanal empfangen wurde, anzuzeigen. Die Effekte von AWGN sind im Konstellationsdiagramm dargestellt.
sPlotFig = scatterplot(receivedSignal,1,0,'g.'); hold on scatterplot(dataMod,1,0,'k*',sPlotFig)
Mit 16-QAM demodulieren
Verwenden Sie die Funktion qamdemod
, um die empfangenen Daten zu demodulieren und Datensymbole ganzzahliger Werte auszugeben.
dataSymbolsOut = qamdemod(receivedSignal,M,'bin'); % Binary-encoded data symbols dataSymbolsOutG = qamdemod(receivedSignalG,M); % Gray-coded data symbols
Symbole ganzzahliger Werte in binäre Daten konvertieren
Verwenden Sie die Funktion int2bit
, um die vom QAM-Demodulator ausgegebenen binär codierten Datensymbole in einen binären Vektor der Länge zu konvertieren. ist die Gesamtzahl der QAM-Symbole und ist die Anzahl der Bits pro Symbol. Für 16-QAM gilt: = 4. Wiederholen Sie diesen Prozess für die Gray-codierten Symbole.
Kehren Sie die Bit-zu-Symbol-Zuordnung, die zuvor in diesem Beispiel durchgeführt wurde, um.
dataOut = int2bit(dataSymbolsOut,k); dataOutG = int2bit(dataSymbolsOutG,k);
BER des Systems berechnen
Die Funktion biterr
berechnet die Bitfehlerstatistiken aus dem ursprünglichen Binärdatenstrom dataIn
und den empfangenen Datenströmen dataOut
und dataOutG
. Bei Gray-Codierung wird die BER beträchtlich verringert.
Verwenden Sie die Fehlerratenfunktion, um die Fehlerstatistiken zu berechnen. Verwenden Sie die Funktion fprintf
, um die Ergebnisse anzuzeigen.
[numErrors,ber] = biterr(dataIn,dataOut); fprintf('\nThe binary coding bit error rate is %5.2e, based on %d errors.\n', ... ber,numErrors)
The binary coding bit error rate is 2.27e-03, based on 68 errors.
[numErrorsG,berG] = biterr(dataIn,dataOutG); fprintf('\nThe Gray coding bit error rate is %5.2e, based on %d errors.\n', ... berG,numErrorsG)
The Gray coding bit error rate is 1.63e-03, based on 49 errors.
Signalkonstellationen im Diagramm darstellen
Im zuvor angezeigten Konstellationsdiagramm wurden zwar die Punkte in der QAM-Anordnung dargestellt, die Zuordnung zwischen Symbolwerten und den Konstellationspunkten wurde jedoch nicht angegeben. In diesem Konstellationsdiagramm werden die Zuordnungen für die Binärcodierung und Gray-Codierung der Daten zu Konstellationspunkten angegeben.
Zuordnung der natürlich und Gray-codierten Binärsymbole für 16-QAM-Konstellation anzeigen
Wenden Sie die 16-QAM-Modulation auf vollständige Gruppen aus Konstellationspunkten an, indem Sie die Zuordnung binär codierter Symbole und die Zuordnung Gray-codierter Symbole verwenden.
M = 16; % Modulation order x = (0:15); % Integer input symbin = qammod(x,M,'bin'); % 16-QAM output (binary-coded) symgray = qammod(x,M,'gray'); % 16-QAM output (Gray-coded)
Verwenden Sie die Funktion scatterplot
, um das Konstellationsdiagramm anzuzeigen und mit binär codierten (rot) und Gray-codierten (schwarz) Darstellungen der Konstellationspunkte zu versehen.
scatterplot(symgray,1,0,'b*'); for k = 1:M text(real(symgray(k)) - 0.0,imag(symgray(k)) + 0.3, ... dec2base(x(k),2,4)); text(real(symgray(k)) - 0.5,imag(symgray(k)) + 0.3, ... num2str(x(k))); text(real(symbin(k)) - 0.0,imag(symbin(k)) - 0.3, ... dec2base(x(k),2,4),'Color',[1 0 0]); text(real(symbin(k)) - 0.5,imag(symbin(k)) - 0.3, ... num2str(x(k)),'Color',[1 0 0]); end title('16-QAM Symbol Mapping') axis([-4 4 -4 4])
Diagramme untersuchen
Durch Verwendung der Zuordnung Gray-codierter Symbole verbessert sich die BER-Leistung, da die Gray-codierten Signalkonstellationspunkte um nur ein Bit von jedem benachbarten Punkt abweichen. Bei der Zuordnung binär codierter Symbole weichen dagegen einige der benachbarten Konstellationspunkte um zwei Bits ab. Zum Beispiel weichen die binär codierten Werte für 1 (0 0 0 1
) und 2 (0 0 1 0
) um zwei Bits (das dritte und das vierte Bit) ab.