2013-04-28 20 views
5

Tôi đang cố gắng điều chế và giải điều chế cho 16-QAM và sau đó cố gắng so sánh BER lý thuyết và mô phỏng.Điều chế và giải điều chế 16-QAM - thiếu một dòng trong biểu đồ

Tôi là không nhận simulation -trường trong biểu đồ. Missing the <simulation>-line

Tôi không hiểu mã của mình có gì sai. Ai có thể giúp tôi?

đây là mã:

M=16; 
SNR_db = [0 2 4 6 8 10 12]; 
x = randi([0,M-1],1000,1); 
hmod = modem.qammod(16); 
hdemod = modem.qamdemod(hmod,'SymbolOrder', 'Gray'); 
tx = zeros(1,1000); 
for n=1:1000 
tx(n) = modulate(hmod, x(n)); 
end 
rx = zeros(1,1000); 
rx_demod = zeros(1,1000); 
for j = 1:7 
    err = zeros(1,7); 
    err_t = zeros(1,7); 
    for n = 1:1000 
rx(n) = awgn(tx(n), SNR_db(j)); 
rx_demod(n) = demodulate(hdemod, rx(n)); 

if(rx_demod(n)~=x(n)) 
    err(j) = err(j)+1; 
end 
    end 
    % err_t = err_t + err; 
end 
theoryBer = 3/2*erfc(sqrt(0.1*(10.^(SNR_db/10)))); 
figure 
semilogy(SNR_db,theoryBer,'-',SNR_db, err, '^-'); 
grid on 
legend('theory', 'simulation'); 
xlabel('Es/No, dB') 
ylabel('Symbol Error Rate') 
title('Symbol error probability curve for 16-QAM modulation') 
+0

Xin lỗi, bạn có thể cụ thể hơn với vấn đề của bạn? Tôi có thể thực thi mã của bạn và có một con số ở đó. Tôi không thể thấy bất kỳ vấn đề thực sự! –

+0

Tôi có thể thấy điều này: http://img401.imageshack.us/img401/5017/so1w.png –

+0

Bạn đang ghi đè số lỗi "err" trong mỗi lần lặp của vòng lặp. Ngay cả khi bạn sửa chữa nó không hoàn toàn đúng, vì err là một số mà tín hiệu giải điều chế không khớp với tín hiệu được truyền, trong khi đường cong lý thuyết là về xác suất. – rajb245

Trả lời

0

http://www.dsplog.com/db-install/wp-content/uploads/2008/06/script_16qam_gray_mapping_bit_error_rate.m

Đó có phải những gì bạn muốn bằng tay, không giả định bất kỳ chức năng hộp công cụ (ví dụ: bộ điều biến lạ mắt và Bộ Điều).

Ngoài ra bạn có thể thử

chỉnh sửa commdoc_mod

Tạo một bản sao của tập tin đó và bạn sẽ có thể để có được nó để làm những gì bạn muốn với một vòng lặp đơn giản.

Sửa

Dưới đây là những sửa đổi để tập tin đó mà cung cấp cho bạn đường cong EbNo mô phỏng thay vì những cái tỷ lệ lỗi biểu tượng. Nên đủ tốt cho bất kỳ mục đích thực tế nào.

M = 16;      % Size of signal constellation 
k = log2(M);    % Number of bits per symbol 
n = 3e4;     % Number of bits to process 
nSyms = n/k;    % Number of symbols 

hMod = modem.qammod(M);   % Create a 16-QAM modulator 
hMod.InputType = 'Bit';   % Accept bits as inputs 
hMod.SymbolOrder = 'Gray';   % Accept bits as inputs 
hDemod = modem.qamdemod(hMod); % Create a 16-QAM based on the modulator 

x = randi([0 1],n,1); % Random binary data stream 
tx = modulate(hMod,x); 

EbNo = 0:10; % In dB 
SNR = EbNo + 10*log10(k); 

rx = zeros(nSyms,length(SNR)); 
bit_error_rate = zeros(length(SNR),1); 
for i=1:length(SNR) 
    rx(:,i) = awgn(tx,SNR(i),'measured'); 
end 
rx_demod = demodulate(hDemod,rx); 
for i=1:length(SNR) 
    [~,bit_error_rate(i)] = biterr(x,rx_demod(:,i)); 
end 

theoryBer = 3/(2*k)*erfc(sqrt(0.1*k*(10.^(EbNo/10)))); 
figure; 
semilogy(EbNo,theoryBer,'-',EbNo, bit_error_rate, '^-'); 
grid on; 
legend('theory', 'simulation'); 
xlabel('Eb/No, dB'); 
ylabel('Bit Error Rate'); 
title('Bit error probability curve for 16-QAM modulation'); 
0

Trong mã của bạn, bạn nhầm lẫn Xác suất lỗi biểu tượng và Xác suất lỗi bit. Hơn nữa, err = zeros(1,7); bị đặt không đúng chỗ.

Sau khi điều chỉnh:

M=16; 
SNR_db = 0:2:12; 
N=1000; 
x = randi([0,M-1],N,1); 
k = log2(M); % bits per symbol 

tx = qammod(x, M,'Gray'); 
err = zeros(1,7); 
for j = 1:numel(SNR_db) 
    rx = awgn(tx, SNR_db(j),'measured'); 
    rx_demod = qamdemod(rx, M, 'Gray'); 
    [~,err(j)] = biterr(x,rx_demod); 
end 

theorySER = 3/2*erfc(sqrt(0.1*(10.^(SNR_db/10)))); 

figure 
semilogy(SNR_db,theorySER,'-',SNR_db, err*k, '^-'); 
grid on 
legend('theory', 'simulation'); 
xlabel('Es/No, dB') 
ylabel('Symbol Error Rate') 
title('Symbol Error Probability curve for 16-QAM modulation') 

Và kết quả là đồ thị là: enter image description here

Các vấn đề liên quan