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


9

有人知道正交相移键控(QPSK)系统的理论误码率(BER)曲线与模拟曲线相差约1 dB的事实吗?


如果时间不太长,可以共享代码吗?可能是各种各样的事情。

@George-请按照jeep9911的要求发布您的代码!没有它,我们只能猜测潜在的原因。我将这个问题移到我们的网站上进行数字信号处理,他们将可以更好地为您提供帮助。
凯文·维米尔

2
也许您也可以共享用于计算理论BER曲线的表达式?已经有许多情况下,从用于理论表达式得出的曲线符号差错概率已经与用于模拟的曲线进行比较的位错误概率(并且反之亦然),从而导致很大的混乱和心痛。计算SNR或将给定的SNR转换为信号幅度时也很常见。
Dilip Sarwate 2012年

Answers:


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)

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。因此,您可以解释一下我如何计算每位能量吗?非常感谢你!
庆阮

Es1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.