学习笔记-DQPSK系统的调制与解调

时间:2024-03-13 15:39:59

DQPSK,就是四进制相移键控技术,利用前后相邻两个码元的相位差传递数据,DQPSK信号编码方式通常有两种:A方式和B方式,A方式相位差取值分别为:0°、90°、180°和270°,B方式取值45°、135°、225°和315°,这里我采用的是A方式编码规则。

这篇文章是利用MATLAB工具对DQPSK系统的调制与解调系统进行仿真,系统框图如下:

学习笔记-DQPSK系统的调制与解调

(1)发送数据:从TXT文件中导入数据,本次以32位数据为例进行仿真;

(2)串并转换:把01信息码元分成I、Q两路,同时每路的输入码元的持续时间是输入码元的2倍(在MATLAB中通过连续输入两个相同码元实现此功能),同时将01码元转换成二进制双极性脉冲,其对应关系是:0->+1,1->-1,因为在电路中用的是不归零二进制双极性矩形脉冲。另外注意,这里将0 1码元转换为双极性码也可以是以下的对应关系:1不变,0变成-1,但是接收端的并串转换规则要与这里相对应;

(3)差分编码:将绝对码转换为相对码,利用QDPSK的码变换关系,输入和输出一共有16种可能关系,利用查表的方式,编写代码;

(4)成型滤波:在这之前先要上采样,就是对经过编码的数据码元进行整倍插值,这里是4倍插值(每相邻码元之间插入3个零),调用MATLAB里面的unsample函数;接着进行成型滤波,是为了消除码间串扰,降低误码率,以致对接收端的抽样判决造成干扰,基本原理可以这样解释:时域上,码元的冲击响应h(t)的抽样值除了在t=0时不为零,其余所有的抽样点上均为零;频域上,系统的传输特性H(w)可以等效成一个理想低通滤波器,满足这个条件就可以实现无码间串扰;这里通过利用MATLAB的fdesign.pulseshaping函数设计成型滤波器,设计出32阶、,滚降系数为0.35,横跨八个码元的根升余弦滤波器,带外衰减和旁瓣高度均小于-30dB,其幅频特性和冲击响应分别如图所示:

学习笔记-DQPSK系统的调制与解调

学习笔记-DQPSK系统的调制与解调

(5)匹配滤波:和成型滤波类似,这里两者一样,对应起来,先匹配滤波,然后进行下采样,就是每4个点进行抽样,这里调用MATLAB里面的downsample函数;

(6)同步模块:最为关键的一步,在第(3)步差分编码之后的数据码元之前需要加上巴克码,这里使用的是7位马克码{1 1 1 -1 -1 1 1},组成马克码+数据(这里只发送1帧数据)的形式发送出去;在接收端,利用马克码的特性,通过移位计算自相关函数,找出峰值所对应的位置即为同步位置,保存同步位置并接收数据。

(7)判决:与前面编码时的对应关系(0->+1,1->-1)保持一致,如果判决抽样值大于阈值判为0,否则判为1;

(8)解差分:与差分编码对应,通过QDPSK的逆码变换关系,即可实现编写,注意,这里没必要以查表的方式把所有的对应方式写出来,利用码元关系对应的原理公式就可以更为容易地实现;

(9)并串转换:与串并转换对应,将I、Q两路合并为一路,输出接收的收据;

经过仿真,验证发送与接收的数据一致。

总结: 

(1)系统框图中的纠相偏还没有实现

(2)本次只是发送1帧数据,所以就插入1段7位巴克码,这相对比较简单,考虑到一次发送多帧数据,那就需要循环插入巴克码,在接收端需要找到多个同步位置并储存下来,然后接收每一帧数据。在这里,我做的是:

发送端:输入多帧数据,为了简单起见,没有经过编码,直接与多段巴克码循环交叉(巴克码+数据+巴克码+数据+......),然后经过成型滤波;

接收端:经过匹配滤波,检测保存多个同步位置,同时进行同步多帧数据接收;

以此来简单验证同步收发数据,最终实现。

 (3)模块化,由简到繁

       将一个系统进行分成很多小的模块很关键,比如:编码模块、成型滤波模块等等,对每一个模块进行处理;同时值得注意的是:先对简单容易的小模块进行编写仿真和测试,由简单到复杂,没必要完全严格按照系统执行顺序编写,对系统进行模块化,最后只需要把各模块进行串联就行,我刚开始因为不理解成型滤波模块,很长时间一直卡在这个地方,最后尝试着先把后面简单的解码模块完成,重新理解这个,有很好的效果。