El diagrama de Matlab del sistema QPSK no concuerda perfectamente con las curvas teóricas de BER


9

¿Alguien sabe si hay una explicación simple sobre el hecho de que las curvas teóricas de la tasa de error de bits (BER) de un sistema de codificación por desplazamiento de fase en cuadratura (QPSK) se desplazan aproximadamente 1 dB de las curvas simuladas?


Si no es demasiado largo, ¿puedes compartir tu código? Podría ser una variedad de cosas.

@George: ¡publique su código tal como lo solicitó jeep9911! Sin ella, solo podemos adivinar las posibles causas. Estoy trasladando esta pregunta a nuestro sitio para el procesamiento de señales digitales, estarán mejor capacitados para ayudarlo allí.
Kevin Vermeer

2
¿Quizás también podría compartir la expresión utilizada para calcular la curva BER teórica? Ha habido muchos casos en los que la curva derivada de la expresión teórica para la probabilidad de error del símbolo se ha comparado con la curva simulada para la probabilidad de error de bit (y viceversa), lo que resulta en mucha confusión y angustia. Los errores al calcular la SNR, o la traducción de una SNR dada a amplitudes de señal, también son comunes.
Dilip Sarwate

Respuestas:


9

La explicación simple es que hay un error en su simulación. Aquí hay uno que funciona en 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 tasa de error de bits QPSK

Tenga en cuenta que la expresión teórica para la tasa de error de bits para la modulación BPSK / QPSK es:

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

¿Puedo hacer una pregunta? ¿Cómo se calcula la energía por bit? Quiero decir, en realidad, no es igual a 1. Entonces, ¿puedes explicar en realidad cómo calculo la energía por bit? ¡Muchas gracias!
Khanh Nguyen

Es1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.