java模拟2DPSK信号的相干解调

    这几天在实验室做通信原理的实验,其中有一道题是模拟2DPSK信号的相干解调过程,老师推荐使用matlab实现,因为有现成的相关函数,调用就完事了,私以为没有挑战性,于是我选用了java实现,效果还不错。

基本实现了各层之间的分离

 

java模拟2DPSK信号的相干解调

工程结构

model包:封装了一些基础类,如码元类CodeElement、码元类型类CodeType

handler包:对数据的逻辑处理,主要包括码元转波形类Code2Wave、波形转码元类Wave2Code

util包:包含数据可视化类WaveDrawer

runner包:包含程序入口类Main

 


实验原理

如图

 

java模拟2DPSK信号的相干解调

调制框图

 


实验过程及实现效果

1.用户输入产生2DPSK信号

 

java模拟2DPSK信号的相干解调

示例输入

输入一些二进制数字序列,比如我上面输入的“1101100111”

如果输入除0/1以外的其他其他数字,为了方便,在程序中做了归一化处理,正数被视为信号“1”

非正数被视为信号“0”,输入的序列经处理绘制出相应的波形图

 

java模拟2DPSK信号的相干解调

解释一下a点处波形,上图共有9码元(第10个没有画全,不影响讨论)个,全部用正弦系波形表示,

一种是初相位为0的,表示相对码0,另外一种就是初相位为pi的,表示相对码1

(上面输入的二进制序列为绝对码)

在大多数时候,默认参考码为0

这个参考码0和输入序列的第一个数字1进行异或,得到数字1,这个数字1就是相对码,在图上相位为pi

然后这个相对码1和第二个绝对码1进行异或,得到数字0,这个数字0,这就是第二个相对码,在图上相位为0

然后第二个相对码0和第三个绝对码0异或得到第三个相对码1,在图中相位为pi

依次类推...

这就是2DPSK信号

2.2DPSK信号解调(b、c、d点)

 

java模拟2DPSK信号的相干解调

最后得到解调后的信号

 

java模拟2DPSK信号的相干解调

 


实验总结及反思

遇到的实际困难大致如下

1.不像matlab,2DPSK相干解调java没有现成的函数,需要靠理解自己编写相应的函数。

2.java画图不像matlab那样操作简单,且坐标系不是自然坐标系,需要建模转换。

不足

1.java画图只能画整形数,不能画浮点数,在精度上有所欠缺,不过非高精度要求一般能应付。

2.GUI界面不是特别友好,有空再改进。

最后附上整个工程的源代码

 

源代码

欢迎赏star