发明名称 一种基于ARM的参数识别系统的网络协议的工作方法
摘要 一种基于ARM的参数识别系统的网络协议的工作方法,属于网络通信及卫星移动通信领域。本发明为S标准中的业务信道密码参数盲识别的参数识别系统,设计并实现了一套基于ARM的网络接口。本实现方法将参数识别系统以及第三方接收机隔离,对外只提供TCP接口,以保证该参数识别系统内部的稳定性及对外的唯一性,且具体实现过程提高了系统的健壮性及可维护性。本发明提出的网络接口中,对一些重要数据进行卷积码编码之后在进行传输,以保证传输的可靠性。
申请公布号 CN106254034A 申请公布日期 2016.12.21
申请号 CN201610647842.5 申请日期 2016.08.08
申请人 山东大学 发明人 马丕明;李进;杨勇
分类号 H04L1/00(2006.01)I;H04L29/06(2006.01)I 主分类号 H04L1/00(2006.01)I
代理机构 济南金迪知识产权代理有限公司 37219 代理人 许德山
主权项 一种基于ARM的参数识别系统的网络协议的工作方法,该系统包括ARM处理器、一个100M网口、网口插座和一个FPGA模块,网口插座采用RJ45接口,内置变压器;ARM处理器通过数据线、地址线及控制信号线连接FPGA模块,ARM处理器经RJ45接口和接收机相连接,接收机遵循TCP/IP协议的本网络协议进行通信;FPGA模块能完成参数识别算法,利用ARM处理器实现对外数据的接收和发送,以及与FPGA模块的数据交互;ARM处理器与FPGA模块数据交互过程包括两方面:当ARM处理器对接收机发送过来的数据进行处理之后,通过与FPGA中的数据线及其地址线,将处理后的数据发送到FPGA的接收数据缓冲区,并通过控制信号线告知FPGA所需操作;FPGA模块完成参数识别后,会将数据保存在FPGA模块的发送数据缓冲区,ARM处理器可通过读取该缓冲区以得到所需数据,该网络协议包含五种指令,共用一种数据包结构,在ARM处理器芯片中刷入Linux系统,并通过C语言实现服务端的应用程序,该程序控制指令的收发及处理过程,将该程序放入ARM启动目录,以达到ARM处理器开机后自动启动该程序的目的,该网络协议使用的数据包结构采用包头加包体结构,包含五字节的包头信息,以及若干字节的通信报文,包头首字节为指令类型,第二三字节为通信报文长度,第四字节为附带参数信息即通话唯一标识长度,第五字节为最大允许的包长度,该最大包长度固定为65536字节,五种指令为:(1)请求识别指令:通信报文为通话唯一标识和密文数据报,通话唯一标识可自由定义,密文数据报的数组以每22字节为一组,第一组为报头,其余为上下行数据,报头前三字节依次为类型、下行数据帧数、上行数据帧数,其后字节目前留空;上下行数据以每22字节为一组,其中每组数组包含19比特的帧号,以及待识别的48*2比特的时隙数据;⑵发送识别结果指令:通信报文为通话唯一标识和识别成功标识,通话唯一标识可自行定义,识别成功标识长度为一字节:1代表识别成功,0代表识别失败;⑶请求密钥流指令:通信报文为通话唯一标识和请求密钥流数据报,请求密钥流数据报长度固定为40比特,其中前两比特为每帧密钥流长度,之后依次为19比特的起始帧号和19比特的结束帧号;⑷返回密钥流指令:通信报文为通话唯一标识和密钥流数据,密钥流数据报由三部分组成:两字节的每帧数据长度,19字节的起始帧号,n帧数据;⑸心跳包:长度为零,只发送包头;其中第一、三种指令是为接收机设计的指令,第二、四指令是为ARM处理器而设计,第五种指令由接收机和ARM处理器每隔五秒相互发送一次,当连续二十秒未收到心跳包,则重新建立连接;前四种指令需相互配合,才能完成接收机对参数识别算法的调用;上述网络协议的工作方法,其步骤如下:1)接收机连接ARM处理器对外提供的TCP端口,连接成功后接收机遵循本网络接口向ARM处理器发送指令,将待识别的数据以48*2比特为一帧,首先接收机对每帧数据进行预编码,预编码采用卷积码的方式,具体过程如下:a)将每帧的96比特数据统一成信息序列u=u(u<sub>1</sub>,u<sub>2</sub>...u<sub>96</sub>);b)计算生成矩阵,采用二元(2,1,4)卷积码结构,则两路脉冲冲激响应为<img file="FDA0001072655450000021.GIF" wi="1404" he="79" />构造出如下生成矩阵:<maths num="0001"><math><![CDATA[<mrow><mi>G</mi><mo>=</mo><mfenced open = "{" close = "}"><mtable><mtr><mtd><mrow><msubsup><mi>g</mi><mn>0</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>0</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>1</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>1</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>2</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>3</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>3</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>0</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>0</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>1</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>1</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>2</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>3</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>3</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow></mrow></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>0</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>0</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>1</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>1</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>2</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>3</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>3</mn><mn>2</mn></msubsup></mrow></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mn>...</mn></mtd><mtd><mn>...</mn></mtd><mtd><mn>...</mn></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mn>...</mn></mtd><mtd><mn>...</mn></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0001072655450000022.GIF" wi="1299" he="495" /></maths>c)计算输出码字,利用如下公式求得输出码字c<maths num="0002"><math><![CDATA[<mrow><mi>c</mi><mo>=</mo><mi>u</mi><mo>&CenterDot;</mo><mi>G</mi><mo>=</mo><mi>u</mi><mrow><mo>(</mo><msub><mi>u</mi><mn>1</mn></msub><mo>,</mo><msub><mi>u</mi><mn>2</mn></msub><mo>...</mo><msub><mi>u</mi><mn>96</mn></msub><mo>)</mo></mrow><mfenced open = "{" close = "}"><mtable><mtr><mtd><mrow><msubsup><mi>g</mi><mn>0</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>0</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>1</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>1</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>2</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>3</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>3</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>0</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>0</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>1</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>1</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>2</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>3</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>3</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow></mrow></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>0</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>0</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>1</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>1</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>2</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>2</mn><mn>2</mn></msubsup></mrow></mtd><mtd><mrow><msubsup><mi>g</mi><mn>3</mn><mn>1</mn></msubsup><msubsup><mi>g</mi><mn>3</mn><mn>2</mn></msubsup></mrow></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mn>...</mn></mtd><mtd><mn>...</mn></mtd><mtd><mn>...</mn></mtd></mtr><mtr><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mrow></mrow></mtd><mtd><mn>...</mn></mtd><mtd><mn>...</mn></mtd></mtr></mtable></mfenced><mo>;</mo><mo>;</mo></mrow>]]></math><img file="FDA0001072655450000023.GIF" wi="1744" he="492" /></maths>得到预编码数据后,将19比特帧号与预编码之后的数据封装成22比特一组的数据,将上下行数据都封装成22比特一组的数据后,与通话唯一标识一起封装成请求识别指令发送到FPGA模块;2)ARM处理器首先接收接收机发送的五字节包头,依次判断指令类型,通信报文长度,通话唯一标识长度,若ARM处理器接收到的指令为请求识别指令,首先根据通信报文长度接收指定长度的字节数到本地缓冲区,之后根据密文数据报第一组数组确定上下行数据长度,然后每22字节一组解析出19比特帧号以及预编码数据,利用维特比译码方法将预编码数据转为48*2比特的时隙数据,将时隙数据以每次48比特通过与FPGA模块相连的端口传输到FPGA的内存空间,传输16次等待一次识别结果,当全部数据识别完成后,向接收机发送识别结果指令;3)接收机收到指令后,首先接收五字节的包头,依次判断指令类型,通信报文长度,通话唯一标识长度,若接收到的指令为识别结果指令,则将19比特的起始帧号与结束帧号经过卷积码编码之后,与每帧长度一起封装成请求密钥流指令;4)ARM处理器收到接收机的指令后,首先接收字节的包头,依次判断指令类型,通信报文长度,通话唯一标识长度,若接收到的指令为请求密钥流指令,首先解析出每帧长度以及起始帧号,并计算出共请求的帧数n,之后根据起始帧号从FPGA模块指定地址读取n帧数据,最后将每帧长度、起始帧号、n帧数据封装成返回密钥流指令,并向接收机发送该指令;5)重复步骤1)、2)、3)、4),当连续二十秒未收到心跳包,按断开连接处理,接收机与FPGA模块重新建立连接,再重复步骤1)2)3)4)5)。
地址 250199 山东省济南市历城区山大南路27号