一种基于滑窗的余度指令判别算法
2014-07-13程小军林回祥
程小军,林回祥
(中国电子科技集团公司第三十八研究所 软件系统研究部,安徽 合肥 230031)
1 引言
浮空器在升空过程中会处于不同的环境中[1-2],地面与浮空器之间甚至艇载软件之间的指令信号都容易受到干扰。尽管通过指令编码和校验方式可以在一定程度上减轻错误指令出现的概率[3],但为了进一步确保指令的正确性,还需要增加其他手段[4-5],比较常见的有“3”判“2”或者“5”判“3”甚至更大数量的余度指令判别法。这种判别方法是:在规定的时间内连续接收到多组指令,只要其中有规定数量的相同指令A,指令A就是有效的。
本文根据实际应用需要,研究了一种基于滑窗的余度指令判别算法。
2 问题分析
在浮空器关键指令处理过程中,特别是在下位机(控制执行机构)对关键指令进行处理时,不但需要根据帧头、帧尾、数据长度、指令标签以及校验和等多个特征点对指令进行合理性判断,还要求上位机能在规定时间内发出多条相同指令,从而以“3”判“2”或者“5”判“3”来获取有效指令。一般多余度指令处理模型如图1所示。
图1 多余度指令处理模型
值得注意的是,实际应用情况要比理想状态要复杂得多。比如,接收的指令可能有连续多组关键指令,或者是一般指令和关键指令交叉存在。于是,干扰问题和时序问题会造成多条相同指令之间夹杂着其他指令的现象,这时普通的多余度指令处理方法就可能会失效。失效情况如图2所示。对关键指令采取“5”判“3”判断,假设在第N-1个余度判断时,下位机收到5个指令(编号为奇数的指令为关键指令),分别是指令1、指令1、指令2、指令3、指令3,即关键指令在该次判断里不能得到执行,因而被抛弃。在第N个余度判断里,接着接收后面的指令,分别为指令3、指令3(指令3丢失1个)、指令4、指令5、指令5,同样,关键指令仍不能得到执行。第N+1个余度判断情况与第N个余度判断一样(指令5丢失1个)。可以看出,只要关键指令丢失一个,就容易造成执行不成功的情况。若在相同的5个关键指令中间还存在其他指令,就更容易出现失效情况。另外,对于非关键指令,究竟是当作干扰还是当作正确指令予以执行也是个需要思考的问题。
本文正是基于这些失效情况的考虑,提出一种新的判别算法。
图2 普通多余度指令处理失效情况
3 算法设计
针对普通余度指令算法存在的不足,本文给出一种基于滑窗的余度指令判别算法。该算法分为以下几步,其流程图如图3所示。
图3 基于滑窗的余度指令判别算法流程
步骤1:判断接收到的指令是否是关键指令,若不是,则直接执行该指令;若是,则将其放入缓存(一共可以保存5个指令)中。
步骤2:如果缓存满,则执行“5”判“3”规则,未满则继续接收指令。
步骤3:如果其中有3个相同的关键指令,则执行对应的关键指令。移除最旧指令(若存在多个连续的指令,则全部移除),将未移除的指令向前移动,留出的缓存空间继续接收关键指令。
步骤4:步骤1—步骤3往复进行。如果在规定的时间内没有关键指令到来,则清空缓存。
在滑窗移动过程中,可以确保连续指令(只要大于三个就可以)得到执行。注意到,如果关键指令要能够得到执行,其中间最多可以夹杂2个其他关键指令。当中间夹杂的其他关键指令超过2个时(比如,地面遥控时,指令因为信号不好导致部分指令丢失严重的情况),该算法就难以应付了。这与我们的“5”判“3”规则有关。如果规则要求只要在规定的时间内接收到三组同样的关键指令就可以执行相应的控制,则可以采取多个余度指令缓存接收不同指令的方式或者采取更大缓存空间的方式。本文对此不作展开论述。
4 实例分析
为了验证本文所提算法的有效性,本节通过大量的测试用例给予说明。在指令输入端,分别输入10万组指令,并在传输过程注入一定概率的指令错误。在指令接收端通过冗余指令判别算法提取指令。通过对普通算法和本文算法的比较,展示本文算法的优势。针对指令错误概率分别为10%、 0.1%、以及无错误等3种情况进行仿真,输入指令包括4组关键指令和4组普通指令,随机选取这8组指令之一输入到系统,并且保证每次输入关键指令时都能连续输入5组以利于“5”判“3”的实现,得到表1-表3的运行结果。
表1 指令错误为10%下的测试结果
续表1
指令传输错误率10%(10万组)第1次采样(指令个数)第2次采样(指令个数)第3次采样(指令个数)输入指令普通指令冗余解算本文指令冗余解算输入指令普通指令冗余解算本文指令冗余解算输入指令普通指令冗余解算本文指令冗余解算一般指令1534148024802523946794679534048044804一般指令2494444564456493144424442489744114411一般指令3481043504350481143304330491144074407一般指令4498444634463501045374537494144314431
表2 指令错误为0.1%下的测试结果
表3 无指令错误下的测试结果
为了针对性地展示结果,表1-表3所得结果要求系统不可将两个相同的关键指令组挨在一起(表4所对应的条件却可以),从表中所展示的数据可以看出:
(1)本文所给出的算法相比普通指令不易丢失指令;
(2)两种算法对普通指令都能够顺利提取;
(3)随着指令错误概率的降低,两种算法都趋于完全提取出指令,在无错误注入时能完全解析出所有指令。
对于第(3)条结论,是建立在系统在输入指令时不可将两个相同的关键指令组挨在一起的条件下(中间可以有普通指令),对于违反这个条件的情况见表4。
从表4可以看出,普通冗余算法得到的关键指令个数竟然超出了输入的关键指令数,这是因为两组关键指令一共有10个,如果中间有其他指令,则普通冗余算法根据其接收的先后顺序会将关键指令拆成三个部分,导致根据“5”判“3”所解算的指令个数超出实际组数。然而,本文所提算法却并未出现这种情况。
表4 关键指令组挨在一起的测试结果
5 结语
本文针对普通余度指令判断算法存在的问题,提出了一种基于滑窗的余度指令判断算法。该算法能够避免连续指令得不到执行的问题,在处理关键指令问题上具有一定优势。且在浮空器的关键指令执行为应用平台进行验证过程中,大量的测试用例成功执行表明该算法具有较大的工程实用价值。
[1] 王莲英,杨柳,张功学,等.浮空器的关键技术探讨[J].飞航导弹,2013(7):30-33.
[2] 杨秉,杨健,李小将,等.临近空间浮空器运行环境及其影响[J].航天器环境工程,2008,25(6):555-557.
[3] 贲宗玉.某型无人机导航控制研究与软件实现[D].西安:西北工业大学,2007.
[4] 杨柳庆,肖前贵,刘久富. 无人机飞控软件抗干扰设计[J].微计算机信息,2008,24(5):52-53.
[5] 杨林芳.无人机容错飞行控制系统研究[D].南京:南京航空航天大学,2007.