O gráfico Matlab do sistema QPSK não concorda perfeitamente com as curvas teóricas do BER

9

Alguém sabe se existe uma explicação simples sobre o fato de que as curvas de taxa de erro de bits teórica (BER) de um sistema de chaveamento de fase em quadratura (QPSK) são deslocadas em aproximadamente 1 dB das curvas simuladas?

Dipan Mehta
fonte
Se não demorar muito, você pode compartilhar seu código? Pode ser uma variedade de coisas.
@ George - Por favor, poste seu código conforme solicitado por jeep9911! Sem ele, podemos apenas adivinhar causas potenciais. Estou movendo esta pergunta para o nosso site para processamento de sinal digital, eles poderão ajudá-lo melhor lá.
21712 Kevin Vermeer
2
Talvez você também possa compartilhar a expressão usada para calcular a curva BER teórica? Houve muitos casos em que a curva derivada da expressão teórica para a probabilidade de erro do símbolo foi comparada com a curva simulada para a probabilidade de erro de bit (e vice-versa), resultando em muita confusão e mágoa. Erros na computação do SNR ou na conversão de um determinado SNR em amplitudes de sinal também são comuns.
precisa saber é o seguinte

Respostas:

9

A explicação simples é que há um erro na sua simulação. Aqui está um que funciona no 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;

Gráfico de taxa de erro de bit QPSK

Observe que a expressão teórica para taxa de erro de bit para modulação BPSK / QPSK é:

Pb=Q(2EbN0)

EbEbEsEbN0

Jason R
fonte
11
Ps=2Q(2EbN0)[Q(2EbN0)]2
P(AB)=P(A)+P(B)P(AB)=P(A)+P(B)P(A)P(B)=2pp2
p
Posso fazer uma pergunta? Como você calcula a energia por bit? Quero dizer, na realidade, não é igual a 1. Então, você pode explicar na realidade como faço para calcular a energia por bit? Muito obrigado!
Khanh Nguyen 25/09
Es1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2