La trama di Matlab del sistema QPSK non concorda perfettamente con le curve BER teoriche


9

Qualcuno sa se c'è una semplice spiegazione sul fatto che le curve teoriche di bit-error rate (BER) di un sistema di quadratura con sfasamento in quadratura (QPSK) sono spostate di circa 1 dB dalle curve simulate?


Se non è troppo lungo, puoi condividere il tuo codice? Potrebbe essere una varietà di cose.

@George - Inserisci il tuo codice come richiesto da jeep9911! Senza di essa, possiamo solo indovinare potenziali cause. Sto trasferendo questa domanda sul nostro sito per l'elaborazione del segnale digitale, saranno più in grado di aiutarti.
Kevin Vermeer,

2
Forse potresti anche condividere l'espressione usata per calcolare la curva BER teorica? Ci sono stati molti casi in cui la curva derivata dall'espressione teorica per la probabilità di errore del simbolo è stata confrontata con la curva simulata per la probabilità di errore di bit (e viceversa), causando molta confusione e angoscia. Sono comuni anche errori nel calcolo del SNR o nella traduzione di un dato SNR in ampiezze di segnale.
Dilip Sarwate,

Risposte:


9

La semplice spiegazione è che c'è un errore nella tua simulazione. Eccone uno che funziona in 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;

Grafico del tasso di errore dei bit QPSK

Si noti che l'espressione teorica per il tasso di errore bit per la modulazione BPSK / QPSK è:

Pb=Q(2EbN0)

EbEbEsEbN0


1
Ps=2Q(2EbN0)[Q(2EbN0)]2
P(AB)=P(A)+P(B)P(AB)=P(A)+P(B)P(A)P(B)=2pp2
p

Posso fare una domanda? Come si calcola l'energia per bit? Voglio dire, in realtà, non è uguale a 1. Quindi, in realtà, puoi spiegare come posso accumulare l'energia per bit? Grazie mille!
Khanh Nguyen,

Es1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.