一种智能修正的快速PCM解码计算方法与流程

文档序号:23984397发布日期:2021-02-20 11:34阅读:99来源:国知局
一种智能修正的快速PCM解码计算方法与流程
一种智能修正的快速pcm解码计算方法
技术领域
[0001]
本发明属于直升机飞行试验领域,特别涉及一种智能修正的快速pcm解码计算方法。


背景技术:

[0002]
目前直升机试飞测试系统采集记录数据格式绝大部分是pcm数据存储格式,pcm数据帧是可由用户自定义的数据帧格式,数据采集设备按照定义好的帧格式向数据帧中填充数据,数据记录设备将数据帧记录下来保存到存储设备上,最后将存储的pcm数据信息导入电脑并提取变成工程物理量的过程我们习惯称之为pcm解码,随着科研型号的发展,试验数据越来越大,试验环境越来越复杂,解码的速度越来越慢,解码过程中预见掺杂了各种干扰数据的原始数据也就越来越多,为保证转换后的数据信息的准确和完整也为保证试飞数据解码的效率,本专利基于以上问题,设计了一套有着严格标准的检查,修正以及多线程解码的算法,提高pcm解码速率,并修正数据中的干扰信号。
[0003]
目前试飞数据解码并无智能化算法,需要人工操作传统工具,将pcm数据中的干扰进行定位,截取,所需时间较长,且精确度不够,在很多情况下也容易被忽略,而造成后期数据分析难度加大,甚至严重影响试飞效率,加大试飞风险。
[0004]
因此智能修正的快速pcm解码计算方法对于直升机试飞具有重要意义。


技术实现要素:

[0005]
为了解决上述问题,本发明根据pcm数据原理,pcm数据的帧结构由用户确定,存储在xlg文件中的dataflow中,包括字长、子帧长度、主帧长度、同步字数值和各个数据字所对应的帧的位置,从而进行正常pcm解码。
[0006]
目前为了加快解码速度,根据用户输入的分块数量,将原码文件分为若干块;启动多个线程,对各块进行解码,并且将结果保存到硬盘;全部分块解码且修正完毕后,对各块的解码结果进行合并,解码完成。
[0007]
具体技术方案如下:
[0008]
一种智能修正的快速pcm解码计算方法,包括以下步骤:
[0009]
第一步:对pcm原始数据进行分块;
[0010]
第二步:读取pcm原始数据的解码配置文件,并对pcm原始数据子帧进行编号,如果解码配置文件中,配置有名称为“时间”的参数,对该参数进行解码;
[0011]
第三步:对子帧编号后的pcm原始数据进行连续性分析并补帧,
[0012]
第四步:对补帧后的pcm帧数据进行解码;
[0013]
第五步:保存解码结果。
[0014]
进一步,在所述第一步中,分块数据大小f=2*(n-1)+m/q,其中帧长度为n字节,数据大小为m字节,分成块的数量为q个;
[0015]
进一步,在所述第三步中,解码参数中没有“时间”参数,仅仅根据子帧编号进行连
续性判断;解码参数中包含“时间”参数,根据子帧编号以及时间的值进行连续性判断。
[0016]
进一步,在所述第三步中,子帧编号后的pcm原始数据连续性判断结果包括:前部不连续数据,中部不连续数据,以及尾部不连续数据。
[0017]
进一步,根据以下方法判断pcm原始数据连续性;
[0018]
在检测到第一个完整主帧前的所有子帧为前部不连续数据;
[0019]
在检测到最后一个完整主帧后的所有子帧为尾部不连续数据;
[0020]
完整主帧之间的所有子帧为中部不连续数据。
[0021]
进一步,若解码参数中无“时间”参数;
[0022]
对于前部不连续和尾部不连续的数据,仅进行子帧编号修正,不进行补帧;
[0023]
对于中部不连续数据,按照以下步骤进行处理:
[0024]
步骤a)按照子帧编号递增,修正不连续的子帧编号;
[0025]
若不连续的子帧编号位置,中间没有包含任何子帧,不对不连续处的子帧编号进行修改;
[0026]
若不连续的子帧编号位置,中间包含有一个或者多个子帧,将不连续段的子帧编号,按照子帧编号的连续性进行修正;
[0027]
步骤b)判断修正后的子帧编号是否连续,如果不连续则进行补帧;
[0028]
若修正后的子帧编号连续,则不需进行补帧;
[0029]
若修正后的子帧编号不连续且前面的子帧编号比后面的子帧编号小,则补帧数据与前帧相同并将数据补充为一个完整的主帧;
[0030]
若修正后的子帧编号不连续且前面的子帧编号大于后面的子帧编号,则补帧数据与后帧相同并将数据补充为两个完整的主帧。
[0031]
进一步,若解码参数中包含“时间”参数,则子帧编号和时间均连续的数据,才作为连续的数据;
[0032]
对于前部和尾部不连续的数据,将子帧编号和时间修改为连续的不数据而不进行补帧;
[0033]
对于中部不连续的数据,按照以下步骤进行处理:
[0034]
步骤c)按照时间和子帧编号递增,修正不连续段的时间和子帧编号;
[0035]
若不连续的子帧编号位置中间没有包含任何子帧,不对不连续处的时间数据和子帧编号进行修改;
[0036]
若不连续的子帧编号位置中间包含有一个或者多个子帧,将不连续段的时间和子帧编号,进行连续性修正;
[0037]
步骤d)判断修正后的子帧编号是否连续,如果不连续,进行补帧;
[0038]
若修正后的子帧编号连续则不进行补帧;
[0039]
若子帧编号不连续且前面的子帧编号比后面的子帧编号小;则在两个子帧编号之间进行补帧,补帧数据与前帧相同,并根据缺失的时间长度决定需要补充的主帧个数,补帧后不考虑时间的连续性;
[0040]
若子帧编号不连续且前面的子帧编号大于等于后面的子帧编号;则在两个子帧编号之间进行补帧,补帧与后帧相同,并根据缺失的时间长度决定需要补充的主帧个数,补帧后不考虑时间的连续性。
[0041]
进一步,在所述第四步中,读取补帧后的数据,通过查找帧标识的方法,判断文件类型,每次读取数据大小为200kbyte;
[0042]
判断文件类型后进行解码。
[0043]
有益效果
[0044]
相对目前现有的解码系统,具有以下特点:
[0045]
1)高效,本方法为多线程解码结束提供了具体分块方法,保证了在高效的同时保证了数据安全。
[0046]
2)智能化,为解决数据干扰问题,本方法提供数据分析方法,快速定位干扰数据,并提供有效的手段进行修正,保证正常数据的解码;
[0047]
本方法可以应用于各型军民用直升机或旋翼机科研试飞试验使用,并具备进一步推广应用的条件,效益持续性强。
附图说明
[0048]
图1为原始数据文件分块示意图;
[0049]
图2为各块文件的解码流程图;
[0050]
图3为连续性判断及补帧示意图。
具体实施方式
[0051]
一种智能修正的快速pcm解码计算方法,包括以下步骤:
[0052]
为了保证能够多线程进行解算,需对数据进行分块,在程序中形成多个进程,又为了保证分块处不丢帧且最有效,分成块数据大小根据分块数量为f=2*(n-1)+m/q,其中帧长度为n字节,数据大小为m字节,分成块的数量为q个。
[0053]
分块原理图见图1,其中s1、s2
……
代表每一个分块的开始;e1、e2
……
代表每一个分块的结束。其中s1到e1代表第一个分块,s2到e2代表第二个分块,后续各分块依此类推。
[0054]
读取原始pcm数据之配置文件。包括读取每一个通道的名称,通道采样率,通道数据所在子帧及子帧中的偏移位置等信息。选定pcm流。配置文件中,可能定义了多个pcm流,解码前需要选择一个流,进行解码。读取解码配置文件。读取输入通道解码信息,输出参数合成信息。分析每一个帧包含的输出参数,每一个输出参数的输入通道所在的位置信息,以便减少解码时的循环查找,提高解码效率。根据配置文件中<sfid>节点属性,解码子帧编号,<sfid>节点完整的一个循环编号所含的子帧组成一个主帧。如果输出参数中,配置有名称为“时间”的参数,对该参数进行解码。解码过程图2所示。
[0055]
连续性分析有两种情况。第一种,解码参数中没有“时间”参数,仅仅根据子帧编号进行连续性判断以及补帧;第二种,解码参数中包含“时间”参数,根据子帧编号以及时间的值进行连续性判断以及补帧。连续性分析及补帧的过程如下图3所示。其中前部不连续数据是指检查到第一个完整主帧前的所有子帧数据,中部不连续数据是指完整主帧之间的所有子帧数据,尾部不连续数据是指最后一个完整主帧之后所有子帧数据。
[0056]
1、没有时间参数的情况,仅仅根据子帧编号进行分析和处理。根据子帧编号,找出连续的数据段。子帧编号连续,就是连续的数据段。.
[0057]
a)前部不连续段处理
[0058]
前部不连续段的数据,直接进行子帧编号修正。不进行补帧,即不修改帧的数量。修正效果如下所示:
[0059]
修正前子帧编号:1、3、5、7、8、9、10、11、12、13、14、15、16;
[0060]
修正后子帧编号:4、5、6、7、8、9、10、11、12、13、14、15、16。
[0061]
b)中部不连续段处理
[0062]
中部不连续段处理,包括两个步骤:
[0063]
首先,按照子帧编号递增,修正不连续段的子帧编号;
[0064]
·
不连续的子帧编号位置,中间没有包含任何子帧,不会对不连续处的子帧编号进行修改。
[0065]
·
第二种情况,不连续的子帧编号位置,中间包含有一个或者多个子帧,将不连续段的子帧编号,按照子帧编号的连续性进行修正。修正效果如下所示:
[0066]
修正前子帧编号:1、2、3、4、5、7、8、11、12、13、14、15、16;
[0067]
修正后子帧编号:1、2、3、4、5、6、7、11、12、13、14、15、16。
[0068]
其次,判断修正后的子帧编号是否连续,如果不连续,进行补帧
[0069]
·
进行子帧修正之后,子帧编号变连续了,对于这种情况,修正以后,不需要进行补帧。
[0070]
·
进行子帧修正之后,子帧编号不连续,且前面的子帧编号比后面的子帧编号小,这种情况说明有丢帧发生。对于这种情况,需要延续前值进行补帧,将数据补充为一个完整的主帧。补帧效果如下所示:
[0071]
修正后子帧编号:1、2、3、4、5、6、7、11、12、13、14、15、16;
[0072]
补帧后子帧编号:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16。
[0073]
·
进行子帧修正之后,子帧编号不连续,且前面的子帧编号大于等于后面的子帧编号,这种情况说明有丢帧发生,并且丢失的数据涉及到两个以上的主帧。需要进行延续前值补帧,将数据补充为一个完整的主帧,保证相关的两个主帧的完整。补帧效果如下所示:
[0074]
修正后子帧编号:1、2、3、4、5、6、7、1、2、3、4、5、6;
[0075]
补帧后子帧编号:1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、1、2、3、4、5、6。
[0076]
c)尾部不连续段处理,直接进行子帧编号修正。不进行补帧,即不修改帧的数量。修正效果如下所示:
[0077]
修正前子帧编号:1、2、3、4、5、6、7、8、9、10、12、14、16;
[0078]
修正后子帧编号:1、2、3、4、5、6、7、8、9、10、11、12、13。
[0079]
2、包含时间参数的情况,根据时间和子帧编号进行连续性判断。
[0080]
a)找出连续的数据段
[0081]
根据子帧编号和时间,找出连续的数据段。只有子帧编号和时间都连续的数据,才作为连续的数据段。
[0082]
b)前部不连续数据处理
[0083]
前部不连续段的数据,直接进行子帧编号和时间的修正,将子帧编号和时间,修正为连续的数据。不进行补帧。修正效果如下所示
[0084]
修正前子帧编号:1、3、5、7、8、9、10、11、12、13、14、15、16;
[0085]
修正前子帧时间:2s、4s、6s、7s、8s、9s、10s、11s、12s、13s、14s、15s、16s;
[0086]
修正后子帧编号:6、7、8、9、10、11、12、13、14、15、16。
[0087]
修正后子帧时间:6s、7s、8s、9s、10s、11s、12s、13s、14s、15s、16s;
[0088]
c)中部不连续数据处理
[0089]
第一步,按照时间和子帧编号递增,修正不连续段的时间和子帧编号;
[0090]
·
中间没有包含任何子帧对于这种情况,不会对不连续处的时间数据和子帧编号进行修改。
[0091]
·
中间包含有一个或者多个子帧,将不连续段的时间和子帧编号,进行连续性修正。补帧效果如下所示
[0092]
修正前子帧编号:7、8、9、11、12、16、10、11、12、13、14、15、16;
[0093]
修正前子帧时间:7s、8s、9s、10s、29s、41s、42s、43s、44s、45s、46s、47s;
[0094]
修正后子帧编号:7、8、9、10、9、10、11、12、13、14、15、16;
[0095]
修正后子帧时间:7s、8s、9s、10s、41s、42s、43s、44s、45s、46s、47s。
[0096]
第二步,判断修正后的子帧编号是否连续,如果不连续,则进行补帧。
[0097]
·
处理后,子帧编号变连续了,修正以后,不需要进行补帧。
[0098]
·
处理后,子帧编号不连续且前面的子帧编号比后面的子帧编号小这说明发生了丢帧的情况,需要补帧。补帧以保证主帧的完整性为目标,在两个子帧编号之间进行补帧,补帧数据与前帧相同。补帧以后,不考虑时间的连续性。
[0099]
·
处理后,子帧编号不连续且前面的子帧编号大于等于后面的子帧编号这说明丢帧最少发生在两个主帧之间,需要补帧。补帧以保证主帧的完整性为目标,在两个子帧编号之间进行补帧,补帧与后帧相同。补帧以后,不考虑时间的连续性。补帧效果如下所示
[0100]
修正后子帧编号:7、8、9、10、9、10、11、12、13、14、15、16;
[0101]
修正后子帧时间:7s、8s、9s、10s、41s、42s、43s、44s、45s、46s、47s。
[0102]
补帧后子帧编号:7、8、9、10、
……
、16、1
……
16、1、
……
8、9、10、11、12、13、14、15、16;
[0103]
补帧后子帧时间:7s、8s、9s、10s
……
16s、17s
……
32s、33s
……
40、41s、42s、43s、44s、45s、46s、47s。
[0104]
d)尾部不连续数据处理
[0105]
尾部不连续段的数据,直接进行时间和子帧编号的连续性修正。不进行补帧。
[0106]
修正前子帧编号:1、2、3、4、5、6、7、8、9、10、12、14、16;
[0107]
修正前子帧时间:1s、2s、3s、4s、5s、6s、7s、8s、9s、10s、11s、13s、15s;
[0108]
修正后子帧编号:1、2、3、4、5、6、7、8、9、10、11;
[0109]
修正后子帧时间:1s、2s、3s、4s、5s、6s、7s、8s、9s、10s、11s。
[0110]
获取帧数据。帧数据是指一个子帧的数据,获取过程为:读取200kbyte的数据,通过查找帧标识的方法,判断文件类型;读取全部的数据,根据前一个步骤获得的文件类型,对数据进行处理;查找帧标识,保存每一个帧的源码数据。解码每一帧时,对当前帧包含的每一个输出参数进行循环解码,将解码结果保存到输出参数关联的变量中。
[0111]
解码结果合并。所有分块解码完毕,进行解码结果合并。解码结果文件格式及描述文件的格式与各分块结果的格式一致。进行合并时,顺序号重新编号。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1