课 程 设 计 任 务 书
通信 0802 班
学生班级:
设计名称:基于 matlab 的 M-QAM 通信系统的仿真
起止日期:2011.6.21-2011.7.3
学生姓名:
学号:
指导教师:
设计要求:
1. 取 M=16,产生随机消息序列;
2. 调用 Matlab 函数,根据矩形星座图对消息序列进行 QAM 调制;
3. 加噪声;
4. 解调 QAM;
5. 计算误码率,并与理论误码率比较,作图表示出 16QAM 的信噪比与误码率的关系
曲线。
课 程 设 计 学 生 日 志
设计内容
时间
6.28—6.28
6.29—6.29
6.30—7.3
7.4—7.4
7.5—7.5
查阅资料,确定方案
设计总体方案
功能和要求的具体设计
完成设计报告
答辩
课 程 设 计 考 勤 表
周
星期一
星期二
星期三
星期四
星期五
课 程 设 计 评 语 表
指导教师评语:
成绩:
指导教师:
年 月 日
基于 matlab 的 M-QAM 通信系统
的仿真
一、 设计目的和意义
从信号平面自用率方面看,单独使用幅度或相位携带信息时,不能最充分地
利用信号平面。而 M-QAM 调制则正是解决这一问题的一种调制方式,采用幅度
相位相结合的调制方式,可以使同样大的信息平面内有更多的信息点。
从抗干扰方面看,在星座图上,采用 M-QAM 调制的信息的各点的距离要大
于采用其它调制的,由星座图上点的特性可知,距离越大,抗干扰能力越强,所
以在抗干扰能力方面,QAM 调制也优于其它几种调制方式。
由上可知,在现代数字通信系统中,幅度与相位相结合的多进制调制有着重
要的意义,并且运用也日益广泛。
二、 设计原理
本设计中所采用的 16QAM 为 16 进制的幅度相位相结合调制。16QAM 是用
两路独立的正交 4ASK 信号叠加而成,4ASK 是用多电平信号去键控载波而得
到的信号。它是 2ASK 体制的推广,和 2ASK 相比,这种体制的优点在于信息
传输速率高。其星座图如图 1 所示。
图 1
16QAM 矩形星座图
进制的正交振幅调制是一种振幅相位联合键控信号。16QAM 的产生有 2 种
方法:
(1)正交调幅法,它是有 2 路正交的四电平振幅键控信号叠加而成;
(2)复合相移法:它是用 2 路独立的四相位移相键控信号叠加而成。
16QAM 信号采取正交相干解调的方法解调,解调器首先对收到的 16QAM
信号进行正交相干解调,一路与 cos ω c t 相乘,一路与 sin ω c t 相乘。然后
经过低通滤波器,低通滤波器 LPF 滤除乘法器产生的高频分量,获得有用信号,
低通滤波器 LPF 输出经抽样判决可恢复出电平信号。
在本次设计中,16QAM 的调制和解调均调用 matlab 中的 QAM 专用调制解
调函数 qammod()和 qamdemod()。其中 qammod()用于 QAM 调制,qamdemod()
用于 QAM 解调。再分别用两个子函数完成调制前的串并转换和解调后的并串转
换。
三、 详细设计步骤
1) 首先进行系统的分析的设计,整个设计分为如下几个部分:随机序
列的产生,序列的串并和并串转换,16QAM 调制,星座图的绘制,16QAM
解调,加入噪声,误码率的测量及绘图。
2) 第一步是编写程序代码,产生一个“0”“1”随机序列,设定长度 N
为 5000,代码如下:
N=5000;
SendIn=randint(1,N);%产生 5000 个随机的 01 序列
3) 对产生的二进制随机序列进行串并转换,实现将每连续的 4 位二进
制码组合在一起,由于是调用 matlab 系统函数调制解调,在此将转换后边的
序列 进行十进制转换,方便后面的调制,再将转换好的序列通过调 用
qammod()函数进行 16qam 调制,具体代码如下:
[Send,n]=t2f(SendIn);%二进制换到十进制
SendMod=qammod(Send,16);%16QAM 调制
串并转换子函数代码如下:
function [y,n]=t2f(x)
n=1;
y=[];
j=length(x);
k=mod(j,4);
j=j-k;
for i=1:4:j;
y(n)=x(i)*8+x(i+1)*4+x(i+2)*2+x(i+3)*1;
n=n+1;
end
n=n-1;
4) 绘制星座图,此处选择绘制出三幅星座图,第一幅为原始无噪声情
况下的星座图,第一幅为信噪比为 10dB 情况下的星座,第三幅为信噪比为
0dB 情况下的星座图。其中加入指定信噪比的噪声通过 awgn()函数来实现。
通过星座图,可以很直观地看出 16QAM 的特点,通过三幅图的比较,可以
观察出噪声对信号的干扰影响。代码如下:
%绘星座图
scatterplot(SendMod);
title('原始信号星座图');
SNRTest=awgn(SendMod,10);%加噪声
scatterplot(SNRTest);
title('10dB 信噪比时星座图');
SNRTest=awgn(SendMod,0);%加噪声
scatterplot(SNRTest);
title('0dB 信噪比时星座图');
5) 接收解调受噪声干扰的 QAM 信号,通过循环接收并统计受到不同信
噪比干扰的 QAM 信号,然后对收到的信号进行并串转换。再计算出不同信
噪比情况下的接收端的误码率。并绘制出误码率跟信噪比的关系曲线。代码
如下:
Count=[];
for SNR=-20:1:20;%信噪比从-10 到 10
sum=0;%统计误码数
Receive=awgn(SendMod,SNR);%加噪声
ReceiveDemod=qamdemod(Receive,16);%16QAM 解调
[ReceiveOut,m]=f2t(ReceiveDemod);%十进制换到二进制
for k=1:m
if ReceiveOut(k)~=SendIn(k);
sum=sum+1;
end
end
Count(SNR+21)=sum/m;
end
h3=figure;
h3=plot(-20:20,Count);
xlabel('信噪比(dB)');
ylabel('误码率');
title('信噪比与误码率的关系');
并串转换子函数代码如下:
function [y,n]=f2t(x)
j=length(x);
n=1;
for i=1:j;
if x(i)>15;
y(n)=1;
y(n+1)=1;
y(n+2)=1;
y(n+3)=1;
elseif x(i)<0;
y(n)=0;
y(n+1)=0;
y(n+2)=0;
y(n+3)=0;
else
y(n)=fix(x(i)/8);
y(n+1)=fix((x(i)-y(n)*8)/4);
y(n+2)=fix((x(i)-y(n)*8-y(n+1)*4)/2);
y(n+3)=mod(x(i),2);
n=n+4;
end
end
n=n-1;
四、 设计结果及分析
在 matlab 中运编写好的 qam 函数,观察并分析结果。
原始无噪声的信号星座图:
图 2 原始信号星座图