16QAM调制系统仿真docx.docx
《16QAM调制系统仿真docx.docx》由会员分享,可在线阅读,更多相关《16QAM调制系统仿真docx.docx(15页珍藏版)》请在冰豆网上搜索。
16QAM调制系统仿真docx
16QAM调制系统仿真
16QAM调制系统仿真
1.QAM简介
正交幅度调制(QAM,Quadrature Amplitude Modulation)是一种在两个正交载波上进行幅度调制的调制方式。
这两个载波通常是相位差为90度(π/2)的正弦波,因此被称作正交载波。
这种调制方式因此而得名。
QAM是一种振幅和相位联合键控。
MPSK和MDPSK等相移键控的带宽和功率方面都具有优势,即带宽占用小和比特噪声比要求低。
但是,在MPSK体制中,随着M的增大,相邻相位的距离逐渐减小,使噪声容限随之减小,误码率难以保证。
为了改善在M大时的噪声容限,发展出了QAM体制。
在QAM中,信号的振幅和相位作为两个独立的参量同时受到调制。
这种信号的一个码元可以表示为
(2—1)
式中:
k=整数;
和
分别可以取多个离散值。
式(2—1)可以展开为
(2—2)
令Xk=Akcosθk,Yk=-Aksinθk
则式(2—1)变为
(2—3)
和
也是可以取多个离散的变量。
从式(2—3)看出,
可以看作是两个正交的振幅键控信号之和。
在式(2—1)中,若θk值仅可以取π/4和-π/4,Ak值仅可以取+A和-A,则此QAM信号就成为QPSK信号,如下图所示:
所以,QPSK信号就是一种最简单的QAM信号。
有代表性的QAM信号是16进制的,记为16QAM,它的矢量图示于下图中:
图中用黑点表示每个码元的位置,并且示出它是由两个正交矢量合成的。
类似地,有64QAM和256QAM等QAM信号,它们总称为MQAM
,调制。
由于从其矢量图看像是星座,故又称星座调制。
16QAM信号的产生方法主要有两种。
第一种是正交调幅法,即用两路独立的正交4ASK信号叠加,形成16QAM信号,如下图所示;第二种方法是复合相移法,它用两路独立的QPSK信号叠加,形成16QAM信号,如下图示:
虚线大圆上的4个大黑点表示一个QPSK信号矢量的位置。
在这4个位置上可以叠加上第二个QPSK矢量,后者的位置用虚线小圆上的4个小黑点表示。
2仿真过程
由设计原理中可知MQAM调制又称为星座调制,故我们在设计16QAM调制系统时就可以星座图来进行编程。
下面我们就借用下图所示的星座图设计一个16QAM调制系统。
在图中共有16个点,每个点用4个比特表示,代表调制以后的一个矢量位置(这个点拥有唯一的振幅与相位)。
因此我们可以把横轴看作是实轴,纵轴看作虚轴。
由于每个点与跟它相邻的四个点是等距,且设为2,则每个点都可用一个虚数进行表示。
例如点0000可用-1-j表示,这个虚数的模就是相当于16QAM信号的振幅,相角就相当于16QAM信号的相位。
所以16QAM的调制过程就可以用如下语句进行描述:
ifA(1,b:
c)==[0000]
B(k)=-1-1i;
elseifA(1,b:
c)==[0001]
B(k)=-3-1i;
elseifA(1,b:
c)==[0010]
B(k)=-1-3i;
elseifA(1,b:
c)==[0011]
B(k)=-3-3i;
elseifA(1,b:
c)==[0100]
B(k)=1-1i;
elseifA(1,b:
c)==[0101]
B(k)=1-3i;
elseifA(1,b:
c)==[0110]
B(k)=3-1i;
elseifA(1,b:
c)==[0111]
B(k)=3-3i;
elseifA(1,b:
c)==[1000]
B(k)=-1+1i;
elseifA(1,b:
c)==[1001]
B(k)=-1+3i;
elseifA(1,b:
c)==[1010]
B(k)=-3+1i;
elseifA(1,b:
c)==[1011]
B(k)=-3+3i;
elseifA(1,b:
c)==[1100]
B(k)=1+1i;
elseifA(1,b:
c)==[1101]
B(k)=3+1i;
elseifA(1,b:
c)==[1110]
B(k)=1+3i;
elseifA(1,b:
c)==[1111]
B(k)=3+3i;
End
当调制以后的信号经过信道加噪以后,我们必须对其进行解调。
由于加噪了的缘故,调制以后的信号不再是原来的信号,而应该有不同。
因此在解调时不能简单的将上述过程逆转,即不能由-1-j就判断为0000。
而应该对虚数的实部和虚部设定一个范围后再进行判断。
这个范围边界的选取原理我们可以借用量化的概念,取相邻虚数的实部的平均数和虚部的平均数。
以下为16QAM解调过程的程序语句:
if(real(D(n))<-2)&&(imag(D(n))<-2)
C(1,d:
e)=[0011];
elseif(real(D(n))<-2)&&(imag(D(n))<0)
C(1,d:
e)=[0001];
elseif(real(D(n))<-2)&&(imag(D(n))<2)
C(1,d:
e)=[1010];
elseif(real(D(n))<-2)&&(imag(D(n))>=2)
C(1,d:
e)=[1011];
elseif(real(D(n))<0)&&(imag(D(n))<-2)
C(1,d:
e)=[0010];
elseif(real(D(n))<0)&&(imag(D(n))<0)
C(1,d:
e)=[0000];
elseif(real(D(n))<0)&&(imag(D(n))<2)
C(1,d:
e)=[1000];
elseif(real(D(n))<0)&&(imag(D(n))>=2)
C(1,d:
e)=[1001];
elseif(real(D(n))<2)&&(imag(D(n))<-2)
C(1,d:
e)=[0101];
elseif(real(D(n))<2)&&(imag(D(n))<0)
C(1,d:
e)=[0100];
elseif(real(D(n))<2)&&(imag(D(n))<2)
C(1,d:
e)=[1100];
elseif(real(D(n))<2)&&(imag(D(n))>=2)
C(1,d:
e)=[1110];
elseif(real(D(n))>=2)&&(imag(D(n))<-2)
C(1,d:
e)=[0111];
elseif(real(D(n))>=2)&&(imag(D(n))<0)
C(1,d:
e)=[0110];
elseif(real(D(n))>=2)&&(imag(D(n))<2)
C(1,d:
e)=[1101];
elseif(real(D(n))>=2)&&(imag(D(n))>=2)
C(1,d:
e)=[1111];
end
3设计总程序
clearall;
closeall;
N=40000;
K=4*N;%信息长度
L=7*N;
W=7*N/4;
E=randsrc(1,K,[0,1]);%信源´
B=zeros(1,W);%16QAM调制后的信号
C=zeros(1,L);%16QAM解调后的信号
num=zeros(20,1);%误比特数
ber=zeros(20,1);%误比特率
forSNR=1:
1:
20
A=encode(E,7,4,'hamming/binary');
%16QAM调制过程
fork=1:
W
b=4*k-3;
c=4*k;
ifA(1,b:
c)==[0000]
B(k)=-1-1i;
elseifA(1,b:
c)==[0001]
B(k)=-3-1i;
elseifA(1,b:
c)==[0010]
B(k)=-1-3i;
elseifA(1,b:
c)==[0011]
B(k)=-3-3i;
elseifA(1,b:
c)==[0100]
B(k)=1-1i;
elseifA(1,b:
c)==[0101]
B(k)=1-3i;
elseifA(1,b:
c)==[0110]
B(k)=3-1i;
elseifA(1,b:
c)==[0111]
B(k)=3-3i;
elseifA(1,b:
c)==[1000]
B(k)=-1+1i;
elseifA(1,b:
c)==[1001]
B(k)=-1+3i;
elseifA(1,b:
c)==[1010]
B(k)=-3+1i;
elseifA(1,b:
c)==[1011]
B(k)=-3+3i;
elseifA(1,b:
c)==[1100]
B(k)=1+1i;
elseifA(1,b:
c)==[1101]
B(k)=3+1i;
elseifA(1,b:
c)==[1110]
B(k)=1+3i;
elseifA(1,b:
c)==[1111]
B(k)=3+3i;
end
end
%信道加噪
D=awgn(B,SNR);
%16QAM解调过程
forn=1:
W
d=4*n-3;
e=4*n;
if(real(D(n))<-2)&&(imag(D(n))<-2)
C(1,d:
e)=[0011];
elseif(real(D(n))<-2)&&(imag(D(n))<0)
C(1,d:
e)=[0001];
elseif(real(D(n))<-2)&&(imag(D(n))<2)
C(1,d:
e)=[1010];
elseif(real(D(n))<-2)&&(imag(D(n))>=2)
C(1,d:
e)=[1011];
elseif(real(D(n))<0)&&(imag(D(n))<-2)
C(1,d:
e)=[0010];
elseif(real(D(n))<0)&&(imag(D(n))<0)
C(1,d:
e)=[0000];
elseif(real(D(n))<0)&&(imag(D(n))<2)
C(1,d:
e)=[1000];
elseif(real(D(n))<0)&&(imag(D(n))>=2)
C(1,d:
e)=[1001];
elseif(real(D(n))<2)&&(imag(D(n))<-2)
C(1,d:
e)=[0101];
elseif(real(D(n))<2)&&(imag(D(n))<0)
C(1,d:
e)=[0100];
elseif(real(D(n))<2)&&(imag(D(n))<2)
C(1,d:
e)=[1100];
elseif(real(D(n))<2)&&(imag(D(n))>=2)
C(1,d:
e)=[1110];
elseif(real(D(n))>=2)&&(imag(D(n))<-2)
C(1,d:
e)=[0111];
elseif(real(D(n))>=2)&&(imag(D(n))<0)
C(1,d:
e)=[0110];
elseif(real(D(n))>=2)&&(imag(D(n))<2)
C(1,d:
e)=[1101];