Le tracé Matlab du système QPSK ne correspond pas parfaitement aux courbes théoriques BER

9

Est-ce que quelqu'un sait s'il existe une explication simple sur le fait que les courbes théoriques de taux d'erreur sur les bits (BER) d'un système de modulation à déphasage en quadrature (QPSK) sont décalées d'environ 1 dB par rapport aux courbes simulées?

Dipan Mehta
la source
Si ce n'est pas trop long, pouvez-vous partager votre code? Cela pourrait être une variété de choses.
@George - Veuillez poster votre code comme demandé par jeep9911! Sans cela, nous ne pouvons que deviner les causes potentielles. Je déplace cette question sur notre site de traitement du signal numérique, ils seront mieux à même de vous y aider.
Kevin Vermeer
2
Peut-être pourriez-vous également partager l'expression utilisée pour calculer la courbe BER théorique? Il y a eu de nombreux cas où la courbe dérivée de l'expression théorique de la probabilité d'erreur de symbole a été comparée à la courbe simulée pour la probabilité d'erreur de bit (et vice versa), entraînant beaucoup de confusion et de chagrin d'amour. Les erreurs de calcul du SNR ou de conversion d'un SNR donné en amplitudes de signal sont également courantes.
Dilip Sarwate

Réponses:

9

L'explication simple est qu'il y a une erreur dans votre simulation. En voici une qui fonctionne dans MATLAB:

% number of symbols in simulation
Nsyms = 1e6;
% energy per symbol
Es = 1;
% energy per bit (2 bits/symbol for QPSK)
Eb = Es / 2;
% Eb/No values to simulate at, in dB
EbNo_dB = linspace(0, 10, 11);

% Eb/No values in linear scale
EbNo_lin = 10.^(EbNo_dB / 10);
% keep track of bit errors for each Eb/No point
bit_err = zeros(size(EbNo_lin));
for i=1:length(EbNo_lin)
    % generate source symbols
    syms = (1 - 2 * (randn(Nsyms,1) > 0)) + j * (1 - 2 * (randn(Nsyms, 1) > 0));
    % add noise
    syms_noisy = sqrt(Es/2) * syms + sqrt(Eb/(2*EbNo_lin(i))) * (randn(size(syms)) + j * randn(size(syms)));
    % recover symbols from each component (real and imaginary)
    syms_rec_r = sign(real(syms_noisy));
    syms_rec_i = sign(imag(syms_noisy));
    % count bit errors
    bit_err(i) = sum((syms_rec_r ~= real(syms)) + (syms_rec_i ~= imag(syms)));
end
% convert to bit error rate
bit_err = bit_err / (2 * Nsyms);

% calculate theoretical bit error rate, functionally equivalent to:
% bit_err_theo = qfunc(sqrt(2*EbNo_lin));
bit_err_theo = 0.5*erfc(sqrt(2*EbNo_lin)/sqrt(2));
figure;
semilogy(EbNo_dB, bit_err, 'bx', EbNo_dB, bit_err_theo, 'r', 'MarkerSize', 10, 'LineWidth', 2);
xlabel('Eb/No (dB)');
ylabel('Bit error rate');
title('QPSK bit error rate');
legend('Simulation','Theory');
grid on;

Graphique du taux d'erreur sur les bits QPSK

Notez que l'expression théorique du taux d'erreur sur les bits pour la modulation BPSK / QPSK est:

Pb=Q(2EbN0)

EbEbEsEbN0

Jason R
la source
1
Ps=2Q(2EbN0)-[Q(2EbN0)]2
P(UNEB)=P(UNE)+P(B)-P(UNEB)=P(UNE)+P(B)-P(UNE)P(B)=2p-p2
p
Puis-je poser une question? Comment calculez-vous l'énergie par bit? Je veux dire, en réalité, ce n'est pas égal à 1. Alors pouvez-vous expliquer en réalité comment puis-je calculer l'énergie par bit? Merci beaucoup!
Khanh Nguyen du
Es1Mk=0Kn=0Ns|X[kNs+n]|2MNsEb=Es2