_ASN_PER编码规范
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
整型是协议规范中用得最多的一种数据类型。对这种数据类型编码之前,首先要确定其 取值范围,即上下界之间的数的个数。而编码的长度是根据数的范围来确定的。当 2m<范 围≤2m+1 时,对该整数取值用 m+1 位二进制表示。但对范围内的数的编码不是对其实值而是 对其索引值进行编码,编码的索引值是从 0 开始的。
{
zero
NULL,
one
NULL,
small
INTEGER (2..17),
large
INTEGER (18..512)
} NumberOfTransportBlocks 是一个选择类型,若信息传输块的个数为 16,则应该选择
CHOICE 的 small 项,然后在对该项值进行编码。首先 CHOICE 里有 4 项,编码为 2bit,small
3.8 CHOICE 选择型的编码类似于整型,以最少的比特来描述选择体内各成员的索引值。值的范围从
0 开始。与枚举不同的是,编完 CHOICE 的索引值,紧接着就应编码索引值对应的单元。而 枚举型将索引值编完后就结束。下面将以一个例子对这种类型的编码进行说明:
例:
NumberOfTransportBlocks::= CHOICE
二、PER 编码简介
3GPP 的规范中,由 ASN.1 到传输码的转换统一使用定义在 ITU-T X.691 中的 PER (Packed Encoding Rules)规则,因此这里讲的 ASN 编译码规则也就是 ASN 编码中的 PER 编译码规则。
PER 有两个变体:对齐方式和非对齐方。对齐方式用于:Iub、Iur、Iu 接口的 ASN.1 的 传输编码。非对齐方式:仅用于空中(UU)接口的 ASN.1 转换,两者的编码过程基本相同。
因此,ASN.1 不但适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构, 而且还有适合的协议编码方式。同时,3GPP 标准 ASN.1 文档中也包含了完整、详细的数据 单元(PDU)协议。这些都为 3G 移动系统中 ASN.1 的应用打下了基础。3G 协议的 ASN 编 码跟一般的编码相比具有高效性、严谨性以及规范性等特点。
① NumricString 类型中成员为 0~9,共十个数。因此在编码时长度可定为 4bit(23<10<24).,因此此种类型的串编码是每个数字编为 4 比特。
同理,PrintableString 中包含的字符为:“a..z”、“A..Z”、 “0..9”、“space”、“,”、“(”、 “)”,“+”、“、”、“-”、“/”、“.”、“=”、“?”、“:”共 74 个字符,每个字母应编码为 7 比 特。NameString 共 52 个大小写字母,每个字母编码则为 6bit。
modulation 选择mod-QPSK,编码为0;
ss-TPC-Symbols 为空类型,不用编码
综上可得:该结构编码为100 0101 1 0
3.10 SEQUENCE(SIZE(ib..ub))OF component SEQUENCE OF 在 ASN.1 描述中用作循环。循环次数由 SIZE 确定。SEQUENCE OF 的前 导比特为 SIZE 中数的范围,编码规则与整数型相同。紧跟在前导比特之后的是循环体成员 component 的编码,component 可以是结构也可以是一个整型的参数。各成员编码后顺序放 置,每两个成员之间编码值不需分隔符,该类型对应于 C 语言中的数组。下面将以一个例 子来说明:
modulation
ENUMERATED { mod-QPSK, mod-8PSK },
ss-TPC-Symbols
NULL ,
additionalSS-TPC-Symbols
INTEGER(1..15)
OPTIONAL
}
上面是一个SEQUENCE结构编码时我们分两步进行:
① 确定其前导位图.
该结构中有3个可选项,故可确定位图长度为3bit。我们根据需要选择其中的项,若某
所以长度编码 L 为 3 位,而 3-bmin=2。因此编码为 010。后面则跟着 3 个八位组如:00000000 11111111 00000000 。
Baidu Nhomakorabea
3.5 CHARACTER STRINGS 字符串的编码方式有多种情况的编码方式与 BITSTRING 和 OCTETSTRING 的编码方
式类似,只是对不同类型的字符串有不同的编码方法,下面将着重说明 CHARACTER STRINGS 中常用的 NumricString、PrintableString、NameString 的编码方法:
例1:
RoutingParameter ::= BIT STRING (SIZE (10)) 上面的 RoutingParameter 是一个定长,且长度为 10 的比特串,编码时直接给出 10 位二 制数,例如编码为:‘1111100000’。 例 2:
SIB-Data-variable ::= BIT STRING (SIZE (1..214)) SIB-Data-variable 是一个变长的比特串,编码之前首先编长度,因为长度的范围为 1~ 214 共需要编 8 比特,因此若 SIB-Data-variable 是一个 5 位的比特串时则编码为:00000100 11111(前面 8 位是比特串长度的编码,后面 5 位是该比特串的值)。
在对齐的方式下,若前面所有单元的信息经编码后得到的比特流长度不是一个八位组的 倍数,而后一个信息又是以八位组为单位的(字符串),那么就需要在前面生成的比特流后 面补“0”,使其长度为 8 的倍数。所以一般补的位数为 0~7bit。而非对齐的方式无此限制。 所有信息单元按编码规则生成的比特数据将按其被编码的顺序首尾相连,中间不需要任何填 充。按 ITU-T X.691 的规定,若最终的编码结束后。所得的编码不是 8 的倍数,信息编码结 束后的填充由 RRC 负责。
码。其值的范围从 0 开始。枚举类型编码时,只对其项的索引值编码。 例: Modulation ::= ENUMERATED { mod-QPSK , mod-8PSK } 上面是一个 Modulation 是枚举类型,编码时,首先看枚举项的个数为 2,21=2,因此
编码为 1bit,当选 mod-QPSK 调制模式时编码为 0,选 mod-8PSK 调制模式时编码为 1。
为第 3 项编码值为 2,选择项编码为:10。然后再对 small 项编码,因为取值为 16,索引值 为 14,整数范围是 2~17 共 16 个数,要编 4 比特,因此要对索引值 14 编 4 比特,即编码 为:1110。
3.9 SEQUENCE
一般说来,序列编码后都会产生一个前导位图,用以指示序列中的可选项或缺省项是否
存在。每以可选项(或缺省项)用 1bit 来指示,“1”表示存在,“0”表示不存在。若一
个序列型中包含 n 个标注为可选(或缺省)的成员,那么,前导位图的长度就是 n bit。位
图中的比特顺序与序列中各可选(或缺省)的成员排列一致。然后再对 SEQUENCE 中的各
成员进行编码,这种类型对应于 C 语言中的结构。下面将以实例来说明:
ASN.1 作为一种数据表示标准产生于 20 世纪 80 年代早期的开放系统互联(OSI)网络模 型,虽然 OSI 模型并没有得到广泛的应用,但是 ASN.1 标准在继续进化。今天已有大量的 实际应用,这些应用包括:3G 移动系统、IP 语音、安全应用、传统电信网络、军事和空间 应用等许多方面。
另外,ASN.1 有多种标准化编码规则:如基本编码规则(BER)、规范编码规则(CER)、 识别名编码规则(DER)、压缩编码规则(PER)和 XER 编码规则(XER)。这些编码规 则描述了如何对 ASN.1 中定义的数值进行编码,以便用于传输,而与计算机、编程语言或 它在应用程序中如何表示等因素无关。同时,该编码具有先进的标识系统、信息扩展性、支 持快速可靠传输等特点,这在无线传输中是一种优势。
例 1:
TimeslotNumber ::=INTEGER (0..14) 上面的例子中 TimeslotNumber 为整型,范围是 0~14 共 15 个数,因为 23<15<24,故编码 为 4bit,若取值为 7,则编码为 0111。 例 2:
MaxAllowedUL-TX-Power ::= INTEGER (-50..33) 同理,MaxAllowedUL-TX-Power 为整型,范围是-50~33 共 84 个数,26<84<27 编码
另外,PER 编译码必须依赖于 3GPP 的标准文档,也就是说,收发双方也必须知道层 3 消息的具体结构,这样编码和译码的才能被编译和识别。
三、PER 的编码规则
PER 的编码规则定义了多种数据类型,简单的地可分为两大类。第一类是结构类,如 CHOICE、 SEQUENCE 、ENUMERATED 等。另一类是简单类,如 INTEGER、 REALL 、 BOOLEAN 等。下面将对以下常用的类型的编码规则做一个总结: 3.1 INTEGER
长度为 7bit,若取值为 0,则编 0 的索引值 50(-50 的索引值为 0),因此编码为:0110010。
3.2 BOOLEAN
布尔逻辑型编码只须 1bit。用“1”表示 TRUE,“0”表示 FALSE。
例:DL-TM-RLC-Mode ::=
SEQUENCE
{
segmentationIndication
② NumricString 123 的编码为: 0001 0010 0011。 NameString “cat”编码为: 011100 011010 100010,上面每个字母编 6 比特,每 个字母的值是其在 NameString 中的索引值。
3.6 NULL NULL 类型不用编码。
3.7 ENUMERATED 枚举型的编码类似于整型,也是以描述枚举内全体成员所需比特数最少的原则进行编
BOOLEAN
} 上面的 segmentationIndication 是一个 BOOLEAN 型,意思是段的指示。当我们需要这
种指示时编码为 1,不需要时编码为 0。
3.3 BITSTRING 比特串的编码分成两种情况:长度固定:直接将比特串与前面的比特流叠加即可;长度
可变:按前述整型编码的规则,以描述长度范围最少比特的原则在比特串前面加上用于描述 长度所需的比特,然后将待编码的比特串加在后边。
项选择了编码位图为1,否则为0。假设我们选择了timeslotNumber而其它项都不选的话,则
在对结构内部编码之前应编码为:100
② 根据SEQUENCE结构内部的项,从上到下依次编码。
TimeslotNumber 取值为6,则编码为0101;
tfci-Existence 存在TFCI指示,则编码为1;
IndividualTimeslotInfo-LCR::= SEQUENCE
{
timeslotNumber
INTEGER(1..15)
OPTIONAL,
tfci-Existence
BOOLEAN,
midambleShiftAndBurstType
MidambleShiftAndBurstType-LCR OPTIONAL,
ASN.1 编码规范及实现方式
一、ASN.1 语言概述
ASN.1(Abstract Syntax Notation Number One),抽象语法描述 1,是一种 ISO/ITU-T 标准。该语言描述了一种对数据进行表示、编码、传输和解码的数据格式,它提供的一整套 正规的格式用于描述对象的结构,具有类似于面向对象程序设计语言中所提供的类型机制, 可定义任意复杂结构的数据类型,而不同的数据类型之间还可以有继承的关系。因此,ASN.1 是以一种独立于计算机架构和语言的方式来描述数据结构的。同时,ASN.1 的描述可以容 易地映被射成 C 、C++ 或 Java 的数据结构,直接作为应用程序代码使用,并得到运行程 序库的支持。
3.4 OCTETSTRING 八位组串编码的原则与比特串相同。分成长度可变的八位串和长度不可变的八位串两
种。与比特串编码不同的是编码的值是八位串而不是比特串。 例: VALUE ::= OCTETSTRING(SIZE(1..8)) 若 VALUE 值是长度为 3 的八位串,则编码为:010,后面跟着 3 个因为长度区间为八,