matlab - 16-QAM 调制和解调 - 图中缺少一条线

标签 matlab signal-processing wireless

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

没有在图表中得到模拟线。 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') 

最佳答案

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

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

你也可以试试

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

关于matlab - 16-QAM 调制和解调 - 图中缺少一条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269193/

相关文章:

matlab - 箭袋不画箭头只是很多蓝色,matlab

c# - 在 C# 中查找两个列表之间的重叠

string - 在 MATLAB 中将数字转换为元胞数组中的字符串

c++ - 奈奎斯特频率限制 - 如何仅混合低于奈奎斯特限制的谐波

Android 处理吉他调音器的音频

matlab - 如何在 MATLAB 中将 3 列矩阵绘制为彩色图?

python - 使用python通过fft进行频谱图

c# - 在 Unity 中同一网络上的 2 部 iOS 手机之间传输小数据

c# - 使用 C# 和 Compact Framework 管理无线网络连接

keyboard - 什么是程序员的*最佳*无线键盘/鼠标套装?