2013-04-28 14 views
5

Sto provando a fare la modulazione e la demodulazione per 16-QAM e quindi a cercare di confrontare il BER teorico e simulato.Modulazione e demodulazione 16-QAM - manca una riga nel grafico

I am non ottenendo simulation -line nel grafico. Missing the <simulation>-line

Non riesco a capire cosa c'è di sbagliato nel mio codice. Qualcuno può aiutarmi?

ecco il codice:

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

Siamo spiacenti, può essere più preciso con il tuo problema? Posso eseguire il tuo codice e c'è una figura lì. Non vedo davvero alcun problema! –

+0

Posso vedere questo: http://img401.imageshack.us/img401/5017/so1w.png –

+0

Si sta sovrascrivendo il conteggio errori "err" in ogni iterazione del ciclo. Anche se aggiusti che non è giusto, dato che err è un conteggio in cui il segnale demodulato non corrisponde a quello trasmesso, mentre la curva teorica è in termini di probabilità. – rajb245

risposta

0

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

che fa quello che si vuole manualmente, senza assumere alcuna funzionalità cassetta degli attrezzi (vale a dire il modulatore di fantasia e demodulatori).

Inoltre è possibile provare

modificare commdoc_mod

Effettuare una copia di quel file e si dovrebbe essere in grado di farlo a fare quello che vuoi con un semplice ciclo.

Modifica

Ecco le modifiche al quel file che ti danno le curve EbNo simulate al posto di quelli simbolo tasso di errore. Dovrebbe essere abbastanza buono per qualsiasi scopo pratico.

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

Nel codice, si confondono Probabilità di errore di simbolo e Probabilità di errore di bit. Inoltre err = zeros(1,7); è posizionato male.

Dopo le correzioni:

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

E il grafico risultante è: enter image description here