Wykres Matlaba systemu QPSK nie zgadza się idealnie z teoretycznymi krzywymi BER

9

Czy ktoś wie, czy istnieje proste wytłumaczenie faktu, że krzywe teoretycznego współczynnika błędów bitowych (BER) systemu kwadraturowego kluczowania z przesunięciem fazowym (QPSK) są przesunięte o około 1 dB w stosunku do symulowanych krzywych?

Dipan Mehta
źródło
Jeśli nie jest zbyt długi, czy możesz udostępnić swój kod? Może to być wiele różnych rzeczy.
@George - Prześlij swój kod zgodnie z żądaniem jeep9911! Bez tego możemy jedynie zgadywać na temat potencjalnych przyczyn. Przenoszę to pytanie na naszą stronę w celu cyfrowego przetwarzania sygnałów, będą mogli lepiej ci pomóc.
Kevin Vermeer
2
Być może mógłbyś również podzielić wyrażenie użyte do obliczenia teoretycznej krzywej BER? Było wiele przypadków, w których krzywa uzyskana z teoretycznego wyrażenia prawdopodobieństwa błędu symbolu została porównana z symulowaną krzywą prawdopodobieństwa błędu bitu (i odwrotnie), co spowodowało wiele zamieszania i bólu serca. Często występują również błędy w obliczaniu SNR lub translacji danego SNR na amplitudy sygnału.
Dilip Sarwate

Odpowiedzi:

9

Prostym wyjaśnieniem jest błąd w symulacji. Oto jeden, który działa w 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;

Wykres częstości błędów bitów QPSK

Należy zauważyć, że teoretyczne wyrażenie dla bitowego wskaźnika błędów dla modulacji BPSK / QPSK to:

Pb=Q(2EbN0)

pamiętając, że jest energią na bit informacji . Nieco subtelne rozróżnienie między i , energia na symbol , jest czymś, co często nowych ludzi w ten temat. Różnica ta wyjaśnia również, dlaczego QPSK i BPSK mają ten sam bitowy poziom błędu, gdy wyrażony jako funkcja ; po przejściu na QPSK nie uzyskasz żadnych korzyści w zakresie wydajności bit-error, chociaż możesz osiągnąć określoną szybkość transmisji przy mniejszej zajętej przepustowości.EbEbEsEbN0

Jason R.
źródło
1
Jak zauważyłem w moim komentarzu do głównego pytania, innym źródłem nieporozumień jest to, że wskaźnik błędu symbolu wynosi ponieważ symbol jest niepoprawny, jeśli co najmniej jeden bit jest nieprawidłowo demodulowany, błędy bitów w gałęziach fazy i kwadratury są niezależne, a dla niezależne zdarzenia o prawdopodobieństwie
Ps=2Q(2EbN0)[Q(2EbN0)]2
P(AB)=P(A)+P(B)P(AB)=P(A)+P(B)P(A)P(B)=2pp2
p
Dilip Sarwate
Czy mogę zadać pytanie? Jak obliczyć energię na bit? Mam na myśli, że w rzeczywistości nie jest równa 1. Więc możesz wyjaśnić w rzeczywistości, w jaki sposób obliczyć energię na bit? Dziękuję Ci bardzo!
Khanh Nguyen,
@KhanhNguyen: Zakładając, że osiągnąłeś synchronizację czasową, możesz oszacować energię na symbol, uśredniając zakumulowaną kwadratową wielkość obserwowanego sygnału dla wielu okresów symboli. Oznacza to, że , gdzie jest liczbą symboli, które uśredniasz, a to liczba próbek, które masz na symbol. Dla QPSK są 2 bity na symbol, więc . Es1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2
Jason R