导航系统异步串口通信协议参数智能检测算法研究
2012-01-22,,
,,
(海军工程大学 电气与信息工程学院,武汉 430033)
在现代舰船导航装备中异步串口通信应用非常广泛。异步串口通信协议规定了一系列特定的参数,通信中收发双方必须采用一致的通信参数才能实现数据的正常传输[1]。然而在舰艇装备的导航设备中部分存在装备信息掌握不完全,通信参数不明确的情况,这给装备的解析和正常使用带来了困难。由于波特率、数据位长度、校验方式、停止位长度以及数据编码方式的多样化,现行导航设备常用的通信参数组合达上千种[2]。若采用人工穷举检测的方法速度慢,效率低,需要大量数据的支持。所以迫切需要应用能够自动、迅速、高效地检测通信参数的分析方法。
1 算法背景
异步串口通信是以字符帧为基本单位传送数据信息的,协议规定了字符帧被传送的波特率与字符帧的格式,见图1。
图1 字符帧被传递的波特率与字符帧的格式
字符帧按一定的波特率被传送,波特率是单位时间内传送的二进制数据的比特数,单位为“bit/s”。每个字符帧以一个比特低电平的起始位开始,紧接着是5~8位比特长度的数据位,数据位后面可以有一比特的校验位也可以没有,最后是1~2位比特长度的停止位[3]。字符帧与字符帧之间可以有任意长度的空闲位。
要彻底解析异步串口通信协议就要确定波特率、数据位长度、校验方式、停止位长度以及数据编码方式,其协议参数见表1。
表1 导航系统常用异步串口通信协议参数
基于对未知的异步串口通信电平进行的采样,把采样数据传送至PC机。通过PC机对采样数据进行解析,达到检测协议参数的目的。
2 协议参数检测算法
在波特率、数据位长度、校验方式、停止位长度和数据编码方式5个参数中,由于停止位电平与空闲位相连且电平一致,故停止位与空闲位的界限并不明显。所以在停止位大于1 bit的情况下仍然可以把停止位视为1 bit,把其余视为空闲位,并不影响数据接收[4]。所以参数检测的关键在于对另外4个参数的分析。
2.1 波特率检测
在存在采样误码且误码率未知的条件下,同电位电平的最短持续时间并不一定是波特率时间TBR[5]。如图2所示,误码的存在使得采用检测同电位电平的最短持续时间的方法检测波特率遇到了障碍。
图2 存在误码的电平采样示意
考虑到误码因素,提出用统计受检数据单个低电平平均持续时间的方法检测波特率的方法。假设传送的数据是随机信号,先假设无误码的情况,低电平每隔TBR发生跳变的概率是1/2。低电平持续时间l的概率pl的取值见图3。
图3 低电平持续时间长度与概率取值示意
设有一段包含k个字符帧的受检电平,字符帧误码率为e。误码以等概率发生在高低电平中,故误码不影响低电平总时间,每个误码使低电平个数增1。由于一个字符帧内停止位只出现一次,对电平跳变概率影响很小。若经统计受检电平中低电平个数为m,故低电平总时间可认为为2m,在一个字符帧随机信号中高低电平的概率相等,故字符帧内电平(不包括空闲位电平)总时间可认为为4m。若只计1位停止位在字符帧内,则一个字符帧长度在7~11个TBR之间,故k和m的关系可表述为:7k<4m<11k。故存在误码的单个低电平持续时间期望:Etl=2m/(m+k×e)。
考虑到实际情况下,一个字符帧的长度一般在7~11 bit之间(只计1位停止位在字符帧内)故而:14/(7+4e) 数据位和校验位长度是指一字符帧数据中除起始位和停止位以外的数据长度。对数据位和校验位长度的检测是用已检测出的波特率构造数据位长度n不同的标准采样匹配模板,分别对受检电平采样数据进行模糊匹配,并计算每种模板的隶属度un,确定n值。 2.2.1 标准采样匹配模板 本文提出的标准采样匹配模板见图4,是停止位只取1 bit的一个字符帧长度模拟采样模板,只拥有字符帧中起始位和停止位的模拟采样值,而n位数据位的值被忽略。 图4 标准采样匹配模板示意 2.2.2 低电平等待的模糊匹配 在异步串口通信中,字符帧之间存在长度不定的空闲位高电平。本文提出一种低电平等待模糊匹配(见图5)算法消除空闲位的影响。 图5 一次低电平等待匹配示意 步骤1。受检电平采样数据的低电平第一个采样点和标准采样匹配模板的起始位以第一个模拟采样点对准,依次匹配它们同位置的采样值,至标准采样匹配模板停止位的最后一个模拟采样值。 步骤2。等待受检数据电平后续尚未参与匹配的采样低电平出现,重复步骤1,直至所有受检电平匹配完为止。 步骤3。计算隶属度un,使un最大的n值就是受检电平的数据信息位长度。 2.2.3 隶属度计算 隶属度定义为 (1) 式中:xi,si——参加匹配受检电平与标准模板电平对应采样点采样值; m——参加匹配的采样点总数; n——数据位和校验位长度,n=5、6、7、8、9。 低电平等待模糊匹配算法检测出受检电平数据每个字符帧的起始位和停止位后,可以把所有的起始位和停止位剥离开,对剩余数据分析数据的校验方式。由于由低电平等待模糊匹配算法检测的开始若干个字符帧的起始位和停止位为止并不准确,为了提高校验方式检测的准确度,应该丢弃开头若干字取出的数据再进行校验方式检测。为了尽可能提高留下数据的正确率,假设导致un<1的失配电平全部产生于开始的不准确匹配导致的停止位失配,则丢弃的字符帧数为 r=pf×N(1-un) (2) 式中:N——受检电平总字符帧数; pf——随机匹配下停止位失配概率,pf=1/2。 对字符帧校验方式的判断依据如下。 1)若每字符帧数据位和校验位中1的个数总为偶数,则为偶校验。 2)若每字符帧数据位和校验位中1的个数总为奇数,则为奇校验。 3)若每字符帧数据位和校验位的最后一位总为1,则为高校验。 4)若每字符帧数据位和校验位的最后一位总为0,则为低校验。 5)若无以上特征,则无校验位。 导航系统异步串口通信数据编码方式可分为16进制数和ASCⅡ码两种,其中所传输的ASCⅡ码均为可见字符,即ASCⅡ码表中的32号至127号字符。检测数据编码即检测受检数据值是否属于[32,127]。本文依据数据统计量用Bayes决策计算出后验概率得出数据编码方式判据。 假设w1表示一字符数据为ASCⅡ码,w2表示一字符数据为16进制数;q为异步串口通信误码率;p为一字符数据即可以被译为ASCⅡ码的概率。设事件X:n个受检字符中,有k个字符可被译为ASCⅡ码。则在w1和w2条件下事件x发生的前验概率为 (3) 根据Bayes公式,得出后验概率 p(wi|x)=p(x|wi)p(wi)/ (4) 把本文提出的检测算法用C++ Builder编写成检测软件[6],试验该算法的实用性。例如从串口调试助手软件发送一段波特率9 600 bit/s、数据位8位、停止位1位、偶校验的异步串口通信电平模拟受检电平,经采样和传输,用所编写的检测软件检测结果见图6。 图6 智能检测算法检测结果 图6表明协议参数分析结果完全符合实际。其它改变协议参数的实验也得到了同样的结果。 本文所提出的导航系统异步串口通信协议参数智能检测算法能够自动检测波特率范围从150~19 200 bit/s的常用串口电平的所有参数。大量实验表明,该算法具有运算时间复杂度低,结果准确率高的特点,基本可以实现实时出结果,比起现行的人工分析的方法具有很大的优越性。 [1] 冯怀迪,周亚军.通信协议设计与实现[J].机电工程,2009,26(11):91-93. [2] 陈永冰,傅 军,陈 浩.等.导航系统接口技术[M].武汉:海军工程大学出版社,2010. [3] 周永余,李文魁.舰船组合导航系统发展评述[J].中国惯性技术学报,2003,11(1):67-72. [4] 胡宝清.模糊理论基础[M].武汉:武汉大学出版社,2004. [5] 徐胜江,张宗麟.测量融合组合导航方法研究[J〗. 中国惯性技术学报,2001,9(2):16-18. [6] 李幼仪,甘 志.C++ Builder高级应用开发指南[M].北京:清华大学出版社,2002.2.2 数据位和校验位长度检测
2.3 校验方式检测
2.4 基于最小错误率Bayes决策的数据编码方式检测
3 算法实际应用
4 结论