2013-04-28 1 views
5

16-QAMの変調と復調を行い、理論上とシミュレートされたBERを比較しようとしています。16-QAM変調と復調 - グラフの1行が欠けています

私はではありません。グラフで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

ループの各反復でエラー数 "err"を上書きしています。理論的な曲線は確率の点ではあるものの、errは復調された信号が送信された信号と一致しない場合のカウントなので、正しいとはいえません。 – rajb245

答えて

0

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

任意のツールボックスの機能(すなわち、空想変調器と復調器)を仮定せず、手動で欲しいものを行います。ここ

はコードです。

また、あなたは、そのファイルのコピーを作成し

編集commdoc_mod

を試すことができ、あなたは1つの単純なループでやりたいことを得ることができる必要があります。

編集ここ

あなたにシミュレートされたの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

関連する問題