Main Content

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

Grafico a dispersione e diagramma ad occhio con le funzioni MATLAB

Questo esempio mostra come visualizzare il comportamento del segnale attraverso l’utilizzo di diagrammi ad occhio e grafici a dispersione. L'esempio utilizza un segnale QPSK che viene passato attraverso un filtro a coseno rialzato (RRC) sotto radice quadrata.

Grafico a dispersione

Impostare il filtro RRC, lo schema di modulazione e i parametri di plottaggio.

span = 10;          % Filter span
rolloff = 0.2;      % Rolloff factor
sps = 8;            % Samples per symbol
M = 4;              % Modulation alphabet size
k = log2(M);        % Bits/symbol
phOffset = pi/4;    % Phase offset (radians)
n = 1;              % Plot every nth value of the signal
offset = 0;         % Plot every nth value of the signal, starting from offset+1

Creare i coefficienti del filtro utilizzando la funzione rcosdesign.

filtCoeff = rcosdesign(rolloff,span,sps);

Generare simboli casuali per creare una dimensione alfabetica di M.

rng default
data = randi([0 M-1],5000,1);

Applicare la modulazione QPSK.

dataMod = pskmod(data,M,phOffset);

Filtrare i dati modulati.

txSig = upfirdn(dataMod,filtCoeff,sps);

Calcolare l'SNR per un segnale QPSK sovracampionato.

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

Aggiungere l’AWGN al segnale trasmesso.

rxSig = awgn(txSig,snr,'measured');

Applicare il filtro di ricezione RRC.

rxSigFilt = upfirdn(rxSig, filtCoeff,1,sps);

Demodulare il segnale filtrato.

dataOut = pskdemod(rxSigFilt,M,phOffset,'gray');

Utilizzare la funzione grafico a dispersione per mostrare i grafici a dispersione del segnale prima e dopo il filtraggio. Come si può constatare, il filtro di ricezione migliora la prestazione poiché la costellazione corrisponde maggiormente ai valori ideali. I primi simboli span e gli ultimi simboli span rappresentano il ritardo cumulativo delle due operazioni di filtraggio e vengono rimossi dai due segnali filtrati, prima di generare i grafici a dispersione.

h = scatterplot(sqrt(sps)*txSig(sps*span+1:end-sps*span),sps,offset);
hold on
scatterplot(rxSigFilt(span+1:end-span),n,offset,'bx',h)
scatterplot(dataMod,n,offset,'r+',h)
legend('Transmit Signal','Received Signal','Ideal','location','best')

Figure Scatter Plot contains an axes object. The axes object with title Scatter plot contains 3 objects of type line. These objects represent Transmit Signal, Received Signal, Ideal.

Diagramma ad occhio

Visualizzare 1000 punti del diagramma ad occhio del segnale trasmesso su due periodi di simboli.

eyediagram(txSig(sps*span+1:sps*span+1000),2*sps)

{"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":[]}

Visualizzare 1000 punti del diagramma ad occhio del segnale ricevuto.

eyediagram(rxSig(sps*span+1:sps*span+1000),2*sps)

{"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":[]}

Si noti che il diagramma ad occhio ricevuto inizia a chiudersi a causa della presenza dell’AWGN. Inoltre, il filtro ha una lunghezza finita che contribuisce al comportamento non ideale.

Vedi anche

|

Argomenti complementari