Main Content

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

Diagrammes de dispersion et diagramme de l'œil avec les fonctions MATLAB

Cet exemple montre comment visualiser le comportement d’un signal grâce à l’utilisation de diagrammes de l'œil et de diagrammes de dispersion. Cet exemple utilise un signal QPSK qui passe à travers un filtre en racine cosinus surélevé (RRC).

Diagramme de dispersion

Configurez le filtre RRC, le schéma de modulation et les paramètres de traçage.

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

Créez les coefficients de filtre en utilisant la fonction rcosdesign.

filtCoeff = rcosdesign(rolloff,span,sps);

Générez les symboles aléatoires pour un alphabet de taille M.

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

Appliquez la modulation QPSK.

dataMod = pskmod(data,M,phOffset);

Filtrez les données modulées.

txSig = upfirdn(dataMod,filtCoeff,sps);

Calculez le SNR pour un signal QPSK suréchantillonné.

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

Ajoutez le canal AWGN au signal émis.

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

Appliquez le filtre récepteur RRC.

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

Démodulez le signal filtré.

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

Utilisez la fonction scatterplot pour afficher les diagrammes de dispersion du signal avant et après le filtrage. On peut voir que le filtre de la réception améliore la performance à mesure que la constellation correspond de mieux en mieux aux valeurs idéales. Les premiers symboles span et les derniers symboles span représentent le retard cumulé des deux opérations de filtrage et sont éliminés des deux signaux filtrés avant la production des diagrammes de dispersion.

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.

Diagramme de l'œil

Afficher 1 000 points du diagramme de l'œil du signal émis sur deux périodes de symboles.

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

Afficher 1 000 points du diagramme de l'œil du signal reçu.

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

Observez que le diagramme de l'œil reçu commence à se fermer en raison de la présence du canal AWGN. De plus, le filtre a une longueur finie, ce qui contribue également au comportement non-idéal.

Voir aussi

|

Sujets associés