法律状态公告日
法律状态信息
法律状态
2019-11-08
授权
授权
2016-10-26
实质审查的生效 IPC(主分类):H04L29/06 申请日:20160427
实质审查的生效
2016-09-28
公开
公开
技术领域
本发明涉及一种基于编译器的ASN.1编解码方法,尤其涉及一种ASN.1受约束整数非对齐紧缩编码编解码方法。
背景技术
ASN.1文法所定义的数据类型在应用中需要进行编译,产生目标平台数据类型的描述数据,编解码器通过读取这些描述数据,对PDU码流或目标平台的数据内存进行解码或编码。
具体实现方式如图1所示,编译器对ASN.1文件的编译和编解码库是相互独立的,一般来说,编译器产生一个数据库文件,提供给需要进行编解码的程序,编解码完全独立于ASN.1文件的具体定义,其编解码的规则完全与数据类型描述数据库无关,但是它在编解码时需要获取数据描述,然后引用相应的规则,在目标平台的PDU数据内存和ASN.1码流之间进行转换。
ASN.1支持多种编码方式,其中非对齐紧缩编码(UPER)较为常见。在某些场景中,编解码库的运行效率至关重要,例如在LTE RRC的实施中,某些情况下需要消息从基站发出,到收到UE的回复的时间不能超过1ms,而UE除了要进行基站消息的解码外,还需要进行消息的处理,然后对回复消息进行编码并发出。
在UPER编码规则中,有一类整数格式共享相同的编码方式,假设目标整数n受到上限ub和下限lb的约束,ub>lb,且ub和lb均为确定有限整数值,则该整数n被称为受约束的整数。
令range=ub–lb+1,则编码规则如下所述:
将整数“n–lb”以二进制方式编码到固定数量的bit位中,该数量由ub和lb确定,方法为:如果range满足2m<range<2m+1,则,m+1为目标码流中所占位数。
采用这种编码方式的场合有:
1、受约束的INTEGER类型编码;
2、定义了ub的OCTET STRING/BIT STRING/SEQUENCE OF/SET OF类型的长度因子编码;
3、CHOICE类型的选择项序号编码;
4、ENUMERATED类型的基本枚举项编码。
在实际应用中,这些场景出现的频次极高。考虑到编码长度不因编码值而变化,而是取决于lb和ub的值(也就是ASN.1文件),如果按照UPER的编码规则去做,每次都需要进行所占位数值的计算,则会大量执行重复的操作。
因此,对编码和解码尤其是非对齐紧缩编码(UPER)进行执行速度的优化,成为亟待解决的一个问题。
发明内容
为解决上述技术问题,本发明的目的是提供一种有效加快对受约束整数非对齐紧缩编码的编码和解码执行速度的ASN.1编译器的编解码方法。
本发明第一方面提供一种ASN.1受约束整数非对齐紧缩编码编解码方法,包括以下步骤:
S1、ASN.1编译器获得目标受约束整数n的上限值ub和下限值lb;
S2、ASN.1编译器计算获取满足不等式2m<ub-lb+1<2m+1成立的整数m,并定义m+1为n在码流中的编码比特数;
S3、将n的编码比特数连同其属性一并输出至数据库中;
S4、目标平台从数据库获得n在码流中的编码比特数m+1,进行编码和解码,其中:
编码,将n–lb的值编码至编码比特数为m+1的码流中;
解码,从码流中取出m+1比特,得到其所代表的整数值k,则k+lb即是受约束整数n的值。
进一步的,通过ASN.1编译器的词法和语法分析,获得目标受约束整数n的上限值ub和下限值lb。
进一步的,所述受约束整数n的属性包括其上限值ub和下限值lb。
进一步的,所述编译器为32位或64位编译器。
进一步的,所述编译器通过C语言中的二分法来获得n在码流中的编码比特数m+1。
进一步的,所述编译器通过汇编语言中的bsrl指令来获得n在码流中的编码比特数m+1。
本发明第二方面提供前述ASN.1受约束整数非对齐紧缩编码编解码方法,在采用ASN.1UPER编码规则的语法定义中的应用,其中语法定义尤其包括LTERRC协议。
借由上述方案,本发明至少具有以下优点:有效加快对受约束整数非对齐紧缩编码的编码和解码执行速度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1是现有技术中基于编译器的ASN.1编解码方法的流程图;
图2是本发明中基于编译器的ASN.1编解码方法的流程图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
实施例一
参见图2,本发明一较佳实施例所述的一种ASN.1受约束整数非对齐紧缩编码编解码方法,包括以下步骤:
S1、ASN.1编译器获得目标受约束整数n的上限值ub和下限值lb;
S2、ASN.1编译器计算获取满足不等式2m<ub-lb+1<2m+1成立的整数m,并定义m+1为n在码流中的编码比特数;
S3、将n的编码比特数连同其属性一并输出至数据库中;
S4、目标平台从数据库获得n在码流中的编码比特数m+1,进行编码和解码,其中:
编码,将n–lb的值编码至编码比特数为m+1的码流中;
解码,从码流中取出m+1比特,得到其所代表的整数值k,则k+lb即是受约束整数n的值。
其中,可以通过ASN.1编译器的词法和语法分析,获得目标受约束整数n的上限值ub和下限值lb。
受约束整数n的属性应包括但不限于其上限值ub和下限值lb。
编译器为32位或64位编译器。
编译器对于n在码流中的编码比特数m+1的获得,可以通过两种方式实现,其一,通过C语言中的二分法来获得,其二,通过汇编语言中的bsrl指令来获得。
实施例二
以LTE RRC的PDSCH-ConfigCommon的referenceSignalPower定义为例,其语法定义为:
从定义得知referenceSignalPower是一个受约束整数,其上限ub为50,下限lb为-60,则在编译时刻计算其所占码流长度。考虑到不等式2m<range<2m+1成立的条件在实质上是计算表达ub–lb所需的最少bit数,也就是ub–lb的二进制表达中,最高位的1所在的比特序号。在此处,ub–lb=110,二进制表达为:1101110,最高位的1的序号为7,也就是说需要7位来存储referenceSignalPower,那么我们将数值7连同其他信息一起输出到数据库中,编解码器进行编解码时就直接从数据库中获取所占比特长度7,然后对7位码流进行编解码即可。
实施例三
本实施例提供32位编译平台上两种计算n在码流中的编码比特数m+1的算法,下文中输入参数data即为ub-lb的值:
1、以纯C语言实现,该算法以二分法来查找目标数data的二进制表达中,最高位的1所在的比特序号:
2、若编译器所运行的系统平台支持bsrl指令,则可以通过下面的算法实现:
以上所述仅是本发明的优选实施方式,并不用于限制本发明,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。
机译: 支持各种帧大小的整数编码方法和实现该方法的编解码器
机译: 支持一种编码整数1的方法,并实现了该方法的编解码器
机译: 支持各种帧大小的整数编码方法和实现该方法的编解码器