【问题标题】:16-QAM modulation and demodulation - missing one line in the graph16-QAM 调制和解调 - 图中缺少一条线
【发布时间】:2013-04-22 13:28:12
【问题描述】:

我正在尝试对 16-QAM 进行调制和解调,然后尝试比较理论和模拟 BER。

没有在图表中看到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') 

【问题讨论】:

  • 抱歉,您的问题能具体一点吗?我可以执行你的代码,那里有一个数字。实际上我看不出有什么问题!
  • 您正在覆盖循环的每次迭代中的错误计数“err”。即使你修正了它也不完全正确,因为 err 是解调信号与传输信号不匹配的计数,而理论曲线是概率。
  • 您遇到的另一个错误是您为解调器指定了灰色编码,但没有为调制器指定。

标签: matlab signal-processing wireless


【解决方案1】:

在您的代码中,您混淆了符号错误概率和误码概率。而且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')

结果图是:

【讨论】:

    【解决方案2】:

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

    这可以手动完成您想要的操作,无需假设任何工具箱功能(即花哨的调制器和解调器)。

    你也可以试试

    编辑 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');
    

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2021-12-10
      • 2015-08-04
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      相关资源
      最近更新 更多