พล็อต Matlab ของระบบ QPSK ไม่เห็นด้วยอย่างสมบูรณ์กับ BER ในทางทฤษฎี


9

ไม่มีใครทราบว่ามีคำอธิบายอย่างง่าย ๆ เกี่ยวกับความจริงที่ว่าอัตราความผิดพลาดทางทฤษฎี (BER) ของระบบ Quadrature phase-shift keying (QPSK) เป็นระบบประมาณ 1 เดซิเบลที่เปลี่ยนจากเส้นโค้งจำลองหรือไม่?


หากไม่นานเกินไปคุณสามารถแบ่งปันรหัสของคุณได้หรือไม่ มันอาจเป็นสิ่งต่าง ๆ

@George - กรุณาโพสต์รหัสของคุณตามที่ร้องขอโดย jeep9911! หากไม่มีมันเราสามารถเดาได้จากสาเหตุที่เป็นไปได้เท่านั้น ฉันย้ายคำถามนี้ไปยังเว็บไซต์ของเราเพื่อการประมวลผลสัญญาณดิจิตอลพวกเขาจะสามารถช่วยคุณได้ดีกว่า
Kevin Vermeer

2
บางทีคุณอาจแชร์นิพจน์ที่ใช้คำนวณเส้นโค้ง BER ตามทฤษฎีด้วย มีหลายกรณีที่เส้นโค้งที่ได้จากการแสดงออกทางทฤษฎีสำหรับความน่าจะเป็นข้อผิดพลาดของสัญลักษณ์ถูกนำมาเปรียบเทียบกับเส้นโค้งจำลองสำหรับความน่าจะเป็นข้อผิดพลาดบิต (และในทางกลับกัน) ทำให้เกิดความสับสนและปวดใจมาก ข้อผิดพลาดในการคำนวณ SNR หรือการแปล SNR ที่กำหนดให้เป็นสัญญาณแอมพลิจูดก็เป็นเรื่องปกติเช่นกัน
Dilip Sarwate

คำตอบ:


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)

จำไว้ว่า Ebเป็นพลังงานต่อบิตข้อมูล ความแตกต่างที่ค่อนข้างบอบบางระหว่างEb และ Esที่พลังงานต่อสัญลักษณ์เป็นสิ่งที่มักจะเดินทางขึ้นผู้คนใหม่ ๆ กับเรื่อง ความแตกต่างนี้ยังอธิบายว่าทำไม QPSK และ BPSK มีอัตราข้อผิดพลาดบิตเดียวกันเมื่อแสดงเป็นฟังก์ชันEbN0; คุณไม่ได้รับประโยชน์จากประสิทธิภาพข้อผิดพลาดบิตใด ๆ โดยย้ายไปที่ QPSK แม้ว่าคุณจะสามารถรับอัตราบิตที่กำหนดโดยใช้แบนด์วิดท์ที่ถูกใช้งานน้อยลง


1
ดังที่ฉันได้กล่าวไว้ในความคิดเห็นของฉันในคำถามหลักแหล่งที่มาของความสับสนอื่นคืออัตราความผิดพลาดของสัญลักษณ์คือ
Ps=2Q(2EbN0)[Q(2EbN0)]2
เนื่องจากสัญลักษณ์ไม่ถูกต้องถ้าอย่างน้อยหนึ่งบิต demodulated ไม่ถูกต้องข้อผิดพลาดบิตในสาขาในเฟสและพื้นที่สี่เหลี่ยมจัตุรัสเป็นอิสระและ
P(AB)=P(A)+P(B)P(AB)=P(A)+P(B)P(A)P(B)=2pp2
สำหรับเหตุการณ์ที่น่าจะเป็นอิสระ p
Dilip Sarwate

ฉันสามารถถามคำถามได้ไหม คุณคำนวณพลังงานต่อบิตได้อย่างไร ฉันหมายถึงในความเป็นจริงมันไม่เท่ากัน 1 คุณสามารถอธิบายในความเป็นจริงฉันจะคำนวณพลังงานต่อบิตได้อย่างไร ขอบคุณมาก!
Khanh Nguyen

@KhanhNguyen: สมมติว่าคุณประสบความสำเร็จในการซิงโครไนซ์เวลาคุณสามารถประมาณพลังงานต่อสัญลักษณ์ได้โดยการเฉลี่ยขนาดกำลังสองสะสมของสัญญาณที่สังเกตได้ในช่วงสัญลักษณ์หลายช่วง นั่นคือ,Es1Mk=0Kn=0Ns|x[kNs+n]|2ที่ไหน M คือจำนวนของสัญลักษณ์ที่คุณเฉลี่ยมากกว่าและ Nsคือจำนวนตัวอย่างที่คุณมีต่อสัญลักษณ์ สำหรับ QPSK มี 2 บิตต่อสัญลักษณ์ดังนั้นEb=Es2.
Jason R
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.