График Matlab системы QPSK не полностью согласуется с теоретическими кривыми BER

9

Кто-нибудь знает, есть ли простое объяснение того факта, что кривые теоретической частоты ошибок по битам (BER) системы квадратурной фазовой манипуляции (QPSK) смещены приблизительно на 1 дБ от симулированных кривых?

Дипан Мехта
источник
Если это не слишком долго, вы можете поделиться своим кодом? Это могут быть разные вещи.
@ Джордж - Пожалуйста, оставьте свой код в соответствии с просьбой 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:

пбзнак равноQ(2ЕбN0)

ЕбЕбЕsЕбN0

Джейсон Р
источник
1
пsзнак равно2Q(2ЕбN0)-[Q(2ЕбN0)]2
п(AВ)знак равноп(A)+п(В)-п(AВ)знак равноп(A)+п(В)-п(A)п(В)знак равно2п-п2
п
Могу я задать вопрос? Как вы рассчитываете энергию на бит? Я имею в виду, на самом деле, оно не равно 1. Так что вы можете объяснить на самом деле, как я рассчитываю энергию на бит? Большое спасибо!
Хан Нгуен
Еs1MΣКзнак равно0КΣNзнак равно0Ns|Икс[КNs+N]|2MNsЕбзнак равноЕs2