Matlab通信仿真系列——正交幅度调制(QAM)仿真

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等
在这里插入图片描述
本节目录

一、正交幅度调制(QAM)的产生
二、正交幅度调制(QAM)的解调
三、正交幅度调制(QAM)的Matlab仿真
1、QAM信号波形和星座图仿真
2、QAM信号调制解调仿真
四、Matlab源码
1、QAM信号波形和星座图仿真源码
2、QAM信号调制解调仿真源码

本节内容
正交幅度调制,又称为正交振幅键控,QAM(Quadrature Amplitude Modulation)。
多进制正交调幅MQAM,是一种既调幅又调相的数字调制,用载波的不同幅度及不同相位来表示多进制数字信息。
一、正交幅度调制(QAM)的产生
QAM信号使用两个正交载波cos(2πfct)和sin(2πfct),其中每个都被一个独立的信息比特序列所调制。波形表达式:
在这里插入图片描述

上式中Amc和Ams是承载信息的正交载波的信号幅度;g(t)是信号脉冲。
在这里插入图片描述

16QAM调制器,输入二进制数据经过串/并转化和2/4电平变换后得到两路码元宽度增大4倍的双极性四电平码,分别进行正交调制,合成后的信号即为16QAM信号。
具体功能框图:
在这里插入图片描述

QAM信号的波形可以表示成啷个标准正交信号波形φ1(t)和φ2(t)的线性组合。
在这里插入图片描述

二、正交幅度调制(QAM)的解调
在awgn信道中,一个信号区间内接收到的带通信号表达式:
在这里插入图片描述

上式中nc(t)和ns(t)是加性噪声的两个正交分量,是零均值且互不相关的高斯随机过程,方差为N0/2。
QAM的awgn信道的最佳检测计算相关度量,表达式为:
在这里插入图片描述

在矩形信号星座中,M=2^k,其中k为整数,QAM信号等价于在正交载波上的两个PAM信号。
对于M电平的QAM系统,正确判决的概率公式为:
在这里插入图片描述

当k为偶数时,一个符合差错概率公式:
在这里插入图片描述

当k为奇数时,一个符合差错概率公式:
在这里插入图片描述

三、正交幅度调制(QAM)的Matlab仿真
1、QAM信号波形和星座图仿真

matlab代码示例:
消息数据经过Gray编码后[1 4 2 0 7 5 2 6],
绘制8QAM调制信号波形和星座图,其中载波频率为1Hz。

在这里插入图片描述在这里插入图片描述

2、QAM信号调制解调仿真

matlab代码示例:
用基带等效方式仿真16-QAM载波调制信号,
在awgn信道下的误码率和误比特率性能,并与理论值比较。

在这里插入图片描述
在这里插入图片描述

四、Matlab源码
1、QAM信号波形和星座图仿真源码

clear all;
clc;
close all;
%消息信号
msg=[1 4 3 0 7 5 2 6];
%符号周期
T=1;
%每个符号的采样点数
fs=100;
%采样时间间隔
ts=1/fs;
%时间矢量
t=0:ts:T-ts;
%所有符号的传输时间
x_t=0:ts:length(msg)-ts;
%载波频率
fc=1;
%载波信号
c=sqrt(2/T)*exp(j*2*pi*fc*t);
%8-QAM调制
M=8;
%基带QAM调制
msgmod=qammod(msg,M).';
tx=real(msgmod*c);
tx=reshape(tx.',1,length(msg)*length(t));
plot(x_t,tx(1:length(x_t)));
title('8QAM信号波形');
xlabel('时间');
ylabel('载波振幅');


scatterplot(msgmod);
title('8QAM信号星座图');
xlabel('同相分量');
ylabel('正交分量');

2、QAM信号调制解调仿真源码

clear all;
clc;
close all;
%采样点数
numsamp=10;
%发送符合数
num_symbol=100000;
%信噪比
EsN0=0:20;
%信噪比转化为线性值
snrl=10.^(EsN0/10);
%16-QAM
M=16;
%Gray编码规则
graycode=[0 1 3 2 4 5 7 6 12 13 15 14 8 9 11 10];
%消息数据
msg=randi([0,M-1],1,num_symbol);
%Gray映射
msg1=graycode(msg+1);
%16-QAM调制
msgmod=qammod(msg1,M);
%求每个符号的平均功率
spow=norm(msgmod).^2/num_symbol;
for indx=1:length(EsN0)
    %根据符号功率求噪声功率
    sigma=sqrt(spow/(2*snrl(indx)));
    %加入高斯白噪声
    rx=msgmod+sigma*(randn(1,length(msgmod))+j*randn(1,length(msgmod)));   
    %16-QAM解调
    y1=qamdemod(rx,M);
    %Gray逆映射
    decmsg=graycode(y1+1);
    %求误比特率和误符号率
    [err,ber(indx)]=biterr(msg(2:end),decmsg(2:end),log2(M));
    [err,ser(indx)]=symerr(msg(2:end),decmsg(2:end));
end
%理论误符号率
P4=2*(1-1/sqrt(M))*qfunc(sqrt(3*snrl/(M-1)));
ser1=1-(1-P4).^2;
%理论误比特率
ber1=1/log2(M)*ser1;


semilogy(EsN0,ber,'-ko',EsN0,ser,'-k*',EsN0,ber1,'-r',EsN0,ser1,'-b');
title('16-QAM载波信号在awgn信道下的性能');
xlabel('Es/N0');
ylabel('误比特率和误符号率');
legend('误比特率','误符号率','理论误比特率','理论误符号率');
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
QAM(Quadrature Amplitude Modulation,正交振幅调制)是一种用于数字通信调制技术,其中使用了振幅和相位两个维度来传输数据。Matlab是一种广泛使用的科学计算软件,也可以用于进行QAM调制和解调的仿真和实验。 在Matlab中,我们可以使用通信工具箱中的函数来实现QAM调制和解调。首先,我们需要定义一个带有要传输的位数的信息数据序列,可以用二进制数表示。然后,我们可以使用qammod()函数来对信息数据进行调制。这个函数可以根据所选择的调制阶数、调制方式和符号映射规则来生成调制后的信号序列。 调制之后,我们可以加入噪声来模拟传输过程中的信道干扰。然后,使用qamdemod()函数对接收到的信号进行解调。解调的结果将会是一个接近原始信息数据的序列。我们可以使用误码率(Bit Error Rate,BER)等指标来评估解调的性能。 除了调制和解调函数外,Matlab还提供了其他一些用于QAM系统设计和性能分析的工具函数。我们可以使用scatterplot()函数来绘制QAM调制后的信号散点图,这有助于了解信号点的分布情况。我们还可以使用eyediagram()函数来绘制眼图,用于分析信号在传输过程中的失真情况。 总之,Matlab提供了丰富的工具和函数来进行QAM调制和解调的仿真和实验。使用Matlab,我们可以方便地研究和分析QAM调制技术的性能,并进行相关系统设计和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小灰灰的FPGA

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

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

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

打赏作者

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

抵扣说明:

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

余额充值