Matlab plot sistem QPSK tidak setuju dengan kurva BER teoritis


9

Adakah yang tahu jika ada penjelasan sederhana tentang fakta bahwa bit-error rate (BER) teoretis dari sistem Quadrature fase-shift keying (QPSK) sekitar 1 dB bergeser dari kurva yang disimulasikan?


Jika tidak terlalu lama, bisakah Anda membagikan kode Anda? Bisa jadi beragam hal.

@ George - Silakan kirim kode Anda seperti yang diminta oleh jeep9911! Tanpanya, kita hanya bisa menebak penyebab potensial. Saya memindahkan pertanyaan ini ke situs kami untuk pemrosesan sinyal digital, mereka akan lebih dapat membantu Anda di sana.
Kevin Vermeer

2
Mungkin Anda juga bisa berbagi ekspresi yang digunakan untuk menghitung kurva BER teoretis? Ada banyak kasus di mana kurva yang berasal dari ekspresi teoritis untuk probabilitas kesalahan simbol telah dibandingkan dengan kurva simulasi untuk probabilitas kesalahan bit (dan sebaliknya) menghasilkan banyak kebingungan dan sakit hati. Kesalahan dalam menghitung SNR, atau menerjemahkan SNR yang diberikan ke sinyal amplitudo, juga umum terjadi.
Dilip Sarwate

Jawaban:


9

Penjelasan sederhana adalah bahwa ada kesalahan dalam simulasi Anda. Inilah yang berfungsi di 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;

Plot laju kesalahan bit QPSK

Perhatikan bahwa ekspresi teoritis untuk laju kesalahan bit untuk modulasi BPSK / QPSK adalah:

Pb=Q(2EbN0)

perlu diingat bahwa adalah energi per bit informasi . Perbedaan yang agak tersamar antara dan , energi per simbol , adalah sesuatu yang sering membuat orang-orang baru subjek. Perbedaan ini juga menjelaskan mengapa QPSK dan BPSK memiliki tingkat kesalahan bit yang sama ketika dinyatakan sebagai fungsi ; Anda tidak mendapatkan manfaat kinerja kesalahan bit dengan pindah ke QPSK, meskipun Anda dapat mencapai laju bit tertentu dengan bandwidth yang lebih sedikit.EbEbEsEbN0


1
Seperti yang saya catat dalam komentar saya pada pertanyaan utama, sumber kebingungan lain adalah bahwa tingkat kesalahan simbol adalah karena simbol salah jika setidaknya satu bit didemodulasi secara tidak benar, kesalahan bit dalam cabang in-phase dan quadrature adalah independen, dan untuk peristiwa independen probabilitas
Ps=2Q(2EbN0)[Q(2EbN0)]2
P(AB)=P(A)+P(B)P(AB)=P(A)+P(B)P(A)P(B)=2pp2
p
Dilip Sarwate

Bisakah saya mengajukan pertanyaan? Bagaimana Anda menghitung energi per bit? Maksud saya, pada kenyataannya, itu tidak sama dengan 1. Jadi bisakah Anda menjelaskan dalam kenyataan bagaimana saya menghitung energi per bit? Terima kasih banyak!
Khanh Nguyen

@KhanhNguyen: Dengan asumsi Anda telah mencapai sinkronisasi waktu, Anda dapat memperkirakan energi per simbol dengan rata-rata besaran kuadrat terakumulasi dari sinyal yang diamati selama banyak periode simbol. Yaitu, , dengan adalah angka simbol yang Anda rata-rata lebih dari dan adalah jumlah sampel yang Anda miliki per simbol. Untuk QPSK, ada 2 bit per simbol, jadi . MNsEb=EsEs1Mk=0Kn=0Ns|x[kNs+n]|2MNsEb=Es2
Jason R
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.