QAM调制的基本概念
QAM调制也叫振幅和相位联合键控,在QAM信号中,调制的实际上是信号的振幅和相位。如下面的推导一样。
假设QAM一个码元的调制信号表达式为:
通过推导可得:
因此调制信号可以看作是两个正交的振幅键控信号的和。
QAM调制中用到的基本概念
差分编码
为什么QPSK、DPSK以及本文的QAM调制中需要用到差分编码呢?这是因为通信过程中,如果收发端的载波频率相位不一致的话,会导致相位模糊,因此发送端会对发送的bit数据进行差分编码,将绝对相位转为相对相位,这样可以降低相位模糊带来的消极影响。
但是对于多进制的QAM调制来说,考虑到差分编码的实现难度和所需的资源较大,因此我们可对每个符号的前两个高位比特进行差分编码。
假设、
代表第
个码元的前两个高位比特,则得到差分编码后的数据
、
分别为:
同样可以得到差分解码的公式为:
星座图
星座图有什么作用呢?如图所示,我个人的理解是,星座图是为了让我们更直观地理解IQ调制,我们可以把I路对应的幅值看作是星座图中的横轴,把Q路对应的幅值看作是星座图中的竖轴,确定两个值后,就能找到星座图中对应的点,进而完成解调的工作。相反,在确定星座图中的点后,我们也可以通过对应点的坐标,完成信号的IQ调制。
根升余弦滤波器
为什么调制和解调过程中分别用到了两个相同的根升余弦滤波器呢?这是因为在实际通信过程中,通信系统的传输特性并不理想,这会导致前后码元的波形畸变、展宽,使得前面的波形出现很长的拖尾,蔓延到当前的抽样时刻上,从而对当前码元的判决造成干扰。
为什么会产生码间串扰呢?我个人的理解是,标准的基带数据是标准的矩形脉冲,在时域上是有限的,因此在频域上是无限延伸的,但是在接收端,我们又用到了滤波器,这对矩形脉冲对应的频域不再是无限延伸的了,而是有限的,而频域上的有限,又对应时域上的无限延伸,这才导致波形出现拖尾。而为了解决码间串扰,就需要用到升余弦滤波器,又因为接收两端都需要滤波器,因此就将一个升余弦滤波器分成了两个根升余弦滤波器。
QAM信号的生成
QAM信号的生成过程如图所示,先对二进制数据进行差分编码,然后将编码后的数据分成IQ两路进行传输,再对两路数据分别进行成形滤波和加载波,最后求和得到QAM调制信号。
QAM信号的解调
QAM的解调过程如图所示,首先分成I路和Q路对调制信号进行相干解调,然后通过低通滤波器得到I路和Q路的数据,进而画出星座图,再根据星座图得到二进制数据,完成解调的整个过程。
QAM 信号的调制解调代码如图所示。
close all;
clear all;
Rb=1*10^6; %码速率为1MHz
a=0.8; %成形滤波器系数
fs=8*10^6; %采样速率
fc=2*10^6; %载波频率
N=5000; %仿真数据的长度
t=0:1/fs:(N*fs/Rb-1)/fs;%产生时间序列
s=(randi(16,N,1)-1);%产生数据
Bs=dec2bin(s,4); %将十进制数据转换成4比特的二进制数据
%取高2比特分别存放在A,B变量中
A=s>7;
B=(s-A*8)>3;
%差分编码后的数据存放在C,D中
C=zeros(N,1);D=zeros(N,1);
for i=2:N
C(i)=mod(((~mod(A(i)+B(i),2))&mod(A(i)+C(i-1),2)) + (mod(A(i)+B(i),2)&mod(A(i)+D(i-1),2)),2);
D(i)=mod(((~mod(A(i)+B(i),2))&mod(B(i)+D(i-1),2)) + (mod(A(i)+B(i),2)&mod(B(i)+C(i-1),2)),2);
end
%差分编码后的高2比特数据与原数据低2比特合成映射前的数据DBs
DBs=C*8+D*4+s-A*8-B*4;
%完成调制前的正交同相支路数据映射
I=zeros(1,N);Q=zeros(1,N);
for i=1:N
switch DBs(i)
case 0, I(i)=3; Q(i)=3;
case 1, I(i)=1; Q(i)=3;
case 2, I(i)=3; Q(i)=1;
case 3, I(i)=1; Q(i)=1;
case 4, I(i)=-3;Q(i)=3;
case 5, I(i)=-3;Q(i)=1;
case 6, I(i)=-1;Q(i)=3;
case 7, I(i)=-1;Q(i)=1;
case 8, I(i)=3; Q(i)=-3;
case 9, I(i)=3; Q(i)=-1;
case 10,I(i)=1; Q(i)=-3;
case 11,I(i)=1; Q(i)=-1;
case 12,I(i)=-3;Q(i)=-3;
case 13,I(i)=-1;Q(i)=-3;
case 14,I(i)=-3;Q(i)=-1;
otherwise,I(i)=-1;Q(i)=-1;
end
end
%对数据进行上采样
i_lu=upsample(I,fs/Rb);
q_lu=upsample(Q,fs/Rb);
%平方根升余弦滤波器
n_T=[-2 2];
rate=fs/Rb;
T=1;
Shape_b = rcosfir(a,n_T,rate,T,'sqrt');
%对基带数据进行升余弦滤波;
rcos_Ads_i=filter(Shape_b,1,i_lu);
rcos_Ads_q=filter(Shape_b,1,q_lu);
%产生同相正交两路载频信号
f0_i=cos(2*pi*fc*t);
f0_q=sin(2*pi*fc*t);
%产生16QAM已调信号
qam16=rcos_Ads_i.*f0_i+rcos_Ads_q.*f0_q;
%相干解调
demod_mult_i=qam16.*f0_i;
demod_mult_q=qam16.*f0_q;
%根升余弦滤波
demod=filter(Shape_b,1,demod_mult_i+sqrt(-1)*demod_mult_q);
%绘制相干解调后的星座图
scatterplot(demod,fs/Rb,6*rate,'bx');