首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >16-QAM调制和解调-图中缺少一行

16-QAM调制和解调-图中缺少一行
EN

Stack Overflow用户
提问于 2013-04-28 23:35:30
回答 2查看 22.9K关注 0票数 7

我试图对16 QAM进行调制和解调,然后对理论和仿真误码率进行比较。

我是,而不是,在图中得到了simulation-line。

我不明白我的代码有什么问题。有人能帮我吗?

以下是代码:

代码语言:javascript
复制
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') 
EN

回答 2

Stack Overflow用户

发布于 2013-04-29 21:28:09

rate.m

这可以手动实现您想要的功能,而不需要任何工具箱功能(即高级调制器和解调器)。

你也可以试试

编辑commdoc_mod

制作该文件的副本,您应该能够让它用一个简单的循环来做您想做的事情。

编辑

下面是对该文件的修改,这些修改给出了模拟的EbNo曲线,而不是符号错误率曲线。对于任何实际的目的都是足够好的。

代码语言:javascript
复制
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');
票数 1
EN

Stack Overflow用户

发布于 2017-11-10 15:30:20

在您的代码中,您混淆了符号错误概率和位错误概率。此外,err = zeros(1,7);被放错了位置。

更正后:

代码语言:javascript
复制
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')

得到的图表是:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16269193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档