Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

Analisi di 16-QAM utilizzando MATLAB

Questo esempio mostra come elaborare un flusso di dati utilizzando un collegamento di comunicazione costituito da un modulatore in banda base, un canale e un demodulatore. Questo esempio visualizza una parte di dati casuali in un grafico a stelo, i segnali trasmessi e ricevuti in diagrammi di costellazione e calcola il tasso di errore bit (BER). Per aggiungere un filtro di modellazione dell’impulso al collegamento di comunicazione, vedere l’esempio Utilizzo della modellazione dell’impulso su segnale 16-QAM. Per aggiungere la correzione dell’errore in avanti al collegamento di comunicazione con un filtraggio di modellazione dell’impulso, vedere l’esempio Utilizzo della correzione dell’errore in avanti sul segnale 16-QAM.

Modulazione del segnale casuale

Lo schema di modulazione utilizza la banda base 16-QAM e il segnale passa attraverso un canale di rumore gaussiano bianco additivo (AWGN). Le operazioni di simulazione di base utilizzano queste Communications Toolbox™ e queste funzioni MATLAB®.

  • rng — Controlla la generazione di numeri casuali

  • randi — Genera un flusso di dati casuali

  • bit2int — Converte i dati binari in simboli a valore intero

  • qammod — Modula utilizzando 16-QAM

  • comm.AWGNChannel — Altera i dati trasmessi utilizzando l’AWGN

  • scatterplot — Crea diagrammi di costellazione

  • qamdemod — Demodula utilizzando 16-QAM

  • int2bit — Converte i simboli a valore intero in dati binari

  • biterr — Calcola il BER di sistema

Generazione di un flusso di dati binari casuali

Il formato convenzionale per rappresentare un segnale in MATLAB è un vettore o una matrice. La funzione randi crea un vettore colonna contenente i valori di un flusso di dati binari. La lunghezza del flusso dei dati binari (ossia, il numero di righe nel vettore colonna) è impostata arbitrariamente su 30.000.

Definire i parametri.

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)

Impostare la funzione rng sullo stato predefinito o su qualsiasi valore seme statico, affinché l’esempio produca risultati ripetibili. Quindi, utilizzare la funzione randi per generare dati binari casuali.

rng default;
dataIn = randi([0 1],n,1); % Generate vector of binary data

Utilizzare un grafico a stelo per visualizzare i valori binari dei primi 40 bit del flusso di dati binari casuali. Utilizzare l’operatore due punti (:) nella chiamata della funzione stem per selezionare una parte del vettore binario.

stem(dataIn(1:40),'filled');
title('Random Bits');
xlabel('Bit Index');
ylabel('Binary Value');

Figure contains an axes object. The axes object with title Random Bits contains an object of type stem.

Conversione di dati binari in simboli a valore intero

La configurazione predefinita per la funzione qammod prevede dati a valore intero come i simboli in entrata da modulare. In questo esempio, il flusso di dati binari è pre-elaborato in valori interi prima di utilizzare la funzione qammod. In particolare, la funzione bit2int converte ogni 4 tupla in un intero corrispondente nell’intervallo [0, (M–1)]. In questo esempio, l’ordine di modulazione è 16 M.

Eseguire una mappatura da bit a simbolo determinando il numero di bit per simbolo definiti da k=log2(M). Quindi, utilizzare la funzione bit2int per convertire ogni 4 tupla in un valore intero.

dataSymbolsIn = bit2int(dataIn,k);

Tracciare i primi 10 simboli in un grafico a stelo.

figure;                    % Create new figure window.
stem(dataSymbolsIn(1:10));
title('Random Symbols');
xlabel('Symbol Index');
ylabel('Integer Value');

Figure contains an axes object. The axes object with title Random Symbols contains an object of type stem.

Modulazione utilizzando 16-QAM

Utilizzare la funzione qammod per applicare la modulazione 16-QAM con offset zero al vettore colonna dataSymbolsIn per le mappature da bit a simbolo con codifica binaria e con codifica Gray.

dataMod = qammod(dataSymbolsIn,M,'bin'); % Binary-encoded
dataModG = qammod(dataSymbolsIn,M);      % Gray-encoded

L’operazione di modulazione fornisce vettori colonna complessi contenenti valori che sono elementi di costellazione del segnale 16-QAM. Successivamente, in questo esempio, i diagrammi di costellazione mostreranno la mappatura dei simboli binari e Gray.

Per ulteriori informazioni sulle funzioni di modulazione, vedere Digital Baseband Modulation. Per un esempio che utilizza la codifica Gray con modulazione a spostamento di fase (PSK), vedere Symbol Mapping Examples.

Aggiunta di un rumore gaussiano bianco

Il segnale modulato passa attraverso il canale utilizzando la funzione awgn con il rapporto segnale/rumore (SNR) specificato. Convertire il rapporto tra energia per bit e densità spettrale della potenza del rumore (Eb/N0) in un valore SNR da utilizzare con la funzione awgn. La variabile sps non è significativa in questo esempio ma semplifica l’estensione dell’esempio per utilizzare la modellazione dell’impulso. Per ulteriori informazioni, vedere l’esempio Utilizzo della modellazione dell’impulso su segnale 16-QAM.

Calcolare l’SNR quando il canale ha un Eb/N0 di 10 dB.

EbNo = 10;
snr = EbNo+10*log10(k)-10*log10(sps);

Passare il segnale attraverso il canale AWGN per le mappature dei simboli binari e Gray codificati.

receivedSignal = awgn(dataMod,snr,'measured');
receivedSignalG = awgn(dataModG,snr,'measured');

Creazione di un diagramma di costellazione

Utilizzare la funzione scatterplot per visualizzare la i componenti in fase e in quadratura del segnale modulato dataMod e del segnale di rumore ricevuto dopo il canale. Gli effetti dell’AWGN sono presenti nel diagramma di costellazione.

sPlotFig = scatterplot(receivedSignal,1,0,'g.');
hold on
scatterplot(dataMod,1,0,'k*',sPlotFig)

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot contains 2 objects of type line. This object represents Channel 1.

Demodulazione 16-QAM

Utilizzare al funzione qamdemod per demodulare i dati ricevuti e restituire simboli di dati a valore intero.

dataSymbolsOut = qamdemod(receivedSignal,M,'bin'); % Binary-encoded data symbols
dataSymbolsOutG = qamdemod(receivedSignalG,M);     % Gray-coded data symbols

Conversione di simboli a valore intero in dati binari

Utilizzare la funzione int2bit per convertire i simboli di dati con codifica binaria dal demodulatore QAM in un vettore binario con lunghezza (Nsym×Nbits/sym). Nsym è il numero totale di simboli QAM e Nbits/sym è il numero di bit per simbolo. Per 16-QAM, Nbits/sym = 4. Ripetere la procedura per i simboli con codifica Gray.

Invertire la mappatura da bit a simbolo eseguita precedentemente in questo esempio.

dataOut = int2bit(dataSymbolsOut,k);
dataOutG = int2bit(dataSymbolsOutG,k);

Calcolo del BER di sistema

La funzione biterr calcola le statistiche di errore bit dal flusso originale di dati binari dataIn e dai flussi di dati ricevuti dataOut e dataOutG. La codifica Gray riduce significativamente il BER.

Utilizzare la funzione del tasso di errore per calcolare le statistiche di errore. Utilizzare la funzione fprintf per visualizzare i risultati.

[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.

Plottaggio di costellazioni del segnale

Il diagramma di costellazione mostrato in precedenza tracciava i punti nella costellazione QAM ma non indicava la mappatura tra i valori dei simboli e i punti di costellazione. In questa sezione, il diagramma di costellazione indica le mappature per la codifica binaria e la codifica Gray dei dati ai punti di costellazione.

Illustrazione della mappatura di simboli binari naturali e codificati Gray per la costellazione 16-QAM

Applicare la modulazione 16-QAM per completare insiemi di punti di costellazione utilizzando la mappatura dei simboli in codice binario e la mappatura dei simboli in codice Gray.

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)

Utilizzare la funzione scatterplot per tracciare il diagramma di costellazione e annotarlo con rappresentazioni binarie (in rosso) e rappresentazioni Gray (in nero) dei punti di costellazione.

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])

Figure Scatter Plot contains an axes object. The axes object with title 16-QAM Symbol Mapping contains 65 objects of type line, text. This object represents Channel 1.

Analisi dei grafici

L’utilizzo della mappatura dei simboli in codice Gray migliora la prestazione del BER poiché i punti di costellazione del segnale in codice Gray differiscono solo di un bit da ogni punto adiacente che li circonda. Laddove, nella mappatura dei simboli in codice binario, alcuni punti di costellazione adiacenti differiscono di due bit. Ad esempio, il valore in codice binario per 1 (0 0 0 1) e 2 (0 0 1 0) differisce di due bit (il terzo e il quarto bit).

Argomenti complementari