基于MATLAB的OQPSK调制解调实现.docx
- 文档编号:27736597
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:21
- 大小:253.64KB
基于MATLAB的OQPSK调制解调实现.docx
《基于MATLAB的OQPSK调制解调实现.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的OQPSK调制解调实现.docx(21页珍藏版)》请在冰豆网上搜索。
基于MATLAB的OQPSK调制解调实现
基于MATLAB的OQPSK调制解调实现
学生姓名:
周翌指导老师:
吴志敏
摘要本课程设计的目标在于深切理解OQPSK调制与解调的基本原理,学会使用MATALB软件中的M文件来实现OQPSK的调制与解调以及分析加入不同噪声时对信号的影响程度。
首先产生一个数字基带信号,接下来调用MATLAB中的相应函数对这个基带信号进行调制,然后分析调制后的波形:
,记录结果后对调制后的信号进行解调,观察解调结果并做好记录,最后在信号中加入噪声并观察其时频图的变化,分析信噪比的噪声对调制结果的影响。
本课程设计的实验开发/运行平台为windowsXP/windows7,程序设计使用MATLAB语言。
通过调试运行,基本完成设计目标,达到调制与解调的目的。
关键词:
MATLAB;M文件;OQPSK;调制与解调;噪声
1引言
数字调制与解调技术在数字通信中占有非常重要的地位,数字通信技术与MATLAB的结合是现代通信系统发展的一个必然趋势。
在数字信号通信过程中,噪声的影响往往比较大,同时我们都希望有较高的频带利用率和功率利用率,而OQPSK也是一种恒包络调制技术,其频谱特性好,既保留着2PSK的高抗噪声性能、高频带利用率和高功率利用率,又有效地减弱了2PSK的“反相工作”缺陷,在通信研究中有着非常重要的意义,特别是在卫星通信和移动通信的领域有着广泛的应用。
MATLAB作为当前国际控制界最流行的面向工程与科学计算的高级语言,在控制系统的分析、仿真与设计方面得到了非常广泛的应用,随着其信号处理专业函数和专业工具箱的成熟,越来越受到通信领域人士的欢迎,其在通信领域的应用也将更加广泛。
1.1课程设计目的
熟悉OQPSK的基本原理,掌握MATLAB中M文件的使用及相关函数的调用方法,在此基础上通过编程实现OQPSK的调制与解调,并通过加入的噪声来判断所设计的系统性能。
这次课程设计不仅让我对OQPSK有了更加深入的了解,而且学会了如何利用MATLAB中的M文件来实现通信系统方面的应用,最重要的是,自己能够独立完成一个小项目了,有了这方面的经验,我在以后的学习中就会有更充足的信心和动力。
1.2课程设计要求
熟悉MATLAB中M文件的使用方法,并在深切理解OQPSK调制解调原理的基础上,编写出OQPSK调制解调程序。
绘制出OQPSK信号解调前后在时域和频域中的波形,并观察解调前后频谱有何变化以加深对OQPSK信号解调原理的理解。
分别对信号叠加不同噪声,并进行解调,绘制出解调前后信号的时频波形,分析不同噪声对信号传输造成的影响大小。
1.3课程设计步骤
先产生随机信号,然后对信号进行调制和解调,在调制和解调过程中加入高斯白噪声,观察现象。
1、产生四进制数字作为数字基带信号,对其进行调制;
2、将函数调制信号改为相应的时域波形调制信号;
3、在函数调制信号中加入高斯白噪声,生成加入噪声后的时域波形调制信号;
4、分别生成没加或加了噪声的调制信号波形图和频谱图;
5、分别对没加或加了噪声的调制信号进行解调;
6、计算误码率。
2OQPSK调制解调原理
2.1OQPSK调制原理
OQPSK,即OffsetQuadraturePhaseShiftKeying的缩写,中文意思为偏置正交相移键控,是QPSK(正交相移键控,又有4PSK之称)的改进,有关QPSK的资料请参考《通信原理(第六版)》[1],这里就不多赘述了。
OQPSK与QPSK相同的是相位关系,即:
把输入信号分为两路,然后正交调制。
所不同的是,OQPSK把同相和正交两支路的码流在时间上错开了半个码元周期。
因为两支路码元上偏移了半个周期,每次只能有一路可能发生极性翻转。
所以,OQPSK信号能跳变的相位只能是0o、+90o、-90o,不会发生180o的跳变,OQPSK与QPSK相比,信号的包络波动幅度有限,经过限幅放大后的频带范围也要小,所以性能也更加优良。
其星座映射图如下(图2-1)所示:
图2-1OQPSK星座映射图
OQPSK的产生原理方框图如下(图2-2)所示:
输入的数据信号是二进制不归零双极性码元,它被“串/并变换”电路变成两路码元a和b后,其每个码元的持续时间是输入码元的2倍,且b路码元在产生后马上增加了一个Ts/2(半个周期)的延时电路。
由a路码元和经延时后的b路码元相加的信号即为OQPSK调制信号。
图2-2OQPSK的产生原理框图
2.2OQPSK解调原理
OQPSK信号的解调原理图如下(图2-3)所示,OQPSK信号可以看作是两个正交信号2PSK信号a和b,且b路信号在时间上延迟了半个周期Ts/2后再与a路信号的叠加,所以用两路正交的相干载波和一个Ts/2延时器就可以分离这两路延迟正交的2PSK信号,且b路信号应该先延时Ts/2再进行抽样判决。
这样产生的两路并行信号a和b,经过“并/串变换”后,成为串行数据输出,即解调信号。
图2-3OQPSK的解调原理框图
3仿真实现过程
3.1OQPSK调制信号的产生
首先利用函数x=randint(a,1,[03])产生一串四进制数字基带信号,其中a,1表示生成一个含a个元素的行向量,在这里可以直接表示为生成a个数字基带信号码元。
[03]表示产生的随机数的范围是0~3。
基带信号产生后可以利用fft(x,1024)对其进行傅里叶变换,得到基带信号的频谱图。
再利用函数oqpskmod(x)对基带信号进行调制,由于MATLAB中的oqpskmod(x)函数功能有限,此时的调制信号还不能用波形图表示出来,需要自己编写部分代码(见附录),所以使用调制信号的星座图代替调制信号图,使用函数scatter(y)可生成星座图。
代码编写完成后即可得到相应的OQPSK调制波形图,同样使用fft(n,1024)函数来产生波形信号的频谱图,其中n为调制信号,即在调制信号中取1024个点进行傅里叶变换。
调制波形图出来以后进行加噪声处理,此处利用的是awgn(n,snr)函数,snr为信噪比的值,先设定snr为1。
随后产生加入噪声后的调制信号频谱图。
下面先介绍几个关键变量及重要函数,然后将展示出调制过程中出现的比较重要的图形。
在这里为了更清晰地看出调制后信号的波形图、频谱图,及方便解调时对比加入噪声后出现的错码位置,只选取8个基带信号。
a=8;%基带信号码元个数
x=randint(a,1,[03]);%随机产生a个四进制数
y=oqpskmod(x);%进行oqpsk调制
scatterplot(y)%解调信号的星座图
fc=100;%载波频率
fs=1600;%抽样频率
b=0;%设置初始相位为0
s=0;%调制信号的波形图纵坐标初始化
n=0;%调制信号波形图二维初始化
基带信号(如图3-1):
图3-1基带信号
基带信号的频谱图如下(图3-2):
r=fft(x,1024);%取1024个点对基带信号进行傅里叶变换
fr=(0:
length(r)-1)*fs/length(r)-fs/2;%横坐标为频域
plot(fr,abs(r));%OQPSK基带信号频谱图
图3-2基带信号频谱图
函数调制信号的星座图如下(图3-3)所示:
scatterplot(y)%产生调制信号的星座图
图3-3调制信号星座图
函数调制信号的星座图会随输入基带信号初值的变化而改变,即不同的第一个信号码元对应不同的星座图。
因为OQPSK信号是由两路原本相互正交、但其中一路比另一路早半个周期的信号组成,这就使得第一路信号刚进去时和第二路信号最后进去时系统中都只有一路信号,此时会出现纯实数或纯虚数,即会出现上面调制信号星座图中非角落的点。
调制信号波形图如下(图3-4)所示:
m=(2*pi*fc*k)/fs+b;%合相位
s=sin(m);%生成波形图
n=[nsin(m)];%将一维转化为二维
g=1:
length(n);%g为调制波形图的横坐标
plot(g,n)%调制信号波形图
图3-4调制信号波形图
加了噪声之后的调制信号波形图如下(图3-5)所示:
snr=0.01;%信噪比
noi=n+awgn(n,snr);%加入噪声后的调制信号
图3-5加噪声后的调制信号
调制信号频谱图如下(图3-6)所示:
s1=fft(n,1024);%去1024个点对调制信号进行傅里叶变化
fs1=(0:
length(s1)-1)*fs/length(s1)-fs/2;%横坐标为频域
plot(fs1,abs(s1));%OQPSK调制信号频谱图
图3-6调制信号频谱图
调制信号加噪声后的频谱图如下(图3-7)所示:
s2=fft(noi,1024);%取1024个点对加噪声后的调制信号进行傅里叶变换
fs2=(0:
length(s2)-1)*fs/length(s2)-fs/2;%横坐标为频域
plot(fs2,abs(s2))%加入噪声后OQPSK调制信号的频谱图
图3-7调制信号加入噪声后的频谱图
3.2OQPSK解调实现
此步建立在已经进行完OQPSK调制的基础之上。
在OQPSK的解调过程中,我们使用的是oqpskdemod(y)这个函数,与函数oqpskmod(x)一样,这个函数的功能也非常有限,仅是oqpskmod(x)的逆过程,即oqpskdemod(y)的输入信号必须是oqpskmod(x)的输出信号,否则系统就会报错。
在没有加噪声之前,仅依靠简单的oqpskdemod(y)函数就可以将调制后的信号解调出来。
k=oqpskdemod(y);%解调信号
解调信号如下(图3-8)所示:
图3-8解调信号
解调信号的频谱图如下(图3-9)所示:
jtpp=fft(k,1024);%解调信号的傅里叶变换
fj=(0:
length(jtpp)-1)*fs/length(jtpp)-fs/2;%横坐标为频域
plot(fj,abs(jtpp))%解调信号的频谱图
图3-9解调信号的频谱图
与上一小节(3.1)中的调制信号进行对比,可以看出时域已经由不规则正弦信号还原成数字信号;且调制信号的频域变化非常快,两个最高峰都超过了50,这样有利于信号在信道中进行传输,而解调信号的频域变化比较缓慢,最高峰也都低于15,已经恢复到基带信号的频域特征了。
与上一小节中的基带信号进行对比,可以看出,解调后信号的值和频谱图与原基带信号完全一致,即OQPSK信号经调制后再解调,前后没有发生任何变化,实现了调制与解调的功能。
把调制信号当做在信道中传输的信号,此时的信道可以看成绝对理想信道,即信号在信道中的传输过程中没有受到任何干扰。
然而实际通信信道中,噪声是不可避免的一个影响信道性能的重要因素,在下一小节中将讨论加入噪声后的解调情况。
3.3叠加噪声的OQPSK解调
噪声在通信系统中是一个不可忽视的元素,即使没有传输信号,通信系统中也有噪声,噪声永远存在于通信系统中,因此叠加了噪声的模拟OQPSK调制与解调结果会更加具有真实性、更有实用意义。
依然在前面的基础上进行下面的步骤,将没加噪声的解调结果和加入信噪比为0.01的噪声后的解调结果作一个对比。
加入噪声后的解调信号如下(图3-10)所示:
xx=awgn(y,snr);%对调制信号加入噪声
jjt=oqpskdemod(xx);%对加入噪声的调制信号进行解调
图3-10加入噪声后的解调信号
加人噪声后的解调频谱图如下(图3-11)所示:
图3-11加人噪声后的解调频谱图
此处使用了函数[num,ratio]=symerr(x,jjt)来计算错码数和误码率,其中num为错码个数,ratio为误码率,x为原基带信号,jjt为加了噪声后的解调信号。
程序运行后得到num=2,ratio=0.25。
因为基带信号的码元个数在开始设定为8个(a=8),而错码为2个,2/8=0.25,即为误码率的计算。
对比上面3.2节中的解调信号,也可以很明显地看出,加入噪声后,解调结果中刚好有2个码元不同(由上一小节中没加噪声的解调结果已经知道,一般情况下,可以认为没加噪声时的解调信号和基带信号是完全一样的,所以在这里,加了噪声后的解调结果与没加噪声时的解调结果的不同之处即可认为是错码处)。
对比3.2节中的解调信号频谱图,可见加了噪声之后解调频谱图的峰值个数都变少了两个,所以噪声对OQPSK的解调在时域和频域都有一定的影响。
此时加入的噪声信噪比非常小,只有0.01,系统的误码率较高,不能解调出正确的原始信号。
由于误码率是一个统计量,同时希望能比较清晰地看出加噪声前后解调信号的不同之处,所以下面将数字基带信号的码元个数设为100,信噪比设定为0.01,对比加噪声前后的解调信号图,运行结果如下:
没加噪声解调信号如下(图3-12)所示:
图3-12没加噪声解调信号
加了噪声的解调信号(图16)所示:
图3-13加了噪声的解调信号
此时得num=14,ratio=0.14,即错码数为14,误码率为0.14,而对比上面两幅图也可以看出明显的不同。
现在保持其他量不变,将信噪比设定为1,对比加噪声前后的解调信号图,运行结果如下:
没加噪声解调信号如下(图3-14)所示:
图3-14没加噪声解调信号
加了噪声的解调信号(图3-15)所示:
图3-15加了噪声的解调信号
此时得num=8,ratio=0.08,即错码数为8,误码率为0.08,可以看出,此时比信噪比为0.01时的误码率要小。
现在在上面的基础上将信噪比改为5,对比加噪声前后的解调信号图,运行结果如下:
没加噪声解调信号如下(图3-16)所示:
图3-16没加噪声解调信号
加了噪声的解调信号(图3-17)所示:
图3-17加了噪声的解调信号
此时得num=3,ratio=0.03,即错码数为3,误码率为0.03,可以看出,比信噪比为1时的误码率要小。
由上面三次对比可以得到一个结论:
当信噪比增大时,错码数目和误码率会明显减少。
可见添加噪声的信噪比能够体现出噪声对信号传输的影响程度,并且信噪比越小,影响程度越大。
下面设定a=10000,信噪比从0.01到9.01每次增加1,运行后可得错码数、误码率的结果对应为:
snr=[0.01:
9.01];%信噪比
ratio=[0.15180.11480.07650.04200.02440.01200.0040.0020.00050.0001];%误码率
由上面的结果绘制出误码率与信噪比的关系图(横坐标为信噪比,纵坐标为误码率)如下(图3-18)所示:
图3-18误码率与信噪比的关系图
可以看出,当信噪比小于1时,误码率随信噪比的变化很平缓,即使信噪比只有1,误码率也低于0.12,在信噪比大于1小于6时,误码率随信噪比的增大减少得比较快,当信噪比大于6时,误码率已经低于百分之一。
从前面的测试以及后面误码率与信噪比的关系图可以看出,当信噪比足够大时,使用OQPSK调制的整体误码率较低,当信噪比大于等于10时,误码率约为0,在基带信号数目较多的情况下,错码个数可以忽略。
综上所述,OQPSK的调制与解调在通信系统中是一种抗干扰性比较理想的实现方法。
4遇到的问题及解决办法
在刚看到任务书时我真的懵了,什么是OQPSK,似乎见都没见过,于是马上上网搜,结果实在让我失望,其他各种调制都能找到一大堆,唯独OQPSK却是寥寥无几,而且就在这些极少的资料中也没有多少有用的信息。
我索性打开教材翻看,原来教材上是有这个内容,但对于它的介绍却只有小小的一个段落,而且只是在介绍完QPSK后稍微提了一下,心里顿时更紧张了。
只好跑到图书馆查找通信类的书,希望能找到多一些有用的信息,可是结果还是无功而返。
最后没办法了,我就把教材上的内容反复地看,反复地理解,所谓“书读百遍,其义自见”,最终把OQPSK的调制原理弄明白了。
遇到的第二个问题就是MATLAB中的oqpskmod(x)函数功能非常有限,不仅不能产生调制波形图,甚至结果都不能直接用图表示出来。
请教了老师后,我先把调制后的星座图找出来,然后根据星座图上的点所属的象限去确定一个周期的波形图的起始位置,最终产生了调制波形图。
遇到的第三个问题是oqpskdemod(y)函数的输入问题,开始我一直都用自己设定的那个可以产生波形图的变量作为oqpskdemod(y)的输入,因为我认为解调的输入应该是这种波形图才对,可是运行程序时却一直报错。
问了老师后才知道,oqpskdemod(y)函数与oqpskmod(x)函数是一对,所以oqpskdemod(y)的输入必须是oqpskmod(x)的输出,修改输入后程序正常运行并得到了解调后的信号。
第四个问题是求解调信号频谱时函数fft(x,1024)的输入问题,鉴于第三个问题,我把使用函数oqpskmod(x)后所得的结果y直接作为fft(x,1024)的输入,即用的是fft(y,1024),发现所得的频谱图根本就不对,试了多次后均是一样的结果,我决定把输入改为产生波形图的那个变量,试后发现结果对了。
最后一个问题是如何计算错码个数和误码率,开始我自己编了一个程序段,发现结果要么是0,要么是1,我知道程序肯定是错了,但自己又没有检查出来。
后来老师告诉我,有一个直接计算错码个数和误码率的函数,于是问题迎刃而解。
5结束语
这次课程设计让我感触多多,首先是自己所学知识的缺陷问题,感觉现在的学习很大程度上都是应付考试,老师说可能会考到的地方就会认真去看一下,否则可能翻都不会翻,非常被动,这就造成了对教材不熟悉、知识点缺失严重的现象,以致遇到教材上有的内容都是一副一筹莫展的样子。
对此我深感惭愧,在以后的学习中一定要更加自主、自觉,以学到知识为目的,至少能做到绝对熟悉教材。
对于这次课程设计,从产生基带信号到调制结果出来,再到将调制结果转换为波形信号,查看波形图及其频谱图,对调制信号进行解调,调制信号添加噪声,对比添加噪声前的波形图及频谱图,查看没加噪声前解调信号的阶梯图及频谱图,对比加入噪声后解调信号的阶梯图及频谱图,到最后对错码个数及误码率的计算,感觉每一步走过来都不是那么容易,所以,也说明了每一步都有不少收获。
这次课程设计,让我很好地将教材知识消化后付诸于实际操作,增强了我的动手能力,最重要的是无形中增加了我在学习中的自主性及明白了适度的寻求帮助会让事情进展得更好更快。
在整个过程中,我真心要感谢我的指导老师吴老师,感谢她一步步无怨言的指导,感谢她的耐心,让我从最初对这个设计题目的惧怕转化为后来的自信;同时我要感谢一个和我的设计内容比较接近的同学,多亏了她,使得我的设计过程走得更加顺畅和准确!
参考文献
[1]樊昌信,曹丽娜,通信原理.北京:
国防工业出版社,2006
[2]黄文梅,熊桂林,杨勇.信号分析与处理—MATLAB语言及应用.长沙:
国防科技大学出版社,2000
[3]唐向宏,岳恒立,郑雪峰.MATLAB及在电子信息类课程中的应用.北京:
电子工业出版社,2006,8
[4]邓华.MATLAB通信仿真及应用实例详解.人民邮电出版社,2003
附录1:
OQPSK调制与解调程序清单
%程序1名称:
oqpsk.m
%程序1功能:
产生四进制数字基带信号,实现OQPSK调制、产生调制后波形图及频谱图、对调制信号添加不同信噪比的噪声、实现OQPSK解调、查看错码个数和误码率。
%程序1作者:
周翌
%最后修改时间:
2014-1-10
%=====================
程序1代码:
a=100;%基带信号码元个数
x=randint(a,1,[03]);%随机产生a个四进制数
figure
(1)
stairs(x)%基带信号
y=oqpskmod(x);%进行oqpsk调制
scatterplot(y)%解调信号的星座图
fc=100;%载波频率
fs=1600;%抽样频率
b=0;%设置初始相位为0
s=0;%调制信号的波形图纵坐标初始化
n=0;%调制信号波形图二维初始化
snr=10.01;%信噪比
fori=1:
a%判断星座图上值的象限位置,以确定相位
ifreal(y(i))>0&imag(y(i))>0
b=(pi)/4;%第一象限,取相位为(pi)/4
end;
ifreal(y(i))<0&imag(y(i))>0
b=(3*pi)/4;%第二象限,取相位为(3*pi)/4
end;
ifreal(y(i))<0&imag(y(i))<0
b=(5*pi)/4;%第三象限,取相位为(5*pi)/4
end;
ifreal(y(i))>0&imag(y(i))<0
b=(7*pi)/4;%第四象限,取相位为(7*pi)/4
end;
ifreal(y(i))>0&imag(y(i))==0
b=0;%在实轴正轴上,取相位为0
end;
ifreal(y(i))<0&imag(y(i))==0
b=pi;%在实轴负轴上,取相位为pi
end;
ifreal(y(i))==0&imag(y(i))>0
b=pi/2;%在虚轴正轴上,取相位为pi/2
end;
ifreal(y(i))==0&imag(y(i))<0
b=(3*pi)/2;%在虚轴负轴上,取相位为(3*pi)/2
end;
fork=0:
15%取16个点画出波形图
m=(2*pi*fc*k)/fs+b;%合相位
s=sin(m);%生成波形图
n=[nsin(m)];%将一维转换为二维
end;
end;
g=1:
length(n);%调制信号横坐标
figure(3)
plot(g,n)%调制信号波形图
noi=n+awgn(n,snr);%加入高斯噪声
figure(4)
plot(noi);%加入噪声后的调制信号
k=oqpskdemod(y);%解调信号
figure(5)
stairs(k)%解调信号
r=fft(x,1024);%对基带信号进行傅里叶变换
fr=(0:
length(r)-1)*fs/length(r)-fs/2;%横坐标为频域
figure(6)
plot(fr,abs(r));%OQPSK基带信号频谱图
xlabel('Frequency(Hz)')
s1=fft(n,1024);%调制信号频谱图
fs1=(0:
length(s1)-1)*fs/length(s1)-fs/2;%横坐标为频域
figure(7)
plot(fs1,abs(s1));%OQPSK调制信号频谱图
xlabel('Frequency(Hz)')
s2=fft(noi,1024);%加入噪声后OQPSK调制后的频谱图
fs2=(0:
length(s2)-1)*fs/length(s2)-fs/2;%横坐标为频域
figure(8)
plot(fs2,abs(s2))%加入噪声后OQPSK调制后的频谱图
xlabel('Frequency(Hz)')
jtpp=fft(k,1024);%解调信号的傅里叶变换
fj=(0:
length(jtpp)-1)*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB OQPSK 调制 解调 实现