QPSK 系统的 Matlab 图与理论 BER 曲线不完全一致

信息处理 matlab qpsk
2022-01-06 12:34:22

有谁知道是否有一个简单的解释,即正交相移键控 (QPSK) 系统的理论误码率 (BER) 曲线从模拟曲线偏移了大约 1 dB?

1个回答

简单的解释是您的模拟中有错误。这是在 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)

请记住Eb每信息位的能量之间有些微妙的区别EbEs每个符号的能量,是经常让刚接触这个主题的人绊倒的东西。这种差异也解释了为什么 QPSK 和 BPSK 在表示为以下函数时具有相同的误码率EbN0; 迁移到 QPSK 不会带来任何误码性能优势,尽管您可以在占用较少带宽的情况下实现给定的比特率。