(完整版)16QAM调制与解调的MATLAB实现及调制性能分析 下载本文

内容发布更新时间 : 2024/5/26 2:34:18星期一 下面是文章的全部内容请认真阅读。

虚线大圆上的4个大黑点表示一个QPSK信号矢量的位置。在这4个位置上可以叠加上第二个QPSK矢量,后者的位置用虚线小圆上的4个小黑点表示。

3 设计过程 3.1 设计思路

由设计原理中可知MQAM调制又称为星座调制,故我们在设计16QAM调制系统时就可以星座图来进行编程。下面我们就借用如图8所示的星座图设计一个16QAM调制系统。

图 8 16QAM星座

在图中共有16个点,每个点用4个比特表示,代表调制以后的一个矢量位置(这个点拥有唯一的振幅与相位)。因此我们可以把横轴看作是实轴,纵轴看作虚轴。由于每个点与跟它相邻的四个点是等距,且设为2,则每个点都可用一个虚数进行表示。例如点0000可用-1-j表示,这个虚数的模就是相当于16QAM信号的振幅,相角就相当于16QAM信号的相位。所以16QAM的调制过程就可以用如下语句进行描述:

if A(1,b:c)==[0 0 0 0] B(k)=-1-1i;

elseif A(1,b:c)==[0 0 0 1] B(k)=-3-1i;

elseif A(1,b:c)==[0 0 1 0] B(k)=-1-3i;

elseif A(1,b:c)==[0 0 1 1] B(k)=-3-3i;

elseif A(1,b:c)==[0 1 0 0]

B(k)=1-1i;

elseif A(1,b:c)==[0 1 0 1] B(k)=1-3i;

elseif A(1,b:c)==[0 1 1 0] B(k)=3-1i;

elseif A(1,b:c)==[0 1 1 1] B(k)=3-3i;

elseif A(1,b:c)==[1 0 0 0] B(k)=-1+1i;

elseif A(1,b:c)==[1 0 0 1] B(k)=-1+3i;

elseif A(1,b:c)==[1 0 1 0] B(k)=-3+1i;

elseif A(1,b:c)==[1 0 1 1] B(k)=-3+3i;

elseif A(1,b:c)==[1 1 0 0] B(k)=1+1i;

elseif A(1,b:c)==[1 1 0 1] B(k)=3+1i;

elseif A(1,b:c)==[1 1 1 0] B(k)=1+3i;

elseif A(1,b:c)==[1 1 1 1] B(k)=3+3i; end

当调制以后的信号经过信道加噪以后,我们必须对其进行解调。由于加噪了的缘故,调制以后的信号不再是原来的信号,而应该有不同。因此在解调时不能简单的将上述过程逆转,即不能由-1-j就判断为0000。而应该对虚数的实部和虚部设定一个范围后再进行判断。这个范围边界的选取原理我们可以借用量化的概念,取相邻虚数的实部的平均数和虚部的平均数。以下为16QAM解调过程的程序语句:

if (real(D(n))<-2)&&(imag(D(n))<-2) C(1,d:e)=[0 0 1 1];

elseif (real(D(n))<-2)&&(imag(D(n))<0) C(1,d:e)=[0 0 0 1];

elseif (real(D(n))<-2)&&(imag(D(n))<2) C(1,d:e)=[1 0 1 0];

elseif (real(D(n))<-2)&&(imag(D(n))>=2) C(1,d:e)=[1 0 1 1];

elseif (real(D(n))<0)&&(imag(D(n))<-2) C(1,d:e)=[0 0 1 0];

elseif (real(D(n))<0)&&(imag(D(n))<0)

C(1,d:e)=[0 0 0 0];

elseif (real(D(n))<0)&&(imag(D(n))<2) C(1,d:e)=[1 0 0 0];

elseif (real(D(n))<0)&&(imag(D(n))>=2) C(1,d:e)=[1 0 0 1];

elseif (real(D(n))<2)&&(imag(D(n))<-2) C(1,d:e)=[0 1 0 1];

elseif (real(D(n))<2)&&(imag(D(n))<0) C(1,d:e)=[0 1 0 0];

elseif (real(D(n))<2)&&(imag(D(n))<2) C(1,d:e)=[1 1 0 0];

elseif (real(D(n))<2)&&(imag(D(n))>=2) C(1,d:e)=[1 1 1 0];

elseif (real(D(n))>=2)&&(imag(D(n))<-2)

C(1,d:e)=[0 1 1 1];

elseif (real(D(n))>=2)&&(imag(D(n))<0) C(1,d:e)=[0 1 1 0];

elseif (real(D(n))>=2)&&(imag(D(n))<2)

C(1,d:e)=[1 1 0 1];

elseif(real(D(n))>=2)&&(imag(D(n))>=2) C(1,d:e)=[1 1 1 1]; end

3.2 设计总程序

clear all; close all; N=40000;

K=4*N;%信息长度 L=7*N; W=7*N/4;

E=randsrc(1,K,[0,1]);%信源′

B=zeros(1,W);QAM调制后的信号 C=zeros(1,L);QAM解调后的信号 num=zeros(20,1);%误比特数 ber=zeros(20,1);%误比特率 for SNR=1:1:20 %汉明编码

A=encode(E,7,4,'hamming/binary'); QAM调制过程 for k=1:W b=4*k-3; c=4*k;

if A(1,b:c)==[0 0 0 0] B(k)=-1-1i;

elseif A(1,b:c)==[0 0 0 1] B(k)=-3-1i;

elseif A(1,b:c)==[0 0 1 0] B(k)=-1-3i;

elseif A(1,b:c)==[0 0 1 1] B(k)=-3-3i;

elseif A(1,b:c)==[0 1 0 0] B(k)=1-1i;

elseif A(1,b:c)==[0 1 0 1] B(k)=1-3i;

elseif A(1,b:c)==[0 1 1 0] B(k)=3-1i;

elseif A(1,b:c)==[0 1 1 1] B(k)=3-3i;

elseif A(1,b:c)==[1 0 0 0] B(k)=-1+1i;

elseif A(1,b:c)==[1 0 0 1] B(k)=-1+3i;

elseif A(1,b:c)==[1 0 1 0] B(k)=-3+1i;

elseif A(1,b:c)==[1 0 1 1] B(k)=-3+3i;

elseif A(1,b:c)==[1 1 0 0] B(k)=1+1i;

elseif A(1,b:c)==[1 1 0 1] B(k)=3+1i;

elseif A(1,b:c)==[1 1 1 0] B(k)=1+3i;

elseif A(1,b:c)==[1 1 1 1] B(k)=3+3i; end end

%信道加噪

D=awgn(B,SNR); QAM解调过程 for n=1:W d=4*n-3; e=4*n;

if (real(D(n))<-2)&&(imag(D(n))<-2) C(1,d:e)=[0 0 1 1];

elseif (real(D(n))<-2)&&(imag(D(n))<0) C(1,d:e)=[0 0 0 1];

elseif (real(D(n))<-2)&&(imag(D(n))<2)

C(1,d:e)=[1 0 1 0];

elseif (real(D(n))<-2)&&(imag(D(n))>=2) C(1,d:e)=[1 0 1 1];

elseif (real(D(n))<0)&&(imag(D(n))<-2) C(1,d:e)=[0 0 1 0];

elseif (real(D(n))<0)&&(imag(D(n))<0) C(1,d:e)=[0 0 0 0];

elseif (real(D(n))<0)&&(imag(D(n))<2) C(1,d:e)=[1 0 0 0];

elseif (real(D(n))<0)&&(imag(D(n))>=2) C(1,d:e)=[1 0 0 1];

elseif (real(D(n))<2)&&(imag(D(n))<-2) C(1,d:e)=[0 1 0 1];

elseif (real(D(n))<2)&&(imag(D(n))<0) C(1,d:e)=[0 1 0 0];

elseif (real(D(n))<2)&&(imag(D(n))<2) C(1,d:e)=[1 1 0 0];

elseif (real(D(n))<2)&&(imag(D(n))>=2) C(1,d:e)=[1 1 1 0];

elseif (real(D(n))>=2)&&(imag(D(n))<-2) C(1,d:e)=[0 1 1 1];

elseif (real(D(n))>=2)&&(imag(D(n))<0) C(1,d:e)=[0 1 1 0];

elseif (real(D(n))>=2)&&(imag(D(n))<2) C(1,d:e)=[1 1 0 1];

elseif (real(D(n))>=2)&&(imag(D(n))>=2) C(1,d:e)=[1 1 1 1]; end end

%汉明译码

F=decode(C,7,4,'hamming/binary'); %求误比特率

[num(SNR,1),ber(SNR,1)]=biterr(F,E); end

%误比特数图 plot(num); figure

%误比特率图 plot(ber);

3.3 系统仿真结果图