CPR 编码是为提高ADS–B消息的传输效率而设计的,由于飞机在飞行时,正常情况下,表示经纬度的编码在较长的时间内高权重的位会保持不变,这样消息传输的效率就很低。而CPR编码方法通过对地球进行分区域的划分,然后对划分后的区域进行两种不同方式的编码,避免了高阶位的重复发送,在接收端通过比较不同类型的编码消息,得出位置信息,这样提高了传输效率。
2.CPR编码由于高比特位的码元不进行传送,使得一个编码可能会代表多个地球的多个位置,CPR编码通过使用两种略微不同的编码方式(奇编码和偶编码)来确定唯一的位置,只要接收到两种类型的编码消息,就可以确定没有被发送的高比特位,这样就可以唯一的确定后续消息代表的位置。
如上图所示。先将地球划分位不同的区域(Zone),分为经度Zone和维度Zone,单个维度Zone的尺寸由如下公式确定:
D
l
a
t
i
=
36
0
。
4
∗
M
Z
−
i
{
6.0
0
。
i
=
0
(偶编码)
6.1
0
。
i
=
1
(奇编码)
{Dlat_i} =frac{360^。}{4*MZ-i} left{ begin{aligned} {6.00^。} &&i= 0(偶编码) \ {6.10^。} &&i= 1(奇编码) end{aligned} \ right.
Dlati=4∗MZ−i360。{6.00。6.10。i=0(偶编码)i=1(奇编码)
其中NZ代表在赤道和南北两极之间的维度Zone的数量也就是说奇编码是近似6.1度,偶编码是精确的6度,如下图所示
根据技术标准中的CPR编码方式,不同的维度对应的经度Zone的尺寸是不同的,由下面公式给出:
D
l
a
t
i
=
36
0
。
4
∗
M
Z
−
i
{
36
0
。
[
N
L
(
R
l
a
t
i
)
−
i
]
N
L
(
R
l
a
t
i
)
−
i
>
0
36
0
。
N
L
(
R
l
a
t
i
)
=
0
{Dlat_i} =frac{360^。}{4*MZ-i} left{ begin{aligned} {360^。[NL(Rlat_i)-i] } &&NL(Rlat_i)-i> 0 \ {360^。}&&NL(Rlat_i)= 0 end{aligned} \ right.
Dlati=4∗MZ−i360。{360。[NL(Rlati)−i]360。NL(Rlati)−i>0NL(Rlati)=0
其中NL(x)代表x维度下经度的数量,如下公式所示:
在确定具体位置时,CPR算法又将每个Zone细分位不同数量的小区域,如上图所示,XZ和YZ共同觉得小区域的编号,每对编号即代表不同的小区域,对于用于
编码的比特位数Nb的规定如下:对空中位置编码Nb=17,对地面位置编码Nb=19,对于TCP
TCP+1位置的编码Nb=14.依据这样的规则就可以进行编码了,步骤如下:
(1) 根据CPR奇或偶形式确定维度Zone的尺寸;
(2) 用待编码的维度值依据如下公式得出YZ的值
(3) 由于YZ进行计算时有一定的舍入误差,将YZ代表的纬度值按照如下公式还原:
(4) 由Rlat来得到NL和Dlon,它们分别由之前的公式得到;
(5) 提取YZ和XZ的低位得到组后的编码结果,即:



