线路码型
前置知识:数字脉冲幅度调制
本页面主要介绍几种常用的线路码型
AMI 码
定义
对于出现的 “1” 符号,使用交替的 ±1 来替代。
样例 AMI (RZ) 码的信号波形如下:
由于交替反转,输出信号的功率谱密度无离散的直流分量。
然而,由于可能存在连续的 0,其时钟提取相对困难。
功率谱密度
AMI 码的符号间有相关性,序列的自相关函数 \(R(0)=1/2,R(m)=-1/4(|m|=1)\),\(R(m)=0(|m|>1)\)。可求出占空比为 50% 的 AMI(RZ)码功率谱计算公式为
HDB3 码
编码逻辑的语言表达
HDB 3 码的编码原理是:信息符号中的 “1” 交替变换为 +1 与 -1,检查它的连“0”串情况,当出现4个以上连“0”串时,则将每4个连“0”小段的第4个“0”变换成与前一非0符号(+1或-1)同极性的符号,显然,这样会破坏“极性交替反转”的规律。该符号被称为破坏符号,用 V 符号表示(即+1记为+V,-1记-V)。为使附加V符号后的序列不破坏“极性交替反转”造成的无直流特性,还必须保证相邻Ⅴ符号也应极性交替。当相邻Ⅴ符号之间有奇数个非0符号时,就用取代节“000V”(V符号取 +1 或 -1)来取代4个连“0”;当 V 符号间有偶数个非0符号时,则用“B00V”取代节代替 4 个连 “0”,而 B 符号的极性与前一非0符号的极性相反(以 +1 记为 +B ,-1 记为 -B)。值得注意的是:让该B符号后面的非0符号从V符号开始再交替反转极性。
伪代码表述
FUNCTION HDB3_Encode(bitstream):
INITIALIZE:
encoded = EMPTY LIST
current_polarity = +1
last_non_zero = 0
zero_count = 0
non_zero_since_last_sub = 0
FOR EACH bit IN bitstream:
IF bit == '1':
zero_count = 0
symbol = current_polarity
encoded.APPEND(symbol)
last_non_zero = current_polarity
non_zero_since_last_sub += 1
current_polarity = -current_polarity // 切换极性
ELSE:
zero_count += 1
encoded.APPEND(0)
IF zero_count == 4:
IF non_zero_since_last_sub MOD 2 == 1:
// 奇数个非零符号,使用 '000V'
V = last_non_zero
encoded[-1] = V
last_non_zero = V
current_polarity = -V
ELSE:
// 偶数个非零符号,使用 'B00V'
B = -last_non_zero
V = last_non_zero
encoded[-4] = B
encoded[-3] = 0
encoded[-2] = 0
encoded[-1] = V
last_non_zero = V
current_polarity = -V
// 重置计数器
zero_count = 0
non_zero_since_last_sub = 0
RETURN encoded
伪代码解释
- 初始化变量
encoded
: 存储编码后的符号序列。current_polarity
: 当前应使用的极性,初始为 +1。last_non_zero
: 上一个非零符号的极性。zero_count
: 连续零的计数器。-
non_zero_since_last_sub
: 自上一次替换以来的非零符号数量。 -
遍历比特流
-
遇到 '1'
- 重置
zero_count
。 - 将当前极性添加到编码结果中。
- 更新
last_non_zero
为当前极性。 - 增加
non_zero_since_last_sub
计数。 - 切换
current_polarity
以确保交替。
- 重置
-
遇到 '0'
- 增加
zero_count
。 - 将 0 添加到编码结果中。
- 如果
zero_count
达到 4: - 根据
non_zero_since_last_sub
的奇偶性决定替换模式:- 奇数个非零符号:使用
000V
,其中V
的极性与last_non_zero
相同。 - 偶数个非零符号:使用
B00V
,其中B
的极性与last_non_zero
相反,V
的极性与last_non_zero
相同。
- 奇数个非零符号:使用
- 替换最后四个符号为相应的替换模式。
- 更新
last_non_zero
和current_polarity
。 - 重置
zero_count
和non_zero_since_last_sub
。
- 增加
-
返回编码结果
- 返回最终的
encoded
列表,包含 HDB3 编码后的符号序列。
样例
例如比特流 100001000011000011
编码为 HDB3 符号序列:
AMI 码 和 HDB 3 码的功率谱
CMI 码
CMI码是将输入的二进制符号“0”编码为线路码的一对比特“01”,将二进制符号“1”编为交替地用“11”或“00”表示的线路码。
功率谱密度
数字双相码
数字双相码又称分相码或者 Manchester 码.
将输入的二进制符号“0”编码为一对比特“01”,又将二进制符号“1”编码为一对比特“10”。