Das Matlab-Diagramm des QPSK-Systems stimmt nicht perfekt mit den theoretischen BER-Kurven überein

9

Weiß jemand, ob es eine einfache Erklärung dafür gibt, dass die theoretischen Bitfehlerratenkurven (BER) eines Quadratur-Phasenumtastungssystems (QPSK) ungefähr 1 dB von den simulierten Kurven verschoben sind?

Dipan Mehta
quelle
Wenn es nicht zu lang ist, können Sie Ihren Code teilen? Es könnte eine Vielzahl von Dingen sein.
@George - Bitte posten Sie Ihren Code wie von jeep9911 angefordert! Ohne sie können wir nur mögliche Ursachen erraten. Ich verschiebe diese Frage zur digitalen Signalverarbeitung auf unsere Website. Sie können Ihnen dort besser helfen.
Kevin Vermeer
2
Vielleicht könnten Sie auch den Ausdruck teilen, der zur Berechnung der theoretischen BER-Kurve verwendet wird? Es gab viele Fälle, in denen die aus dem theoretischen Ausdruck für die Symbolfehlerwahrscheinlichkeit abgeleitete Kurve mit der simulierten Kurve für die Bitfehlerwahrscheinlichkeit verglichen wurde (und umgekehrt), was zu viel Verwirrung und Herzschmerz führte. Fehler bei der Berechnung des SNR oder der Übersetzung eines bestimmten SNR in Signalamplituden sind ebenfalls häufig.
Dilip Sarwate

Antworten:

9

Die einfache Erklärung ist, dass in Ihrer Simulation ein Fehler vorliegt. Hier ist eine, die in MATLAB funktioniert:

% 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;

QPSK-Bitfehlerratendiagramm

Beachten Sie, dass der theoretische Ausdruck für die Bitfehlerrate für die BPSK / QPSK-Modulation lautet:

P.b=Q.(2E.bN.0)

Denken Sie daran E.bist die Energie pro Informationsbit . Die etwas subtile Unterscheidung zwischenE.b und E.s, die Energie pro Symbol , ist etwas, das Menschen, die neu im Thema sind, oft auslöst. Dieser Unterschied erklärt auch, warum QPSK und BPSK die gleiche Bitfehlerrate haben, wenn sie als Funktion von ausgedrückt werdenE.bN.0;; Durch die Umstellung auf QPSK erhalten Sie keinen Vorteil bei der Bitfehlerleistung, obwohl Sie eine bestimmte Bitrate mit weniger belegter Bandbreite erzielen können.

Jason R.
quelle
1
Wie ich in meinem Kommentar zur Hauptfrage festgestellt habe, besteht eine weitere Quelle der Verwirrung darin, dass die Symbolfehlerrate gleich ist
P.s=2Q.(2E.bN.0)- -[Q.(2E.bN.0)]]2
Da das Symbol falsch ist, wenn mindestens ein Bit falsch demoduliert wird, sind die Bitfehler in gleichphasigen und Quadraturzweigen unabhängig und
P.(EINB.)=P.(EIN)+P.(B.)- -P.(EINB.)=P.(EIN)+P.(B.)- -P.(EIN)P.(B.)=2p- -p2
für unabhängige Wahrscheinlichkeitsereignisse p
Dilip Sarwate
Kann ich eine Frage stellen? Wie berechnet man die Energie pro Bit? Ich meine, in Wirklichkeit ist es nicht gleich 1. Können Sie also in Wirklichkeit erklären, wie ich die Energie pro Bit berechne? Vielen Dank!
Khanh Nguyen
@KhanhNguyen: Angenommen, Sie haben eine Zeitsynchronisation erreicht, können Sie die Energie pro Symbol schätzen, indem Sie die akkumulierte quadratische Größe des beobachteten Signals über viele Symbolperioden mitteln. Das ist,E.s1M.k=0K.n=0N.s|x[kN.s+n]]|2, wo M. ist die Anzahl der Symbole, die Sie über und mitteln N.sist die Anzahl der Proben, die Sie pro Symbol haben. Für QPSK gibt es also 2 Bits pro SymbolE.b=E.s2.
Jason R