基于FPGA的循环不重复码研究
2021-04-07张伟健
张伟健,郑 毅,耿 林,吴 洋
(华北光电技术研究所,北京 100015)
1 引 言
激光技术的发展使军事在作战的形式发生了重大变化。为了能更逼真的模拟战场环境,提升我军的作战素质,科研人员开发了一套模拟真实作战场环景的信息交流系统。在系统中,当武器射击时半导体激光器会发射出与瞄准线平行的编码红外脉冲激光束[1],激光发射器打出一束激光代表武器打出一颗子弹,不同的激光光束命中身体不同部位的光电接收器,会上报不同的战损信息,从而实现了战争中敌我作战场景的模拟。使用带有编码信息激光光束代替子弹,在节约成本的同时,使军事演练中包含了更多的科技元素,同时也减少了士兵在军演中意外情况的发生,提升了军演的安全性。
环境复杂、信息量大、干扰强是战场环境的基本特征。为了能够安全有效地传递战场实时的信息,我们要求携带信息的载体具有抗干扰能力强且能够传递大量的信息的特性。激光具有发散角小,相干性强的特性[2],这使得脉冲编码激光信号被截获的可能性很低[3]。同时可变的脉冲激光振幅,脉宽,脉冲间隔等特性使激光能够携带大量信息。基于这些特性,脉冲激光能在复杂的战场,承担“信使”这一重任。常见的激光脉冲编码方式有脉冲重频编码、PCM编码、等差周期脉冲编码等,其中PCM编码方是使用最广泛的一种脉冲编码方式[4]。
2 循环不重复码
PCM编码指的是对固定频率的激光脉冲信号进行调制的方法,编码调制的目的是让本该产生脉冲信号的位置不再产生脉冲信号,使相邻脉冲间的间隔各不相同,从而携带信息[5]。PCM码是在精确频率码的基础上,对相应的激光脉冲选择发射或者不发射,实现不同的脉冲间隔编码[6]。
文中使用的激光脉冲的编码方式是循环不重复码,循环不重复码是PCM码的一种。具有循环不重复的特性的码应该具有如下特点:
(1)将一组m位循环不重复码连续重复发送n遍后,形成一个元素个数为A=m×n的行向量;
(2)将m位的循环不重复码循环右移排成一列,得到一个B=m×m的矩阵;
(3)将p组循环不重复码执行(1)操作,得到C=p×mn的矩阵;
(4)在行向量A中任意截取连续的m位,m位与其他非本行的任意截取的连续的m位均不相同,同时又均能在矩阵B找到。
使用循环不重复码能在大量干扰存在的情况下提升脉冲激光的解码成功率,从而将信息传递到指挥部,以便指挥部能准确得知战场的作战信息,及时调整作战方案,有利于提高了军事演习的质量。
图1 循环不重复码流程图
图2 11位循环不重复码
3 脉冲激光编码的FPGA实现
编码脉冲激光携带用户ID和装备类型这俩种信息,发射端使用串口实现命令的发射与接收,控制命令由PC端产生。串口发送的数据帧格式如图3所示。
如果PC端通过串口将控制命ff11010205发送到FPGA后,激光器会发射携带用户ID为1,装备类型为2信息的脉冲激光。为了增加解码的成功率,每个字段会重复发送三遍,发射部分的FPGA结构如图4所示。
帧头0帧头1数据0数据1校验ff11用户ID装备类型
图4 发射端FPGA结构图
发射编码脉冲的动作由以上三个模块协同完成,uart_byte模块用来接收来自PC端的控制指令,发出带有信息的脉冲激光;baud_set设置码元的传输速率;cmd_analysis模块将协议中信息转换成相应的码型;laser_driver模块在信号C_CLK的上升沿赋值给,一位一位的发送出去。装备类型和用户ID会分别存储到寄存器ctrl_code_device和ctrl_code_type中。使用11位循环不重复码将信息编码,用户ID为11010101100和装备类型为11000110101,modelsim的仿真结果如图5所示。
图5 发射端功能仿真图
由仿真结果可以脉冲激光的信息可以准确的存储在寄存器ctrl_code_device和ctrl_code_type中。
4 脉冲激光解码的FPGA实现
将激光信号接收,并成功解码是系统中关键性的一步。在PC端的控制下,激光发射器发射带有编码信息的脉冲激光经过大气传输损耗,最终会被探测器接收。接收到的光信号经过光电转换模块,将光信号转变为电信号,再对转换后的电信号进行一系列的展宽、整型等处理,再交给解码电路进行解码。解码电路的FPGA结构如图6所示。
图6 接收端FPGA结构图
解码主要由三部分构成laser_recod、find_code、module_value三个模块组成。分别介绍三个模块的功能。
laser_recod模块的主要功能是将采集的所有脉冲信号存储起来。该模块可以由状态机来实现,共有四个状态,分别为idle,time_ms_ok,data_get,time_us_ok。其中idle表示状态机的初始态,time_ms_ok 1ms计数完成的状态,data_get表示数据存储完成的状态,time_us_ok表示延时。状态机如图7所示。
图7 Laser_code状态机
find_code模块实现的功能是将编码的信息在码表中找到相应的地址并存储到RAM,以便后续模块根据RAM中的地址信息确定用户的ID以及装备的具体类型。为了提高解码成功率,增强系统的鲁棒性,解码电路会解码三次,ta_find,tb_find,tc_find表示用户ID解码三次,da_find,db_find,dc_find表示装备类型解码三次。所有的码型都存储在RAM中。该模块状态机如图8所示。
图8 Find_code状态机
module_value模块根据RAM中的地址,在码表中找到用户的具体的ID信息,及装备的类型信息。实现三个模块的功能即可实现一次解码操作,我们以用户ID为11011001010和装备类型11001010011为例,使用modelsim成功解码,仿真图如图9所示。
图9 解码模块仿真波形图
从仿真波形图可以看出,解码电路做了三次解码操作,得到了脉冲激光中所表示的信息,成功解码。
5 结 论
本文使用循环不重复码作为激光脉冲编码、解码的核心方法,利用循环不重复码的特点,提高了系统抗干扰的能力,大大提升了解码的成功率,提升军演质量;使用FPGA作为编码、解码的核心处理单元,利用FPGA本身的特性,使系统易于扩展,设计更加灵活[6],同时FPGA的并行特点使信息处理速度更快,信息的实时性得到提高。