java模拟2DPSK信号的相干解调
这几天在实验室做通信原理的实验,其中有一道题是模拟2DPSK信号的相干解调过程,老师推荐使用matlab实现,因为有现成的相关函数,调用就完事了,私以为没有挑战性,于是我选用了java实现,效果还不错。
基本实现了各层之间的分离
工程结构
model包:封装了一些基础类,如码元类CodeElement、码元类型类CodeType
handler包:对数据的逻辑处理,主要包括码元转波形类Code2Wave、波形转码元类Wave2Code
util包:包含数据可视化类WaveDrawer
runner包:包含程序入口类Main
实验原理
如图
调制框图
实验过程及实现效果
1.用户输入产生2DPSK信号
示例输入
输入一些二进制数字序列,比如我上面输入的“1101100111”
如果输入除0/1以外的其他其他数字,为了方便,在程序中做了归一化处理,正数被视为信号“1”
非正数被视为信号“0”,输入的序列经处理绘制出相应的波形图
解释一下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点)
最后得到解调后的信号
实验总结及反思
遇到的实际困难大致如下
1.不像matlab,2DPSK相干解调java没有现成的函数,需要靠理解自己编写相应的函数。
2.java画图不像matlab那样操作简单,且坐标系不是自然坐标系,需要建模转换。
不足
1.java画图只能画整形数,不能画浮点数,在精度上有所欠缺,不过非高精度要求一般能应付。
2.GUI界面不是特别友好,有空再改进。
最后附上整个工程的源代码
源代码
欢迎赏star