2013-04-28 27 views
5

16-QAM için modülasyon ve demodülasyon yapmaya çalışıyorum ve daha sonra teorik ve simüle BER'yi karşılaştırmaya çalışıyorum. Grafikte simulation numaralı satırın değil değil. Missing the <simulation>-line16-QAM modülasyonu ve demodülasyonu - grafikte bir satır eksik

Kodumda neyin yanlış olduğunu anlayamıyorum. Birisi bana yardım edebilir mi? Burada

kodudur:

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

Maalesef bulunduğunuz sorunla daha spesifik olabilir? Kodunuzu çalıştırabilirim ve orada bir rakam var. Aslında bir sorun göremiyorum! –

+0

Bunu görebiliyorum: http://img401.imageshack.us/img401/5017/so1w.png –

+0

Döngünün her yinelemesinde "err" hata sayısının üzerine yazıyorsunuz. Bunu düzeltmek doğru olmasa bile, err, demodüle edilmiş sinyalin iletilen ile uyuşmadığı bir sayıdır, teorik eğri ise olasılık anlamındadır. – rajb245

cevap

0
herhangi araç işlevi (yani fantezi modülatör ve demodülatörlerden) varsayarak olmadan, elle istediğini yapar

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

.

Ayrıca bu dosyanın bir kopyasını oluşturun

düzenlemek commdoc_mod

deneyebilir ve size basit bir döngü ile istediğinizi yapmak almak gerekir. İşte

Düzenleme size simüle EbNo eğrileri yerine sembol hata oranı olanları vermek o dosyaya değişiklikler vardır. Herhangi bir pratik amaç için yeterince iyi olmalı. Kodunuzda

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

, sen Sembol Hata Olasılık ve Bit Hata Olasılık karıştırırlar. Ayrıca err = zeros(1,7); yanlış yerleştirilmiştir. düzeltmeler sonrasında

:

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

Ve çıkan grafiktir: enter image description here