天津理工大学计算机和通信工程学院通信工程专业设计说明书
基于Matlab/Simulink
QPSK调制解调仿真设计和研究
目录
摘 要.......................................................................2
第一章 前 言...............................................................21.1专业设计任务及要求.............................................................................................................21.2 Matlab介绍..............................................................21.3Matlab下simulink介绍.....................................................31.4通信系统模型............................................................3第二章 QPSK调制............................................................42.1QPSK介绍...............................................................42.2 QPSK调制原理...........................................................4
2.2.2 选择法........................................................................................................................5
2.2.1相乘法........................................................................................................................4
2.5.1simulink调制建模....................................................7
2.5.2simulink调制仿真结果.................................................................................................8
第三章 QPSK解调...........................................................13
3.1 QPSK解调原理.......................................................13
3.2 QPSK解调原理框图..........................................................................................................13
3.3
QPSK解调方法Matlab仿真..............................................13 3.4 QPSK解调方法Matlab-simulink仿真......................................14
3.4.1 QPSK解调建模....................................................14
3.4.2 传输信道..................................................................................................................16
3.4.3仿真结果..................................................................................................................16
3.5仿真结果分析.......................................................................................................................18第四章 QPSK通信系统性能分析...............................................19第五章结论.................................................................19参考文件.....................................................................20附录.......................................................................20
摘 要
正交相移键控(QPSK),是一个数字调制方法。QPSK技术含有抗干扰能力好、误码率低、 频谱利用效率高等一系列优点。
论 | 文 | 关 | 键 | 介 | 绍 | 了 | 正 | 交 | 相 | 移 | 键 | 控 | (QPSK)概 | 况 | , | ||
和 | 正 | 交 | 相 | 移 | 键 | 控 | QPSK调 | 制 | 解 | 调 | 概 | 念 | 和 | 原 | 理 | , |
利用Matlab中M文件和Simulink模块对QPSK调制解调系统进行了仿真,
对 | QPSK在 | 高 | 斯 | 白 | 噪 | 声 | 信 | 道 | 中 | 性 | 能 | 进 | 行 | 了 | , |
分析了解Simulink中包含到QPSK多种模块功效。
【关键词】Matlab QPSK Simulnk 仿真
第一章 前 言
1了解并掌握QPSK调制和解调基础原理;
2在通信原理课程基础上设计和分析简单通信系统;
3学 | 会 | 利 | 用 | MATLAB7.0编 | 写 | 程 | 序 | 进 | 行 | 仿 | 真 | , |
依据试验结果能分析所设计系统性能。
4学习MATLAB基础知识,熟悉MATLAB集成环境下Simulink仿真平台。 5利用通信原理相关知识在仿真平台中设计QPSK调制和解调仿真系统并用示波器观察解调后波形
6在指导老师指导下,独立完成课程设计全部内容,
能正确叙述和分析设计和试验结果。
1.2 Matlab介绍
MATLAB是 | MATrix | LABoratory缩 | 写 | , | 是 | 一 | 款 | 由 | 美 | 国 | Math |
Works企业出品商业数学软件。MATLAB是一个用于算法开发、数据可视化、
数据分析和数值计算高级技术计算语言和交互式环境。除了矩阵运算、
绘 | 制 | 函 | 数 | /数 | 据 | 图 | 像 | 等 | 常 | 见 | 功 | 效 | 外 | , |
MATLAB还能够用来创建用户界面及和调用其它语言(包含C,
C++和 | FORTRAN)编 | 写 | 程 | 序 | 。 |
尽管MATLAB关键用于数值计算,不过因为大量额外工具箱它也适合于不一样领域
应用,如控制系统设计和分析、图像处理和信号处理和通信、
金 | 融 | 建 | 模 | 和 | 分 | 析 | 等 | 。 |
除了一个完整Simulink包,提供了一个可视化开发环境,通常见于系统仿真、
动态/嵌入式系统开发等。
1.3 Matlab下simulink介绍
仿真和综合分析集成环境。在该环境中只要经过简单鼠标操作,
就能够结构出复杂系统。Simulink提供了一个建立模型方块图图形用户接口,
这个创建过程只需单击和拖动鼠标操作就能完成,它提供了一个愈加快捷、
直接明了方法,而且用户能够立即看到系统仿真结果。
Simulink含有适应面广、结构和步骤清楚及仿真精细、 效率高、 贴近实际、
等 | 优 | 点 | , |
基于以上优点Simulink已被广泛应用于控制理论和数字信号处理复杂仿真和设
计。同时有大量第三方软件和硬件应用于Simulink。
1.4 通信系统模型
通信系统就是传输信息所需要一切技术设备和传输媒质总和,
包含信息源、发送设备、 信道、 接收设备和信宿(受信者), 它通常模型图1.4.1所表示。
信息源 | | 发送设备 | | 信道 | | 接收设备 | | 受信者 |
噪声源
图1.4.1通信系统通常模型
模拟通信系统是利用模拟信号来传输消息通信系统,其模型图1.4.2所表示。
信息源 | | 调制器 | | 信道 | | 解调器 | | 受信者 |
第二章 QPSK调制
2.1 QPSK介绍
Quadrature | Phase | Shift |
Keying经过使用载波四个各不相同相位差来表示输入信息,是含有四进制相移键控。QPSK是在M=4时数字调相技术,它经过约定四种载波相位,分别为45°, 135°, 225°, 275°,
输入数据为二进制数字序列,因为载波相位是四进制,
全 | 部 | 我 | 们 | 需 | 要 | 把 | 二 | 进 | 制 | 数 | 据 | 变 | 为 | 四 | 进 | 制 | , |
即把二进制序列中每两个比特分成一组,四种排列组合,即00,01, 10, 11, 双比特码元即为一组。每两位二进制信息比特组成每一组,它们分别表示着着四个符号中某一个符号。
2.2 QPSK调制原理
QPSK调制有两种产生方法相乘电路法和选择法。
2.2.1相乘法
输 | 入 | 信 | 号 | 是 | 二 | 进 | 制 | 不 | 归 | 零 | 双 | 极 | 性 | 码 | 元 | , |
它经过“ 串并变换” 电路变成了两路码元。变成并行码元后,
每个码元连续时间是输入码元两倍。用两路正交载波去调制并行码元。
图2.2.1选择法
QPSK调制中,QPSK信号能够看成是两个载波正交2PSK信号调制器组成。原理分析以下:基础原理和系统结构QPSK和二进制PSK一样,传输信号包含信息全部存在于相位中。部分载波相位取四个等间隔值之一,
如л/4、3л/4、 5л/4、7л/4。 对应, 可将发射信号定义为:
S | t | ( t | ) | | | 2 | E | / | t | cos[ | 2ft | | ( | 2 i | | 1 ) | 4 | 0 | | t | | T b |
0 , | 其他 |
其中,i=1,2, 3, 4; E是发射信号每个符号能量,T为符号连续时间,
载 | 波 | 频 | 率 | f等 | 于 | nc/T, | nc为 | 固 | 定 | 整 | 数 | 。 |
每一个可能相位值对应于一个特定二位组。下面介绍QPSK信号产生和检测。
图 | 为 | 经 | 典 | QPSK发 | 射 | 机 | 框 | 图 | 。 |
输入二进制数据序列首先被不归零(NRZ)电平编码转换器转换为极性形式,
即 | 负 | 号 | 1和 | 0分 | 别 | 用 | E b | 和 | - | E b | 表 | 示 | 。 |
该二进制波形被分接器分成两个分别由输入序列奇数位偶数位组成相互独立二
进制波形,这两个二进制波形分别用a1(t)和a2(t)表示。此时,
在任何一信号时间间隔内a1(t),和a2(t)幅度恰好分别等于Si1和Si2,
这两个二进制波形a1(t)和a2(t)被用来调制一对正交载波:
即 由 发 送 定 。
这1
正交性使这两个信号能够被独立地检测。最终,将这两个二进制PSK信号相加,
从而得期望QPSK。
2.2.2 选择法
输入基带信号经过串并变换后用于控制一个相位选择电路,
根据当初输入双比特ab,决定选择哪个相位载波输出。
图2.2.2选择法
2.3QPSK调制原理框图
图2.3调制原理框图
2.4 QPSK调制方法Matlab仿真
I路信号是用余弦载波,由2进制数据流奇数序列组成;
Q路信号用正弦载波,由2进制数据流偶数序列组成。下面a是Idata,
b就是Qdata, 它们分布和各自载波相乘分别输出I 路信号和 Q 路信号。I
路信号加上Q路信号就是QPSK输出信号。当 I路载波信号是0相位时为1,
是180°相位时为0;当Q路载波信号是0相位时为1,是180°相位时为0。
a列列b列列 | 1 -1 0 -1 0 1 2 3 4 5 6 7 8 1 -1 0 -1 0 1 2 3 4 5 6 7 8 |
1
列列列列
-10
-1 0 1 2 3 4 5 6 7 8
2.5 QPSK调制方法Matlab-simulink仿真
2.5.1simulink调制建模
图2.5.1调制框图
(1)产生需要信号源
在搭建QPSK调制解调系统中使用伯努力信号发生器产生随机01比特序列,每两比特代表就一个符号。BernoulliBinary Generator模块利用伯努利分布原理,对应得到参数为p伯努利分布。伯努利分布均值1- p和方差p(1– p)。一个零概率参数指定p。此次试验中p设置为0.5,即0和1等概。采样时间可依据需要进行设置,比如测误码率时采样时间设为0.01s。
图2.5.2信号源参数设置
(2)串并变换
我们先经过使用buffer这个模块来实现将信号源信号转变为两路信号。
Buffer模块能够重新分配缓冲区块输入样本,用到了Demux,
能 | 够 | 将 | 一 | 个 | 复 | 合 | 输 | 入 | 转 | 化 | 为 | 多 | 个 | 单 | 一 | 输 | 出 | , |
即能够输出多个采样率较低帧信号。但会产生和缓冲区容量相同时延。 所以,
我们能够设置buffer参数容量为2。
图2.5.3Buffer参数设置
(3)单极性信号转化为双极性信号
因 | 为 | QPSK调 | 制 | 信 | 号 | 要 | 求 | 是 | 双 | 极 | 性 | 信 | 号 | , |
所以用伯努利随机生成二进制Generator模块产生信号必需经过转化才能够被使用。利用加法模块和常数产生模块将1和0序列各自减去1/2,再利用百分比运算模块乘以2,就得到了1和-1双极性序列。
分别将两路信号乘以相位相差л/2载波, 然后相加。
(4)调制模块
载波频率可依据需要来进行设置,两路载波同频正交, 相位相差л/2。
我们设上支路相位为0,下支路相位为л/ 2。
图2.5.4上支路载波参数
图2.5.5下支路载波参数
2.5.2 simulink调制仿真结果
图2.5.6信号源和转变后双极性信号
图2.5.7上支路载波
图2.5.8下支路载波
图2.5.9调制信号
第三章 QPSK解调
3.1 QPSK解调原理
QPSK接 收 机 由 一 对 共 输 入 地 相 关 器 组 成 。
这两个相关器分别提供当地产生地相干参考信号1和2。
相关器接收信号x(t),相关器输出地x1和x2被用来和门限值0进行比较。
假如x1>0,则判决同相信道地输出为符号1;假如x1<0
,则判决同相信道输出为符号0。假如正交通道也是如此判决输出。
最终同相信道和正交信道输出这两个二进制数据序列被复加器合并,
重新得到原始二进制序列。在AWGN信道中,判决结果含有最小负号差错概率。
用两路含有相互正交特征载波来解调信号,能够分离这两路正交2PSK信号。
3.2 QPSK解调原理框图相干解调后,并行码元经过并/串变换后,最终得到串行数据流。
图3.2相干解调原理框图
3.3 | QPSK解调方法Matlab仿真 |
|
正交支路和同相支路分别设置两个相关器(或匹配滤波器)
,得到I(t)和Q(t),经电平判决和并/串变换后即可恢复原始信息。
I_demo=QPSK_rc_n0.*cos(2*pi*f1*t1); % 解调(相干解调,和载波相乘)
Q_demo=QPSK_rc_n0.*sin(2*pi*f1*t1);
I_recover=conv(I_demo,xrc); % 低通滤波
Q_recover=conv(Q_demo,xrc);
列列列
2
-20
010 20 30 40 50 6070 80 90 100
I列列列列
2
-20
2
0 10 20 30 80 90 100
0
0
-2
010 20 30 40 50 6070 80 90 100
图3.3matlab解调仿真图
3.4 QPSK解调方法Matlab-simulink仿真
3.4.1 QPSK解调建模
首先将从高斯信道送过来信号分别乘以和调制时载波同频载波,
且相位相差为л/ 2载波。解调能够使用相关器或匹配滤波器进行解调,
此次试验使用是相关器,这时信号需要经过设置积分器。
因为积分器设置为使用积分器时,需要在时间t=T时使得积分器复位,
所以需要设置积分模块续设置在时钟下降沿时复位。
并需要设置参数为使用外部信号,此时,时钟设置为和该支路码元时间相同,
即是发送信号码元时间两倍输入。然后积分后信号经过采样并保持模块,
即sampleand hold 模块,此时,设置这个模块为触发上升沿,
一样使用时钟设置为和该支路码元时间相同,
即 | 是 | 发 | 送 | 信 | 号 | 码 | 元 | 时 | 间 | 两 | 倍 | 输 | 入 | 。 |
此时各路传输信号对应地会使一个单位时延产生。然后使用autothreshold
模块,该模块依据输入信号数据自动设置出阀值,由此,
可对输入信号做出判定,再输出对应二进制比特序列,并可输出阀值。
最 终 使 用 N-sample switch模块来 实 现 并 串 转 换 ,
因为我们最终需要是最原始信号,将两路信号合二为一,
在第一路信号发出一个样本时间后,样本时间设置为发送信号码元时间,
开关会自动转换到第二路信号,此时换做第二路信号输入,
图3.4.1积分器设置
图3.4.2采样和保持设置
图3.4.3解调模块
3.4.2 传输信道
此 | 次 | 试 | 验 | 使 | 用 | 是 | 高 | 斯 | 信 | 道 | 和 | 理 | 想 | 信 | 道 | 。 |
试验所需高斯噪声我们能够由高斯信道模块来提供,用到了Zero-OrderHold,
和子 模 块, 即 SubSystem,
经过子模块建立新封装(Mask)功效模块其中参数设置中信噪比为Es/No,
Es/No为 信 号 能 量 比 噪 声 功 率 。
AWGN信道模块能够将加性高斯白噪声加到一个实数或复数输入信号。现在输入信号是实数,这个模块增加了实数高斯噪声,产生一个实数输出信号。此块继承它输入信号采样时间。
模 | 块 | 使 | 用 | 信 | 号 | 处 | 理 | 模 | 块 | 随 | 机 | 产 | 生 | 噪 | 声 | 。 |
初始种子能够是一个标量或矢量长度相匹配输入信号通道数。种子具体资料首次,查看随机源模块库文件参考页面中设置信号处理。该端口数据类型全部继承自该驱动器信号块。注意权力全部值假设一个1欧姆标称阻抗。
3.4.3 仿真结果
图3.4.4信号源和转变后双极性信号
图3.4.5经过高斯信道后调制信号
图3.4.7上支路判决后信号
图3.4.8下支路积分和采样后信号
图3.4.10源信号流和经过调制解调后信号流对比
3.5 仿真结果分析
从上述图中能够看出,因为整个系统模块有引进噪声,和电路使用了积分、采样保持模块,还原后信号幅度差异较大,经过判决门限后,
得到原来二进制信号。我们从仿真结果图中看出,信道噪声功率谱密度越大,
信号信噪比越小,误码率越高,这也符合实际情况。仿真多种条件全部是理想化,
除了噪声之外不会发生任何错误,和实际情况相比,在相同信噪比之下,
比特错误率理应要小多,不过仿真所得结果误码率偏大。
第四章 QPSK通信系统性能分析
(1)从仿真结果中看出,信号信噪比越小,错误率越高,
跟实际情况比较符合。
(2)因为仿真中多种条件全部是理想化,包含数据在传输过程中,
除了噪声影响以外不会发生任何错误,所以相对实际情况来说,
在相同信 噪 比 下 , 比 特 错 误 率 要 小 多 ,
总结: 不过仿真所得结果和事实规律并不违反。
在搭建QPSK调制解调系统中首先碰到问题就是串并转换问题,
simulink中没有能够直接处理这个问题模块,经过网上搜索和查阅相关资料,
最终选择buffer模块,完成可串并转换功效,不过带人了两个单位延迟。
以后便是示波器显示问题,此次产生信号采样速率设置为1秒,载波频率1HZ,
对仿真过程中波形分析带来很多方便。
(3)在完成QPSK系统simulink仿真中,因为方便起见,载波大小设为1HZ,
和实际调制解调中所用载波相差甚远,但若将载波设置变大,
会对试验仿真和分析带来极大不便。
参考文件
[1]苗长云,沈保锁.现代通信原理及应用(第2版)[M].北京:电子工业出版社,.
[2]樊昌信,曹丽娜.通信原理(第6版)[M].国防工业出版社,.1.
[3]刘国华,李二喜.基于FPGAQPSK调制器设计和实现[J].电子设计工程,(9).
[4]高博,杨燕,胡建军.基于MatlabQPSK系统设计仿真[J].科学技术和工程,(5)
[5]
谢斌,蔡虔,钟文涛.基于MATLAB/SIMULINKQPSK通信系统仿真[J].科技广场,(1).
附 录
(1)QPSK调制M文件程序
clearall
closeall
% x1是类似[11 -1 -1 -1 -1 1 1]分布,作用是控制相位180°反转。 %因为仿真中载波频率是f=1Hz,所以1s间隔内有一个完整周期正弦波。
t=[-1:0.01:7-0.01]; % t共800个数据,-1~7s
t1=[0:0.01:8-0.01]; %t1也是800个数据点 , 0 ~8s
tt=length(t); % tt=800 |
|
x1=ones(1,800);
for i=1:tt
if (t(i)>=-1 &t(i)<=1) | (t(i)>=5& t(i)<=7);
x1(i)=1;
else x1(i)=-1;
end
end
t2 = 0:0.01:7-0.01; %t2是700个数据点,是QPSK_rc绘图下标
t3= -1:0.01:7.1-0.01; %t3有810个数据点,是i_rc时间变量
t4= 0:0.01:8.1-0.01; %t4有810个数据点,是q_rc时间变量
tt1=length(t1);
x2=ones(1,800); %x2是类似于[11 -1 -1 1 1 1 1]分布,作用是控制相位180°反转
fori=1:tt1 if (t1(i)>=0 & t1(i)<=2) | (t1(i)>=4&t1(i)<=8);
end
end
f=0:0.1:1;
xrc=0.5+0.5*cos(pi*f); %xrc是一个低通特征传输函数
y1=conv(x1,xrc)/5.5; %y1和x1 实际上没什么区分,仅仅是上升沿、下降沿有点过渡带
y2=conv(x2,xrc)/5.5; % y2和x2 实际上没什么区分,仅仅是上升沿、下降沿有点过渡带
n0=randn(size(t2));
f1=1;
i=x1.*cos(2*pi*f1*t); % x1就是I data q=x2.*sin(2*pi*f1*t1); %x2就是Q data
I=i(101:800);
Q=q(1:700);
QPSK=sqrt(1/2).*I+sqrt(1/2).*Q;
QPSK_n=(sqrt(1/2).*I+sqrt(1/2).*Q)+n0;
n1=randn(size(t2));
i_rc=y1.*cos(2*pi*f1*t3); % y1就是Idata, i_rc可能是贴近实际波形,i则是理想波形
q_rc=y2.*sin(2*pi*f1*t4);%y2就是Q data,q_rc可能是贴近实际波形,q则是理想波形
I_rc=i_rc(101:800);
Q_rc=q_rc(1:700);
QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);
QPSK_rc_n1=QPSK_rc+n1;
figure(1)
subplot(3,1,1);plot(t3,i_rc);axis([-1 8 -1 1]);ylabel('a序列');
subplot(3,1,2);plot(t4,q_rc);axis([-1 8 -1 1]);ylabel('b序列');subplot(3,1,3);plot(t2,QPSK_rc);axis([-1 8 -1 1]);ylabel('合成序列');
clear all
close all
bit_in = randint(1e3, 1, [0 1]);
bit_I = bit_in(1:2:1e3); %bit_I为”奇数序列”,奇数序列是同相分量,以cos为载波
bit_Q = bit_in(2:2:1e3); %bit_Q是bit_in全部偶数下标组成”偶数序列”,以sin为载波
data_I= -2*bit_I+1; % 将bit_I中1变成-1,0变成1; 注意data_I是500点
data_Q= -2*bit_Q+1; %将bit_Q中1变成-1,0变成1
data_I1=repmat(data_I',20,1);%将500行列向量data_I共轭转置data_I’复制为20*500矩阵,
20行数据是相同。
data_Q1=repmat(data_Q',20,1);
for i=1:1e4 %data_I2是将data_I1这个20*500矩阵拉长为1*10000行向量
data_I2(i)=data_I1(i);
data_Q2(i)=data_Q1(i);
end;
f=0:0.1:1;
xrc=0.5+0.5*cos(pi*f);
data_I2_rc=conv(data_I2,xrc)/5.5; % data_I2_rc就是Idata
data_Q2_rc=conv(data_Q2,xrc)/5.5; % data_Q2_rc就是Qdata
f1=1;
t1=0:0.1:1e3+0.9; % 10010个数据,长度和data_I2_rc和data_Q2_rc相同
n0=rand(size(t1)); %n0是1*10010均匀分布噪声
I_rc=data_I2_rc.*cos(2*pi*f1*t1);
Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);
QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n0=QPSK_rc+n0;
I_recover=conv(I_demo,xrc); % 低通滤波
Q_recover=conv(Q_demo,xrc);
I=I_recover(11:10010);
Q=Q_recover(11:10010);
t2=0:0.05:1e3-0.05; %t2有0个点
t3=0:0.1:1e3-0.1; %t3有10000个点
data_recover=[]; % 抽样判决
fori=1:20:10000 %data_recover是待判决0点
data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;
bit_recover=[];
for i=1:20:0
if sum(data_recover(i:i+19))>0 %20点为同一个值,20点数据叠加后和阈值0比较 data_recover_a(i:i+19)=1; %data_recover_a是并/串转换后0点
bit_recover=[bit_recover 1]; %bit_recover是1000点数据
else
data_recover_a(i:i+19)=-1;
bit_recover=[bit_recover -1];
end
end
error=0;
dd= -2*bit_in+1; % 将bit_in中1变成-1,0变成1
ddd=[dd']; %ddd是1表示0,-1表示1原始序列,1000个点
ddd1=repmat(ddd,20,1);%ddd1是20*1000矩阵fori=1:2e4
end for i=1:1e3
if bit_recover(i)~=ddd(i)
error=error+1;
end
end
p=error/1000;
figure(1)
subplot(4,1,1);plot(t2,ddd2);axis([0 100 -2 2]);title('原序列');
subplot(4,1,2);plot(t1,I_demo);axis([0 100 -2 2]);title('I 支路解调'); subplot(4,1,3);plot(t1,Q_demo);axis([0 100 -2 2]);title('Q 支路解调');
subplot(4,1,4);plot(t2,data_recover_a);axis([0 100 -2 2]);title('解调后序列');