2013-04-28 8 views
5

में एक पंक्ति गायब है, मैं 16-क्यूएएम के लिए मॉडुलन और डिमोड्यूलेशन करने की कोशिश कर रहा हूं और फिर सैद्धांतिक और नकली बीईआर की तुलना करने की कोशिश कर रहा हूं।16-क्यूएएम मॉडुलन और डिमोड्यूलेशन - ग्राफ़

मैं ग्राफ में simulation -लाइन प्राप्त कर रहा हूं। Missing the <simulation>-line

मुझे नहीं पता कि मेरे कोड में क्या गलत है। कोई भी मेरी मदद कर सकता हैं?

यहाँ कोड है:

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

क्षमा करें, आप अपनी समस्या के साथ और अधिक विशिष्ट हो सकता है? मैं आपका कोड निष्पादित कर सकता हूं और वहां एक आंकड़ा है। मैं वास्तव में कोई समस्या नहीं देख सकता! –

+0

मैं इसे देख सकता हूं: http://img401.imageshack.us/img401/5017/so1w.png –

+0

आप लूप के प्रत्येक पुनरावृत्ति में त्रुटि गिनती "त्रुटि" को ओवरराइट कर रहे हैं। यहां तक ​​कि यदि आप ठीक करते हैं कि यह बिल्कुल सही नहीं है, क्योंकि गलती एक गिनती है जहां डिमोड्यूलेटेड सिग्नल संचरित एक से मेल नहीं खाता है, जबकि सैद्धांतिक वक्र संभाव्यता के मामले में है। – rajb245

उत्तर

0

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

करता है यही कारण है कि किसी भी टूलबॉक्स कार्यक्षमता (अर्थात फैंसी न्यूनाधिक और demodulators) मानते हुए बिना जिसे आप मैन्युअल चाहते हैं।

इसके अलावा, आप कोशिश कर सकते हैं

संपादित commdoc_mod

है कि फाइल की एक कॉपी बनाएं और आप क्या आप एक साधारण पाश के साथ करना चाहते हैं इसे पाने के लिए सक्षम होना चाहिए।

संपादित

यहाँ उस फ़ाइल है कि आप प्रतीक त्रुटि दर की बजाय नकली EbNo घटता देने के लिए संशोधन कर रहे हैं। किसी भी व्यावहारिक उद्देश्य के लिए पर्याप्त होना चाहिए।

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

अपने कोड में, आप प्रतीक त्रुटि संभावना और बिट त्रुटी संभावना भ्रमित। इसके अलावा err = zeros(1,7); गुम हो गया है।

सुधार के बाद:

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') 

और परिणामी ग्राफ़ है: enter image description here