OTN中C*(t)的计算和数据在容器中的分布原理

2025-12-03 14:44:34

GMP (Generic Mapping Procedure,通用映射规程)是OTN (Optical Transport Network) 中用于将各种速率的客户信号(Client Signal)映射到OPUk(Optical Payload Unit)容器中的关键技术。

与传统的 AMP (Asynchronous Mapping Procedure) 相比,GMP 的最大特点是灵活高效,它不依赖固定的正/负码速调整位置,而是通过计算动态确定每帧携带的数据量,并将其均匀分散。

以下为您详细介绍$C_m(t)$值的计算原理数据在容器中的分布原理


一、 核心概念:什么是$C_m(t)$?

在GMP 中,$C_m(t)$是最核心的参数。


二、$C_m(t)$值的计算原理(产生逻辑)

$C_m(t)$ 的计算本质上是一个频率比较相位累加的过程。它的目的是保证映射后的数据流速率与客户侧输入速率保持一致。

1. 基本公式逻辑

在一个OPUk 帧周期 ($T_{server}$) 内,客户信号到达的比特数理论上是:

 

$$\text{Data}_{client} = f_{client} \times T_{server}$$

但是,由于 $f_{client}$和$f_{server}$ 都是模拟量且有波动,且数据必须以整数个实体 ($m$-byte) 传输,所以每帧传输的数量 $C_m(t)$会在两个整数之间跳变。

2. Sigma-Delta 算法(累加器模型)

GMP 使用类似Sigma-Delta 调制的算法来计算$C_m(t)$。想象一个“相位累加器”:

  1. 输入:客户时钟($f_{client}$) 和服务器时钟 ($f_{server}$) 的计数值。

  2. 累加: 每个服务器帧周期,计算客户侧积累了多少个 $m$-byte 的数据。

  3. 残余处理:

    • 如果累积的数据不是整数(例如 15230.4 个),整数部分 (15230) 变为当前的 $C_m(t)$发送出去。

    • 小数部分 (0.4) 也就是“相位误差”,会保留在累加器中,带入下一帧计算。

  4. 下一帧: 下一帧可能积累了 15230.4 + 0.4 = 15230.8,还是发 15230。再下一帧可能是 15230.8 + 0.4 = 15231.2,这时 $C_m(t)$就变成了15231

总结: $C_m(t)$的值通常在$Y$和$Y+1$两个整数之间变化,其平均值精确等于客户信号速率与服务器帧速率的比值。


三、 数据在容器中的分布原理(映射逻辑)

计算出这一帧要发多少个数据 ($C_m$) 后,接下来的问题是:这 $C_m$个数据块放在OPUk 净荷区的什么位置?

GMP 摒弃了 AMP 那种“固定位置存放数据,固定位置填充”的做法,而是采用均匀分散的策略,这对于降低抖动(Jitter)至关重要。

1. 容器结构

假设OPUk 的净荷区域总共有$P_{server}$个位置(以$m$-byte 为单位)。

2. Sigma-Delta 分布算法(均匀插空)

GMP 再次使用Sigma-Delta 算法(有时称为“累加器算法”或“Bresenham 算法的变体”)来决定每一个位置是放“数据”还是放“填充”。

原理如下:

有一个累加器变量$j$,初始为 0。对于净荷区的每一个位置 $i$($1$到$P_{server}$):

3. 视觉效果:均匀混合

通过上述算法,有效数据和填充数据会非常均匀地混合在一起。


四、 总结与对比表

为了帮助记忆,我们可以将计算原理和分布原理总结如下:

特性 C米​(t )计算(Outer Loop) 数据分布(Inner Loop)
目的 决定发多少(速率适配) 决定放哪里(抖动控制)
输入 $f_{client}$对比$f_{server}$(时钟差) $C_m$(数据量) vs$P_{server}$(总容量)
核心算法 Sigma-Delta (相位累加) Sigma-Delta (均匀插值)
结果体现 JC 字节中的数值变化 净荷区中Data/Stuff 的排列图案
优势 可以适应任意速率(Any-rate) 接收端更容易恢复时钟,抖动极低

五、 形象化比喻

您可以这样理解GMP 的全过程:

  1. $C_m$ 计算(装水):

    你有一个水龙头(客户信号)往桶里流数(缓存)。每隔固定的时间(服务器帧),你从桶里舀出一勺水。因为水流速度不完全均匀,你这一勺有时候是 1000 滴水,有时候是 1001 滴水。这个数字就是 $C_m$。

  2. 数据分布(撒豆子):

    你手里现在有$C_m$ 颗红豆(数据),你需要把它们放到一个有很多格子($P_{server}$)的盒子里。为了好看且平衡,你不能把红豆全堆在一头,而是利用数学算法,把红豆最均匀地撒在所有格子里,空出来的地方放绿豆(填充)。


举例:

Pserver = 8
cmt = 5
容器:  *    *    *    *    *    *    *    *    
数据:  0    1    0    1   1    0    1   1         0:表示塞入   1:表示有效数据
 j:           5    2    7    4    1    6    3   0

返回首页