Main Content

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

Utilizzo della modellazione dell’impulso su segnale 16-QAM

Questa è un’estensione dell’esempio Analisi di 16-QAM utilizzando MATLAB per eseguire la modellazione dell'impulso e il filtraggio a coseno rialzato utilizzando una coppia di filtri a coseno rialzato (RRC) sotto radice quadrata. La funzione rcosdesign crea i filtri. La prestazione del BER può essere migliorata aggiungendo la correzione dell’errore in avanti (FEC) al collegamento di comunicazione. Per aggiungere la FEC al collegamento di comunicazione con l’esempio di filtraggio di modellazione dell’impulso, vedere l’esempio Utilizzo della correzione dell’errore in avanti sul segnale 16-QAM.

Questo esempio mostra come elaborare un flusso di dati binari utilizzando un collegamento di comunicazione costituito da un modulatore in banda base, un canale, un demodulatore, una modellazione dell’impulso e un filtraggio a coseno rialzato. L'esempio calcola il tasso di errore bit (BER), mostra gli effetti del filtro nei diagrammi ad occhio e visualizza i segnali trasmessi e ricevuti in un diagramma di costellazione.

Creazione del contesto di simulazione

Definire i parametri di simulazione per uno schema di modulazione 16-QAM con filtraggio a coseno rialzato e un canale AWGN.

M = 16;            % Modulation order
k = log2(M);       % Bits per symbol
numBits = k*7.5e4; % Bits to process
sps = 4;           % Samples per symbol (oversampling factor)

Creazione di un filtro RRC

Impostare i parametri del filtro RRC.

filtlen = 10;      % Filter length in symbols
rolloff = 0.25;    % Filter rolloff factor

Utilizzare la funzione rcosdesign per creare un filtro RRC.

rrcFilter = rcosdesign(rolloff,filtlen,sps);

Utilizzare FVTool per visualizzare la risposta all'impulso del filtro RRC.

fvtool(rrcFilter,'Analysis','Impulse')

{"String":"Figure Figure 1: Impulse Response contains an axes object. The axes object with title Impulse Response contains an object of type stem.","Tex":"Impulse Response","LaTex":[]}

Calcolo del BER di sistema

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

rng default;                     % Use default random number generator
dataIn = randi([0 1],numBits,1); % Generate vector of binary data

Utilizzare la funzione bit2int per convertire le parole binarie k-tupla in simboli interi.

dataSymbolsIn = bit2int(dataIn,k);

Applicare la modulazione 16-QAM utilizzando la funzione qammod.

dataMod = qammod(dataSymbolsIn,M);

Utilizzare la funzione upfirdn per eseguire il sovracampionamento del segnale tramite il fattore di sovracampionamento e applicare il filtro RRC. La funzione upfirdn riempie il segnale sovracampionato con zeri alla fine per svuotare il filtro. Quindi, la funzione applica il filtro.

txFiltSignal = upfirdn(dataMod,rrcFilter,sps,1);

Utilizzando il numero di bit per simbolo (k) e il numero di campioni per simbolo (sps), convertire il rapporto tra energia per bit e densità spettrale della potenza del rumore (EbNo) in un valore SNR da utilizzare con la funzione awgn.

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

Passare il segnale filtrato attraverso un canale AWGN.

rxSignal = awgn(txFiltSignal,snr,'measured');

Utilizzare la funzione upfirdn sul segnale ricevuto per eseguire il sottocampionamento e filtrare il segnale. Eseguire il sottocampionamento utilizzando lo stesso fattore di sovracampionamento applicato per eseguire il sovracampionamento del segnale trasmesso. Filtrare utilizzando lo stesso filtro RRC applicato al segnale trasmesso.

Ogni operazione di filtraggio ritarda il segnale della metà della lunghezza del filtro in simboli filtlen/2. Quindi, il ritardo totale dal filtraggio di trasmissione e ricezione è uguale alla lunghezza del filtro filtlen. Per il calcolo del BER, i segnali trasmessi e ricevuti devono essere della stessa dimensione ed è necessario considerare il ritardo tra il segnale trasmesso e quello ricevuto. Rimuovere i primi simboli filtlen nel segnale decimato per tenere conto del ritardo cumulativo delle operazioni di filtraggio di trasmissione e ricezione. Rimuovere gli ultimi simboli filtlen nel segnale decimato per garantire che il numero di campioni in uscita del demodulatore corrisponda al numero di campioni in entrata del modulatore.

rxFiltSignal = ...
    upfirdn(rxSignal,rrcFilter,1,sps);       % Downsample and filter
rxFiltSignal = ...
    rxFiltSignal(filtlen + 1:end - filtlen); % Account for delay

Utilizzare la funzione qamdemod per demodulare il segnale filtrato ricevuto.

dataSymbolsOut = qamdemod(rxFiltSignal,M);

Utilizzare la funzione int2bit per convertire i simboli interi recuperati in dati binari.

dataOut = int2bit(dataSymbolsOut,k);

Utilizzare la funzione biterr per calcolare il numero di errori e il BER associato.

[numErrors,ber] = biterr(dataIn,dataOut);
fprintf('\nFor an EbNo setting of %3.1f dB, the bit error rate is %5.2e, based on %d errors.\n', ...
    EbNo,ber,numErrors)
For an EbNo setting of 10.0 dB, the bit error rate is 1.79e-03, based on 538 errors.

Visualizzazione degli effetti del filtro

Per visualizzare gli effetti del filtro in un diagramma ad occhio, ridurre l’impostazione Eb/N0 e rigenerare i dati ricevuti. Visualizzando un segnale SNR elevato senza altri effetti multipercorso, è possibile utilizzare i diagrammi ad occhio per evidenziare la riduzione dell'interferenza intersimbolica (ISI) in uscita per la coppia di filtri RRC con modellazione dell’impulso. Il filtro RRC non ha ISI zero fino a quando non viene accoppiato con il secondo filtro RRC per formare un filtro a coseno rialzato in cascata.

EbNo = 20;
snr = EbNo + 10*log10(k) - 10*log10(sps);
rxSignal = awgn(txFiltSignal,snr,'measured');
rxFiltSignal = ...
    upfirdn(rxSignal,rrcFilter,1,sps);         % Downsample and filter
rxFiltSignal = ...
    rxFiltSignal(filtlen + 1:end - filtlen);   % Account for delay

Creare un diagramma ad occhio per una parte del segnale filtrato senza rumore per visualizzare l'effetto della modellazione dell'impulso. Il segnale trasmesso ha un filtro RRC e mostra ISI come un restringimento dell’apertura degli occhi.

eyediagram(txFiltSignal(1:2000),sps*2);

{"String":"Figure Eye Diagram contains 2 axes objects. Axes object 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes object 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.","Tex":["Eye Diagram for In-Phase Signal","Eye Diagram for Quadrature Signal"],"LaTex":[]}

La visualizzazione del segnale, nel diagramma ad occhio, dopo il rumore del canale mostra il segnale con il filtro RRC e il rumore. Il livello di rumore provoca un ulteriore restringimento dell'apertura degli occhi nel diagramma ad occhio.

eyediagram(rxSignal(1:2000),sps*2);

{"String":"Figure Eye Diagram contains 2 axes objects. Axes object 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes object 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.","Tex":["Eye Diagram for In-Phase Signal","Eye Diagram for Quadrature Signal"],"LaTex":[]}

La visualizzazione del segnale, nel diagramma ad occhio, dopo l'applicazione del filtraggio di ricezione mostra il segnale con il filtraggio a coseno rialzato. Più sono ampie le aperture degli occhi nel diagramma ad occhio, meno ISI ha il segnale con il filtraggio a coseno rialzato rispetto al segnale con il filtraggio RRC.

eyediagram(rxFiltSignal(1:2000),2);

{"String":"Figure Eye Diagram contains 2 axes objects. Axes object 1 with title Eye Diagram for In-Phase Signal contains an object of type line. This object represents In-phase. Axes object 2 with title Eye Diagram for Quadrature Signal contains an object of type line. This object represents Quadrature.","Tex":["Eye Diagram for In-Phase Signal","Eye Diagram for Quadrature Signal"],"LaTex":[]}

Creare un diagramma di costellazione del segnale ricevuto prima e dopo il filtraggio. Scalare il segnale ricevuto in base alla radice quadrata del numero di campioni per simbolo per normalizzare i livelli di potenza di trasmissione e ricezione.

scatplot = scatterplot(sqrt(sps)*...
    rxSignal(1:sps*5e3),...
    sps,0);
hold on;
scatterplot(rxFiltSignal(1:5e3),1,0,'bx',scatplot);
title('Received Signal, Before and After Filtering');
legend('Before Filtering','After Filtering');
axis([-5 5 -5 5]); % Set axis ranges
hold off;

Figure Scatter Plot contains an axes object. The axes object with title Received Signal, Before and After Filtering contains 2 objects of type line. These objects represent Before Filtering, After Filtering.

Argomenti complementari