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')
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)
Visualizzare 1000 punti del diagramma ad occhio del segnale ricevuto.
eyediagram(rxSig(sps*span+1:sps*span+1000),2*sps)
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.