matlab实验——多幅度信号/QAM信号差错率仿真

多幅度信号/QAM信号差错率仿真。
在这里插入图片描述
本文采用16QAM进行仿真。
matlab代码:

nsymbol= 100000;%一共有十万个符号
M=16; %阶数,表示16-QAM
graycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];%格雷映射,十进制表示
EbN0=5:20; %符号比
snr=10.^(EbN0/10);%将db转为非线性的方式
msg=randi([0,15],1,nsymbol);%随机产生0-15的符号,乘nsymbol得到原始数据
graymsg=graycode(msg+1);%格雷映射
msgmod=qammod(graymsg,M);%调用qammod函数,得到调制后的符号
scatterplot(msgmod);%画出星座点图
spow=norm(msgmod).^2/nsymbol;%a+bj取模的平方,得到功率,功率除以整个符号得到平均功率
for i= 1:length(EbN0)
    sigma=sqrt(spow/(2*snr(i))); 
    rx=msgmod+sigma*(randn(1,length(msgmod))+1i*randn(1,length(msgmod))); %星座点图乘以随机长度高斯白噪声
    y=qamdemod(rx,M);%转为对应的点
    decmsg=graycode(y+1);%格雷逆映射
    [err1 ,ber(i)]=biterr(msg,decmsg,log2(M)); %ber仿真值
    [err2,ser(i)]=symerr(msg,decmsg);%ser比特仿真值,比较符号误差
end
p=2*(1-1/sqrt(M))*qfunc(sqrt(3*snr/(M-1)));
ser1=1-(1-p).^2;  %误码率/误符号率
ber1=1/log2(M)*ser1; %误比特率
figure()
semilogy(EbN0,ser,'*',EbN0,ser1,'-');   %误码率Ps-Eb/N0曲线
title('16-QAM')
xlabel('Eb/N0');
ylabel('误码率Ps');
legend('符号仿真值','理论误码率');
figure()
semilogy(EbN0,ber,'o',EbN0,ber1,'-.');  %误信率Pb-Eb/N0曲线
title('16-QAM')
xlabel('Eb/N0');
ylabel('误信率Pb');
legend('比特仿真值','理论误比特率');
figure()
semilogy(EbN0,ber,'o',EbN0,ser,'*',EbN0,ser1,'-',EbN0,ber1,'-.');  %误信率Pb、误码率Ps-Eb/N0曲线
title('16-QAM')
xlabel('Eb/N0');
ylabel('误信率Pb & 误码率Ps');
legend('比特仿真值','符号仿真值','理论误码率','理论误比特率');

输出结果:
星座点图:
在这里插入图片描述
误码率Ps-Eb/N0曲线:
在这里插入图片描述
误信率Pb-Eb/N0曲线:
在这里插入图片描述
误信率Pb、误码率Ps-Eb/N0曲线:
在这里插入图片描述
参考博文:Matlab-16QAM调制与解调 16-QAM星座点图 16-QAM在AWGN信道下的误码率和误比特率性能,仿真值与理论值曲线对比图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西岸贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值