Графік Matlab системи QPSK не ідеально відповідає теоретичним кривим BER


9

Хтось знає, чи є просте пояснення того факту, що теоретичні криві швидкості бітових помилок (BER) системи квадратурного фазового зсуву (QPSK) приблизно на 1 дБ зміщені від модельованих кривих?


Якщо це не надто довго, можете поділитися кодом? Це можуть бути найрізноманітніші речі.

@George - Будь ласка, опублікуйте свій код відповідно до вимог jeep9911! Без цього ми можемо лише здогадуватися про потенційні причини. Я переношу це питання на наш сайт для цифрової обробки сигналів, вони зможуть вам краще допомогти там.
Кевін Вермер

2
Можливо, ви могли б також поділити вираз, який використовується для обчислення теоретичної кривої BER? Було багато випадків, коли крива, отримана з теоретичного виразу для ймовірності помилки символу, порівнювалася з імітованою кривою для ймовірності помилок бітів (і навпаки), що призводило до великої плутанини і душевного болю. Помилки при обчисленні SNR або перекладі заданого SNR на амплітуди сигналу також є поширеними.
Діліп Сарват

Відповіді:


9

Просте пояснення полягає в тому, що у вашому моделюванні є помилка. Ось такий, який працює в 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;

Діаграма частоти помилок бітів QPSK

Зауважимо, що теоретичне вираження швидкості бітових помилок для модуляції BPSK / QPSK становить:

Pb=Q(2EbN0)

маючи на увазі, що - це енергія на інформаційний біт . Кілька тонка різниця між і , по енергії на символ , є те , що часто спотикаються люди нового до цієї теми. Ця різниця також пояснює, чому QPSK і BPSK мають однаковий коефіцієнт помилок, коли вони виражені як функція ; Ви не отримаєте жодної переваги щодо бітових помилок, перейшовши на QPSK, хоча ви можете досягти заданої швидкості передачі бітів при меншій зайнятості пропускної здатності.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
Діліп Сарват

Чи можу я запитати? Як ви обчислюєте енергію на біт? Я маю на увазі, що насправді це не дорівнює 1. Тож чи можете ви пояснити насправді, як я перерахувати енергію на шматочок? Дуже дякую!
Хан Нгуен

@KhanhNguyen: Якщо припустити, що ви досягли синхронізації синхронізації, ви можете оцінити енергію на символ, усереднюючи накопичену величину квадрата спостережуваного сигналу протягом багатьох періодів символів. Тобто , де - число символів, середній показник яких перевищує та - це кількість зразків, які ви маєте на один символ. Для QPSK існує 2 біта на символ, тому . Es1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2
Джейсон R
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.