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 casualirandi
— Genera un flusso di dati casualibit2int
— Converte i dati binari in simboli a valore interoqammod
— Modula utilizzando 16-QAMcomm.AWGNChannel
— Altera i dati trasmessi utilizzando l’AWGNscatterplot
— Crea diagrammi di costellazioneqamdemod
— Demodula utilizzando 16-QAMint2bit
— Converte i simboli a valore intero in dati binaribiterr
— 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');
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 . 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');
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 () 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 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)
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 . è il numero totale di simboli QAM e è il numero di bit per simbolo. Per 16-QAM, = 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])
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).