16QAM调制解调的基本原理以及仿真

QAM调制的基本概念

QAM调制也叫振幅和相位联合键控,在QAM信号中,调制的实际上是信号的振幅和相位。如下面的推导一样。

假设QAM一个码元的调制信号表达式为:

e_k(t)=A_k \cdot \cos (\omega c \cdot t+\theta_k)

通过推导可得:

e_k(t)=A_k \cos \theta_k \cos \omega_{\mathrm{c}} t-A_k \sin \theta_k \sin \omega_{\mathrm{c}} t

因此调制信号可以看作是两个正交的振幅键控信号的和。

QAM调制中用到的基本概念

差分编码

为什么QPSK、DPSK以及本文的QAM调制中需要用到差分编码呢?这是因为通信过程中,如果收发端的载波频率相位不一致的话,会导致相位模糊,因此发送端会对发送的bit数据进行差分编码,将绝对相位转为相对相位,这样可以降低相位模糊带来的消极影响。

但是对于多进制的QAM调制来说,考虑到差分编码的实现难度和所需的资源较大,因此我们可对每个符号的前两个高位比特进行差分编码。

假设A_kB_k代表第k个码元的前两个高位比特,则得到差分编码后的数据I_kQ_k分别为:

\mathrm{I}_{\mathrm{k}}=\left[\left(\overline{\mathrm{A}_{\mathrm{k}} \oplus \mathrm{B}_{\mathrm{k}}}\right) \cdot\left(\mathrm{A}_{\mathrm{k}} \oplus \mathrm{I}_{\mathrm{k}-1}\right)\right] \oplus\left[\left(\mathrm{A}_{\mathrm{k}} \oplus \mathrm{B}_{\mathrm{k}}\right) \cdot\left(\mathrm{A}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}-1}\right)\right]

\mathrm{Q}_{\mathrm{k}}=\left[\left(\overline{\mathrm{A}_{\mathrm{k}} \oplus \mathrm{B}_{\mathrm{k}}}\right) \cdot\left(\mathrm{A}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}-1}\right)\right] \oplus\left[\left(\mathrm{A}_{\mathrm{k}} \oplus \mathrm{B}_{\mathrm{k}}\right) \cdot\left(\mathrm{A}_{\mathrm{k}} \oplus \mathrm{I}_{\mathrm{k}-1}\right)\right]

同样可以得到差分解码的公式为:

\mathrm{A}_{\mathrm{k}}=\left[\left(\overline{\mathrm{I}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}}}\right) \cdot\left(\mathrm{I}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}-1}\right)\right] \oplus\left[\left(\mathrm{I}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}}\right) \cdot\left(\mathrm{I}_{\mathrm{k}} \oplus \mathrm{I}_{\mathrm{k}-1}\right)\right]

\mathrm{B}_{\mathrm{k}}=\left[\left(\overline{\mathrm{I}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}}}\right) \cdot\left(\mathrm{Q}_{\mathrm{k}} \oplus \mathrm{I}_{\mathrm{k}-1}\right)\right] \oplus\left[\left(\mathrm{I}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}}\right) \cdot\left(\mathrm{Q}_{\mathrm{k}} \oplus \mathrm{Q}_{\mathrm{k}-1}\right)\right]

星座图

星座图有什么作用呢?如图所示,我个人的理解是,星座图是为了让我们更直观地理解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');

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值