没有合适的资源?快使用搜索试试~ 我知道了~
首页ASN-PER编码规范.pdf
3GPP 的规范中,由 ASN.1 到传输码的转换统一使用定义在 ITU-T X.691 中的 PER (Packed Encoding Rules)规则,因此这里讲的 ASN 编译码规则也就是 ASN 编码中的 PER 编译码规则。 PER 有两个变体:对齐方式和非对齐方。对齐方式用于:Iub、Iur、Iu 接口的ASN.1 的 传输编码。非对齐方式:仅用于空中(UU)接口的 ASN.1 转换,两者的编码过程基本相同。 在对齐的方式下,若前面所有单元的信息经编码后得到的比特流长度不是一个八位组的 倍数,而后一个信息又是以八位组为单位的(字符串),那么就需要在前面生成的比特流后 面补“0”,使其长度为 8 的倍数。所以一般补的位数为 0~7bit。而非对齐的方式无此限制。 所有信息单元按编码规则生成的比特数据将按其被编码的顺序首尾相连,中间不需要任何填 充。按 ITU-T X.691 的规定,若最终的编码结束后。所得的编码不是 8 的倍数,信息编码结 束后的填充由 RRC 负责。
资源详情
资源评论
资源推荐

ASN.1 编码规范及实现方式
一、 ASN.1 语言概述
ASN.1(Abstract Syntax Notation Number One),抽象语法描述 1,是一种 ISO/ITU-T
标准。该语言描述了一种对数据进行表示、编码、传输和解码的数据格式,它提供的一整套
正规的格式用于描述对象的结构,具有类似于面向对象程序设计语言中所提供的类型机制,
可定义任意复杂结构的数据类型,而不同的数据类型之间还可以有继承的关系。因此,ASN.1
是以一种独立于计算机架构和语言的方式来描述数据结构的。同时,ASN.1 的描述可以容
易地映被射成 C 、C++ 或 Java 的数据结构,直接作为应用程序代码使用,并得到运行程
序库的支持。
ASN.1 作为一种数据表示标准产生于 20 世纪 80 年代早期的开放系统互联(OSI)网络模
型,虽然 OSI 模型并没有得到广泛的应用,但是 ASN.1 标准在继续进化。今天已有大量的
实际应用,这些应用包括:3G 移动系统、IP 语音、安全应用、传统电信网络、军事和空间
应用等许多方面。
另外,ASN.1 有多种标准化编码规则:如基本编码规则(BER)、规范编码规则(CER)、
识别名编码规则(DER)、压缩编码规则(PER)和 XER 编码规则(XER)。这些编码规
则描述了如何对 ASN.1 中定义的数值进行编码,以便用于传输,而与计算机、编程语言或
它在应用程序中如何表示等因素无关。同时,该编码具有先进的标识系统、信息扩展性、支
持快速可靠传输等特点,这在无线传输中是一种优势。
因此,ASN.1 不但适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构,
而且还有适合的协议编码方式。同时,3GPP 标准 ASN.1 文档中也包含了完整、详细的数据
单元(PDU)协议。这些都为 3G 移动系统中 ASN.1 的应用打下了基础。3G 协议的 ASN 编
码跟一般的编码相比具有高效性、严谨性以及规范性等特点。
二、PER 编码简介
3GPP 的规范中,由 ASN.1 到传输码的转换统一使用定义在 ITU-T X.691 中的 PER
(Packed Encoding Rules)规则,因此这里讲的 ASN 编译码规则也就是 ASN 编码中的 PER
编译码规则。
PER 有两个变体:对齐方式和非对齐方。对齐方式用于:Iub、Iur、Iu 接口的 ASN.1 的
传输编码。非对齐方式:仅用于空中(UU)接口的 ASN.1 转换,两者的编码过程基本相同。
在对齐的方式下,若前面所有单元的信息经编码后得到的比特流长度不是一个八位组的
倍数,而后一个信息又是以八位组为单位的(字符串),那么就需要在前面生成的比特流后
面补“0”,使其长度为 8 的倍数。所以一般补的位数为 0~7bit。而非对齐的方式无此限制。
所有信息单元按编码规则生成的比特数据将按其被编码的顺序首尾相连,中间不需要任何填
充。按 ITU-T X.691 的规定,若最终的编码结束后。所得的编码不是 8 的倍数,信息编码结
束后的填充由 RRC 负责。
另外,PER 编译码必须依赖于 3GPP 的标准文档,也就是说,收发双方也必须知道层 3
消息的具体结构,这样编码和译码的才能被编译和识别。
三、PER 的编码规则
PER 的编码规则定义了多种数据类型,简单的地可分为两大类。第一类是结构类,如
CHOICE、 SEQUENCE 、ENUMERATED 等。另一类是简单类,如 INTEGER、 REALL 、
BOOLEAN 等。下面将对以下常用的类型的编码规则做一个总结:
3.1 INTEGER

整型是协议规范中用得最多的一种数据类型。对这种数据类型编码之前,首先要确定其
取值范围,即上下界之间的数的个数。而编码的长度是根据数的范围来确定的。当 2
m
<范
围≤2
m+1
时,对该整数取值用 m+1 位二进制表示。但对范围内的数的编码不是对其实值而是
对其索引值进行编码,编码的索引值是从 0 开始的。
例 1:
TimeslotNumber ::= INTEGER (0..14)
上面的例子中 TimeslotNumber 为整型,范围是 0~14 共 15 个数,因为 2
3
<15<2
4,
故编码
为 4bit,若取值为 7,则编码为 0111。
例 2:
MaxAllowedUL-TX-Power ::= INTEGER (-50..33)
同理,MaxAllowedUL-TX-Power 为整型,范围是-50~33 共 84 个数,2
6
<84<2
7
编码
长度为 7bit,若取值为 0,则编 0 的索引值 50(-50 的索引值为 0),因此编码为:0110010。
3.2 BOOLEAN
布尔逻辑型编码只须 1bit。用“1”表示 TRUE,“0”表示 FALSE。
例:DL-TM-RLC-Mode ::= SEQUENCE
{
segmentationIndication BOOLEAN
}
上面的 segmentationIndication 是一个 BOOLEAN 型,意思是段的指示。当我们需要这
种指示时编码为 1,不需要时编码为 0。
3.3 BITSTRING
比特串的编码分成两种情况:长度固定:直接将比特串与前面的比特流叠加即可;长度
可变:按前述整型编码的规则,以描述长度范围最少比特的原则在比特串前面加上用于描述
长度所需的比特,然后将待编码的比特串加在后边。
例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 位是该比特串的值)。
3.4 OCTETSTRING
八位组串编码的原则与比特串相同。分成长度可变的八位串和长度不可变的八位串两
种。与比特串编码不同的是编码的值是八位串而不是比特串。
例:
VALUE ::= OCTETSTRING(SIZE(1..8))
若 VALUE 值是长度为 3 的八位串,则编码为:010,后面跟着 3 个因为长度区间为八,
所以长度编码 L 为 3 位,而 3-b
min
=2。因此编码为 010。后面则跟着 3 个八位组如:00000000
11111111 00000000 。

3.5 CHARACTER STRINGS
字符串的编码方式有多种情况的编码方式与 BITSTRING 和 OCTETSTRING 的编码方
式类似,只是对不同类型的字符串有不同的编码方法,下面将着重说明 CHARACTER
STRINGS 中常用的 NumricString、PrintableString、NameString 的编码方法:
① NumricString 类型中成员为 0~9,共十个数。因此在编码时长度可定为
4bit(2
3
<10<2
4
).,因此此种类型的串编码是每个数字编为 4 比特。
同理,PrintableString 中包含的字符为:“a..z”、“A..Z”、 “0..9”、“space”、“,”、“(”、
“)”,“+”、“、”、“-”、“/”、“.”、“=”、“?”、“:”共 74 个字符,每个字母应编码为 7 比
特。NameString 共 52 个大小写字母,每个字母编码则为 6bit。
②
NumricString 123 的编码为: 0001 0010 0011。
NameString “cat”编码为: 011100 011010 100010,上面每个字母编 6 比特,每
个字母的值是其在 NameString 中的索引值。
3.6 NULL
NULL 类型不用编码。
3.7 ENUMERATED
枚举型的编码类似于整型,也是以描述枚举内全体成员所需比特数最少的原则进行编
码。其值的范围从 0 开始。枚举类型编码时,只对其项的索引值编码。
例:
Modulation ::= ENUMERATED
{
mod-QPSK ,
mod-8PSK
}
上面是一个 Modulation 是枚举类型,编码时,首先看枚举项的个数为 2,2
1
=2,因此
编码为 1bit,当选 mod-QPSK 调制模式时编码为 0,选 mod-8PSK 调制模式时编码为 1。
3.8 CHOICE
选择型的编码类似于整型,以最少的比特来描述选择体内各成员的索引值。值的范围从
0 开始。与枚举不同的是,编完 CHOICE 的索引值,紧接着就应编码索引值对应的单元。而
枚举型将索引值编完后就结束。下面将以一个例子对这种类型的编码进行说明:
例:
NumberOfTransportBlocks::= CHOICE
{
zero NULL,
one NULL,
small INTEGER (2..17),
large INTEGER (18..512)
}
NumberOfTransportBlocks 是一个选择类型,若信息传输块的个数为 16,则应该选择
CHOICE 的 small 项,然后在对该项值进行编码。首先 CHOICE 里有 4 项,编码为 2bit,small
剩余11页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0