一种船舶AIS数据大批量高效解码方法及系统与流程

文档序号:11731956阅读:320来源:国知局
一种船舶AIS数据大批量高效解码方法及系统与流程
本发明涉及计算机多核cpu的并发运算技术运用与船舶ais数据解码
技术领域
,特别涉及一种船舶ais数据大批量高效解码方法及系统。
背景技术
:船舶自动识别系统(automaticidentificationsystem,简称ais系统)由岸基设施(基站)和船载设备共同组成,是一种新型的集网络技术、现代通讯技术、计算机技术、电子信息显示技术为一体的数字助航系统和设备。船舶自动识别系统(ais)由舰船飞机之敌我识别器发展而成,配合全球定位系统(gps)将船舶经纬度、船舶速度、改变航向率及航向等船舶动态信息结合船名、呼号、吃水及危险货物等船舶静态资料由甚高频(vhf)频道向附近水域船舶及岸台广播,使邻近船舶及岸台能及时掌握附近海面所有船舶之动静态资讯,得以立刻互相通话协调,采取必要避让行动,对船舶安全有很大帮助。全世界各类安装ais设备的船舶有39万条以上,每条正常运营的船舶都在不断向外发布ais数据,每天能产生过亿条ais数据。对船舶ais数据的利用不仅仅可以实现海事管理等功能,还可以为码头、船公司、物流企业等提供航线运力、港口服务能力评估等一系列的经济报告。ais系统报文数据遵循itu-rm.1371和iec61162标准进行编码,它采用可打印ascii字符码进行传输和保存,并且可以把长信息分割成多条语句进行发送。如图1所示,ais报文由多个域组成,每个域可以是一串有效字符或者空字符,各个域之间以“,”为分隔符。第一个域“!abvdm”为地址域,由语句起始符($或!)和5个字母组成,主要用来表示语句的类型。域“x1”表示消息分解的报文总数(1-9),域“x2”表示本报文的序号(1-9),域“x3”表示连续消息标识(0-9),域“a”表示ais信道号,域“n”表示报文类型的id码,域“ssss…sss”表示符合itu-rm.1371规定的无线电信息,域“m”表示填充的bit数,域“hh”表示校验信息。图2所示是常见的ais报文数据,其中最后2条数据即为一条长信息分割为2条报文发送的结果。第1条报文的“x1”域为2、“x2”域为1表明这条信息总共分成2条报文,这是第1条;第2条报文的“x1”域为2、“x2”域为2表明这条信息总共分成2条报文,这是第2条报文同时也是这条信息的最后一条报文,这样的报文数据解码时要保持原来的顺序。一般的报文数据解码方式是按照时间顺序逐条解码,但在面对海量的ais数据时,这种方法的速度十分缓慢无法满足实际需要,如果直接在多核cpu计算机上并行运行解码程序,不能保证被分割过的长信息解码顺序符合要求,进而会造成解码数据错误。因此,如何准确按照标准对海量ais数据进行大批量高效解码就成为了一个重要的问题。技术实现要素:本发明的目的是提供一种船舶ais数据大批量高效解码方法及系统,该方法及系统提供筛选和转换ais报文的功能,解码时可选择27种ais报文中的若干种,能充分利用计算机多核cpu的并行计算能力,达到较高解码效率。本发明提供了一种船舶ais数据大批量高效解码方法,其包含以下步骤:对内存中留存的ais报文进行筛选、二进制转码和二进制解码;通过筛选,将报文按照多条信息报文和单条信息报文分类:对于多条信息报文,串行筛选出多条信息报文中的多条子报文的信息,串行进行二进制转码;对于单条信息报文,并行筛选出单条信息报文的信息,并行进行二进制转码;对留存的所有报文进行循环处理,直至所有报文的筛选和二进制转码全部完成;将所有报文的二进制转码结果进行汇总,并行进行二进制解码,直至二进制解码任务全部完成。优选地,内存中的ais报文,是通过内存映射将目标报文的整个文件读入内存而得到的,使目标报文行的顺序不变。优选地,在筛选之前,先对内存中的ais报文进行过滤得到留存的报文;报文过滤时,先生成目标报文字符串;目标报文字符串中将需要留存的每个报文类型,以一个对应的ascii字符表示;再对内存中的每个ais报文提取表示其报文类型的id码,将id码能与目标报文字符串中任意一个ascii字符相匹配的ais报文留存在内存中;将id码无法与目标报文字符串中ascii字符匹配的ais报文丢弃。优选地,筛选和二进制转码过程为:对于内存中每个留存的报文,先读取该报文的报文总数域“x1”域,若“x1”域数值等于1,该报文为单条信息报文,直接将该报文加入单条报文信息集合c;如果所述报文总数域“x1”域数值大于1,该报文为多条信息报文,则根据该“x1”域数值提取该条报文的所有子报文,将该条报文的所有子报文分别转换成对应的二进制信息,按顺序进行拼接,将拼接完成的二进制信息报文加入二进制信息集合b;内存中留存的所有报文的二进制信息转换完成后,进行报文信息集合判断:如果集合c为空,直接将集合b作为结果集合输出;如果集合c不为空,建立并行任务将集合c内的单条信息报文转换成对应的二进制信息获得集合a,合并二进制信息集合a和二进制信息集合b,将合并后的结果作为结果集合输出。优选地,二进制转码是对报文信息进行逐个字符提取,转换成二进制字符串;若转换的二进制字符串不满6位,则在左侧补0直至补满6位作为拼接结果;若转换的二进制字符串满6位,则直接作为拼接结果,再进行后续字符的处理;循环进行直到所有字符处理完成,对拼接结果补充填充位和融合时间戳信息。优选地,在二进制转码前,对所有报文进行校验,若校验通过则提取时间戳信息和填充位信息。优选地,获得所有报文的二进制转码结果后,并行迭代进行二进制解码:先根据解码工作站cpu的物理核心数建立相应数量的并行二进制解码任务,再将所有报文的二进制转码结果分组并分配给各个二进制解码任务,并行进行每个二进制解码任务,汇总解码结果;循环进行,直至分配的所有二进制解码任务全部完成。优选地,每个二进制解码任务过程为:读取一条待解码的二进制信息,提取该二进制信息的前6位值,根据该二进制信息的前6位值选择相匹配的处理函数,将前6位以外的二进制数据送入相应处理函数,进行函数解码,得到解码结果。优选地,获得所有报文的二进制转码结果后,根据解码工作站cpu的物理核心数,建立相应数量的并行二进制解码任务,将所有报文的二进制转码结果分组并分配给各个二进制解码任务,进行并行的二进制解码过程。优选地,任意一个二进制解码任务的过程为:读取一条待解码的二进制信息,提取该二进制信息的前6位值,根据该二进制信息的前6位值选择相匹配的处理函数,将前6位值以外的二进制数据送入相应处理函数,进行函数解码,汇总解码结果;循环进行直至解码任务全部完成。优选地,任意一个报文文件的二进制解码的所有任务完成后,在第一存储器中并行保存解码结果,同时在第二存储器中读取下一个报文文件。本发明还提供了一种船舶ais数据大批量高效解码系统,它包含:卫星或者若干个岸基接收站,卫星或岸机接收站收集船舶ais报文;ais存储服务器,卫星或岸机接收站收集的ais报文,通过网络汇总到ais报文存储服务器进行存储;解码工作站,解码工作站与ais存储服务器连接,解码工作站采用上文所述的一种船舶ais数据大批量高效解码方法,对存储的ais报文进行处理;ais解码结果存储服务器,对解码工作站获得的最终解码结果进行存储。与现有技术相比,本发明有益效果是:(1)它采用内存映射方法读取内存文件,可提高读取速度,更能保证读入解码工作站内存的ais数据报文行顺序保持不变;(2)提供了筛选报文的功能,能充分利用计算机多核cpu的并行计算能力,按照正确标准对海量ais数据进行解码并能达到较高解码效率。附图说明图1ais报文格式示意图;图2常见的ais数据报文序列示意图;图3解码系统的ais报文数据获取、解码、保存示意图;图4并行解码整体工作模式示意图;图5单个报文文件解码流程示意图;图6报文过滤流程示意图;图7报文筛选和二进制转码流程示意图;图8单条报文二进制转换流程示意图;图9并行二进制解码任务执行流程示意图。具体实施方式本发明提供了一种船舶ais数据大批量高效解码方法及系统,为使本发明更明显易懂,下面结合附图与具体实施方式对本发明作进一步详细描述。本发明提供的一种船舶ais数据大批量高效解码方法及系统,如图3所示,卫星或者若干个岸基接收站收集到ais报文通过网络存储到ais存储服务器,ais存储服务器的报文传送到解码工作站进行解码。本发明提供的一种船舶ais数据大批量高效解码方法是先读取解码工作站接收到的报文文件,然后进行解码,最后保存解码结果。由于报文文件解码过程耗时较长,计算机cpu占用比率较高,因此采用并行解码的整体工作模式。图4是并行解码的整体工作模式示意图,采用内存映射方法,先读取数据文件1,然后解码数据文件1且并行解码。在前一个文件数据解码完成后,并行保存解码数据和读取下一个文件,以提高cpu利用率。解码结果文件与待解码的数据文件存放在不同的存储服务器上,以提高io速度。因大小为2gb左右的ais报文文件仍然比较大,则读取文件采用内存映射方法可提高读取速度。内存映射读取文件时直接建立整个文件的映射,以保证读入解码工作站内存的ais报文行顺序保持不变。图5是单个报文文件解码流程示意图,单个报文文件解码流程步骤为读取报文、解码和保存解码结果。读取报文过程是利用内存映射方法将目标报文文件读入内存。当目标报文文件读入系统工作站内存后,开始解码过程。筛选之前,先进行报文过滤。报文过滤是通过生成目标报文字符串来获取需要的报文类型,且生成目标报文字符串时每一个报文类型用一个ascii字符表示。报文过滤后,开始报文筛选,得到留存的所有报文,报文按多条信息报文和单条信息报文两类进行分类。对于多条信息报文,串行筛选出目标报文中的多条报文的信息,再建立串行任务1进行串行二进制转码合并报文;而对于单条信息报文,并行筛选出目标报文中单条报文的信息,再建立并行任务2进行二进制转码。目标报文中的所有多条信息报文和单条信息报文的筛选和转码过程均按照上述步骤循环进行,直至留存的所有报文的筛选和二进制转码任务全部完成,得到最终的二进制转码结果。将所有报文的二进制转码结果进行汇总,建立并行解码任务进行报文二进制解码,直至二进制解码任务全部完成。二进制解码的所有任务完成后,建立并行任务保存结果,同时读取下一个报文文件;上一个解码文件结果保存到存储器,新的解码工作继续进行,循环进行,直至获得最终的船舶ais报文解码结果文件。图5所述的单个ais报文文件的数据解码流程中除了多条报文信息筛选和二进制转码两个步骤串行运行,其余解码步骤均并行运行。图6是报文过滤流程示意图,本发明提供的一种船舶ais数据大批量高效解码方法为了得到留存报文,先进行报文过滤,即只解码需要的报文类型,生成目标报文字符串;报文过滤后,再进行报文筛选。每一个报文类型用一个ascii字符表示,例如需要解码1、2、3、5、18、19、24这七种报文信息,即忽略其它类型报文信息,生成的目标字符串type_str为“1235bch”,报文与字符对照表如下表1所示。表1报文类型与字符对照表报文类型对应字符报文类型对应字符报文类型对应字符1110:19c2211;20d3312<21e4413=22f5514>23g6615?24h7716@25i8817a26j9918b27k生成目标字符串后,通过读取ais报文来提取报文中的报文类型的id码(id码见图1所示的报文格式定义中“n”)。提取id码后,判断目标字符串中是否存在该id码;若存在,即该条报文是需要的,则留存报文;若不存在,即该条报文是不需要的,则丢弃报文;对所有报文进行循环进行处理,直至所有过滤任务全部完成。通过报文过滤来获取留存的所有报文,再按照多条信息报文和单条信息报文两类进行筛选,报文筛选后进行二进制转码。图7是报文筛选和二进制转码流程示意图,取一条留存报文,先读取报文的报文总数域“x1”域,如果“x1”域数值等于1,该报文为单条信息报文,将该报文加入单条报文信息集合c;如果报文总数域“x1”域数值大于1,该报文为多条信息报文,根据“x1”域值提取该条报文中的所有子报文,将该条报文的所有子报文分别转换成对应的二进制信息,按顺序依次进行拼接,得到拼接完成的二进制信息报文,加入二进制信息集合b。每条留存报文均按照上述步骤循环进行,直至留存的所有报文转换成二进制信息的任务全部完成。若集合c为空,直接将集合b作为结果集合输出;若集合c不为空,则建立并行任务将集合c内的报文转换成对应的二进制信息,获得结果集合a。最后将二进制信息集合a与二进制信息集合b合并,合并后的结果作为最终结果集合输出,从而完成留存的所有报文的筛选和二进制转码任务。图8是单条报文二进制转换流程示意图,每条报文进行二进制转换时,需要先对所有留存的报文进行校验,如校验通过,提取时间戳信息和填充位信息(信息所在位置如图1所示),再对报文进行二进制转码处理。二进制转码时,需要对报文信息逐个提取字符,将提取字符的ascii码减去48,若结果大于40则再减去8,再转换成二进制字符串。若转换的二进制字符串结果不满6位,在左侧补0直至补满6位作为拼接结果;若转换的二进制字符串满6位,直接作为拼接结果,再进行后续字符的处理。每个字符按照上述步骤循环进行,直到所有字符处理完成。最后将拼接结果补充填充位和融合时间戳信息,获得最终的二进制转换信息。完成留存的所有报文二进制转码结果后,并行迭代进行二进制解码,图9是并行二进制解码任务执行流程示意图。根据解码工作站cpu的物理核心数建立并行解码任务,任务数等于解码工作站cpu的物理核心数;然后将二进制转码结果按照任务数分组并分配各个任务,各个任务开始并行解码工作,汇总解码结果;循环进行,直至分配的所有二进制解码任务全部完成。每个二进制解码任务的过程为:每个二进制解码任务过程为:读取一条待解码的二进制信息,提取该二进制信息的前6位值,根据该二进制信息的前6位值选择相匹配的处理函数,将前6位以外的二进制数据送入相应处理函数,进行函数解码,得到解码结果。其中解码函数按照itu-rm.1371和iec61162的规定的格式进行解码。任意一个报文文件的解码任务全部结束后,并行进行解码数据的保存和下一个文件的读取工作。所有ais报文文件均按照上述解码流程循环进行,最终得到船舶ais报文解码结果文件。基于本发明提供的一种船舶ais数据大批量高效解码方法及系统,以下提供了ais报文数据解码测试优选示例。测试解码工作站为dellworkstationt7810,测试数据为ais基站收集的2010年1月至2010年3月期间65个中国东海某海域船舶ais报文数据文件,每个文件平均有24180435行ais报文,详细信息见下表2。表2测试用中国东海某海域船舶ais数据文件信息所有测试数据的平均测试结果如下表3所示,平均每秒读取485469.4行待解码ais报文,平均每秒解码22300.67行ais报文,平均每秒保存271780.8行解码结果。表3ais数据大批量高效解码方法与系统测试结果平均每秒读取平均每秒解码平均每秒保存解码结果485469.4行22300.67行271780.8行解码过程中,每秒平均过滤4650478.16行,每秒平均筛选2973562.81行,报文每秒平均二进制转换50662.74行,报文每秒平均二进制解码40729.9行,如表4所示。表4解码过程的4个主要步骤工作效率平均测试结果每秒平均过滤每秒平均筛选每秒平均转换二进制每秒平均二进制解码4650478.16行2973562.81行50662.74行40729.9行所有测试数据以单个数据文件为单位,统计各步骤处理效率最高的情况如表5所示,读取数据最快的文件是44号文件,读取速度为每秒1188609.446行;完整解码速度最快的是44号文件,解码速度为每秒32933.00488行;保存解码结果最快的是18号文件,每秒保存1353476.695行;过滤报文最快的是54号文件,每秒过滤报文15596112.87行;筛选报文最快的是29号文件,每秒筛选10753319.68行;报文转换二进制最快的文件是49号,每秒转换105492.1184行;二进制解码最快是28号文件,每秒解码60873.48984行。表5单个数据文件各工作步骤平均处理效率最高统计所属文件项目数据处理速度(行每秒)44最快读取文件1188609.44644最快解码报文32933.0048818最快保存解码结果1353476.69554最快过滤报文15596112.8729最快筛选报文10753319.6849最快报文转换二进制105492.118428最快二进制解码60873.48984尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1