O 引言
随着科技的进步,空空导d的研制越来越复杂。相应地就有越来越多的数据信息需要遥测传输,这必然导致遥测接收的数据文件较大。以3 Mb/s码率计,10 min的遥测数据就有214 MB之多。数据处理软件往往需要经过异步帧提取,有效位屏蔽,甚至经过费时的字符串处理才能得到最终结果。所以当用户处理这种大文件时往往需要等待很长的时间。如果能够把这样大的文件分割成较小的几个文件然后分别处理,那么处理软件的运行时间就可以缩短到用户可以忍受的程度。
另一方面,空空导d的发射试验往往比较短暂,从导d离开载机直到导d爆炸只有不到1 min的时间。数据分析人员最关心的也正是这段时间的数据。而实际遥测中,为了确保数据的可靠接收,会从发射前5 min开始记录直到遥测信号完全消失才停止记录。
这种情况下,如果能够根据导d发射的特征信号(比如导d与发射架分离的信号)来截取遥测数据文件也具有重要的实际意义。
本文通过对实际需求的分析,提出了按遥测帧数、时间和特征参数三种文件截取方法,并在VC 6.O平台上予以实现。
1 软件设计
1.1 功能设计
在空空导d遥测中,待传输的信号都是先通过多路复用组装成一个N字节长的遥测帧然后调制传输。在接收端解调后先通过帧同步获得该N字节长的遥测帧,然后在帧头加入8 B的时码(又称为B码)来表示接收到该帧的时刻,如图1所示。这样存盘后的文件字节数是N+8的整数倍。
因为遥测数据按帧存放,所以有意义的最小分割单位是帧而不是字节,对文件的截取最后都要归结到按帧来截取。因此,软件的第一个功能同时也是最基本的功能就是按帧的起止序号进行分割。
由于文件中每一帧数据的帧头都有B码,所以将该B码换算成实际时间之后也可以根据时间进行截取。
数据分析人员一般要求提取导d发射后到爆炸这一时间段的数据,所以利用导d发射电气分离信号(ES)的跳变,截取跳变时刻前5 s直到跳变时刻后50 s的数据能够确保覆盖所需数据,同时尽量减小数据文件的大小。
典型的电气分离信号图形如图2所示。
通过对图2的分析可以得出以下结论:ES跳变点需要通过计算的来判决,比如当前数据点与下一数据点之差超过信号范围的2/3,那么就认为当前点为跳变点。但是对于图2(c)中有野点的情况这种判决方法就有可能导致误判。所以最好的办法是让用户参与跳变点的判决。软件自动找到第一个跳变点,用户可以通过快捷键找到下一个跳变点,直到正确的跳变点为止。
这种设计方法杜绝了跳变点的误判,同时又能直观快捷地辅助用户找到跳变点,另外还简化了软件的设计。
1.2 模块设计
分割一个文件的流程,如图3所示。
分析图3可以得出软件必须的几个模块:
(1)打开待分割文件并自动生成分割后文件;
(2)分割方式选择;
(3)特征参数数据绘制;
(4)起止帧序数选择;
(5)起止时间选择;
(6)是否需要剔除无效帧。
最终确定的软件界面如图4所示。
2 软件实现
2.1 按特征参数分割
按特征参数分割涉及到遥测参数解算。程序运行时首先加载动态链接库dbreader.dll,postpro.dll和eu.dll。在OnInitDialog中调用函数GetTMFrame FormaTInfo来获取遥测帧格式,包括遥测帧的长度,码率,同步码位置等信息。然后调用函数GetTM ParaAllReeord来获取所有参数在遥测帧中的位置信息,解算方法等。
当用户从程序界面的参数下拉列表框中选择一个参数时,触发CBN_SELCHANGE事件并调用消息函数。在消息函数中根据参数是帧同步数据还是帧异步数据分别调用GetASyncParaValue函数或EUConvert函数解算出数据,同时从数据中找出跳变点,然后在图形控件上绘出曲线。
2.2 按B码时间分割
要想根据时间信息来查找对应的遥测帧就需要将该时间和文件中各遥测帧头的B码代表的时间进行比较。如果采用遍历查找的方法,对于总帧数为N的文件,理论上需要比较(N+1)/2次,要找到起、止两个时间对应的帧就要比较N+1次。这对于较大的文件来说消耗的时间会很长。
在遥测文件中,每帧数据都是按接收到的先后顺序从前往后依次存放。也就是说,搜索的目的序列是有序的。对于这种情况,可以采用折半查找法进行搜索。理论证明,采用折半查找最多需要的比较次数为[log2(n+1)],搜索起、止两个时间共需比较2*[log2(n+1)]次。
2.3 按帧序数分割
三种分割方式最后都归结到按帧分割。按帧分割惟一复杂的地方就是剔除无效帧。要剔除无效帧需要将每一帧数据的同步码取出来和标准的同步码进行比较。如果差异位数超过容许值就丢弃该帧,否则保留。很多程序都采用依次右移一位,看二者最低位是否相同,如果不同则计数加1,循环直到两个数都为零的方法。
这种方法效率非常低。本文采用了如图5所示的计算方法。
这种算法的关键在两处:首先对两个被比较数a和b按位异或,结果c的二进制数中为1的位置就是a和b不一致的位置。然后c不停地与c-1按位与并将结果赋给c,直到c为O。通过归纳法可以证明c与c-1按位与可以消掉c的从低位往高位数的第一个1,所以c的二进制值有几个1就循环几次。
3 结语
本遥测软件采用模块化设计,便于实现和测试。同时结合遥测文件的结构,实现了按帧序数、按时间和按特征参数三种分割方法,较好地满足了型号遥测数据处理的需求。从软件的设计可以看出,对于较复杂的软件采用自顶向下,逐渐细化的分析方法,分模块设计;对于影响程序性能的处理过程有针对性地进行优化,可以有效地提高程序的可靠性和性能并简化设计过程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)