A M I AMI AMI, H D B 3 HDB3 HDB3编码译码
有具体实验需求可私聊定制
文章目录
A M I AMI AMI编码
- 不含直流分量,低频成分少
- ·三电平
- 编译码电路简单,有宏观自检能力
AMI编码缺点:信码有长连0串时,难以获取定时信息
AMI编码应用: P C M 24 PCM24 PCM24路基群(北美系列) 1.544 M b / s 1.544Mb/s 1.544Mb/s的线路码型
H D B 3 HDB3 HDB3编译码
三阶高密度双( H D B 3 HDB3 HDB3码)是一种适用于基带传输的编码方式,它是为了克服 A M I AMI AMI码的缺点而出现的,具有能量分散,抗破坏性强等特点。
编码规则
-
连0的个数不超过3时,规则与 A M I AMI AMI相同,即0不变,1变为-1、+1交替;
-
若连0的个数超过3,则将每4个0看作一小节,定义为 B 00 V B00V B00V, B B B可以是-1、0、+1, V V V可以是-1、+1;
-
B和V具体值满足以下条件: V V V和前面相邻非0符号极性相同;不看 V V V时极性交替; V V V与 V V V之间极性交替;
-
一般第一个 B B B取0,第一个非0符取-1。在 V V V与 V V V之间如果出现偶数个B时,应在后一个V字节补一个 B ′ B' B′,定义为 B ′ 00 V B'00V B′00V, B ′ B' B′与前面相邻的 B B B之间符号极性相反,这个字节的 V V V和 B ′ B' B′符号极性相同。 由于 V V V会破坏极性交替的规律、 B B B有3种变化以满足规则,所以 V V V称为破坏脉冲、 B B B称为调节脉冲, B 00 V B00V B00V称为取代节、破坏节。
编码特点
- 由 H D B 3 HDB3 HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
- H D B 3 HDB3 HDB3中连0串的数目至多为3个,易于提取定时信号。
- 编码规则复杂,但译码较简单。
译码规则
-
译码的本质即把原来的取代节(4个连零)找到即可,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1 就应该译成“10000”,否则不用改动;若2连 “0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动.
-
将所有的-1变换成+1后,就可以得到原消息码。
应用
数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,这不利于接收端的定时信号提取。而 H D B 3 HDB3 HDB3码因其无直流成份、低频成份少和连0个数最多不超过三个等特点,而对定时信号的恢复十分有利。
实验结果
% 初始化消息码
N = 22;% N = 100; % 码元数
num_AMI = 0; % 初始化计数器
num_HDB3 = 0;
ran_num = [1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1]
% ran_num = randi([0, 1], 1, N); % 随机01串
ran_num_ori = ran_num;
ran_num_AMI = ran_num;
ran_num_HDB3 = ran_num;
num_0 = 0; % 0计数器
num_V = 0; % V计数器
% AMI编码
for i = 1:N
if ran_num_AMI(i) == 1
num_AMI = num_AMI+1;
ran_num_AMI(i) = (-1)^num_AMI*ran_num_AMI(i);
end
end
% AMI解码
decode_AMI = ran_num_AMI;
for j = 1:N
if abs(decode_AMI(j)) == 1
decode_AMI(j) = abs(decode_AMI(j));
end
end
% HDB3编码
for j = 1:N
if ran_num_HDB3(j) == 1
num_HDB3 = num_HDB3+1;
ran_num_HDB3(j) = (-1)^num_HDB3*ran_num_HDB3(j);
flag = ran_num_HDB3(j); % 上一个非0数作为标志
num_0 = 0;
else if ran_num_HDB3(j) == 0
num_0 = num_0+1;
if num_0 == 4
num_V = num_V+1;
num_0 = 0; % 连续四个0,0计数器清零
if num_V == 1
ran_num_HDB3(j) = 1*flag;
flag_V = ran_num_HDB3(j);
flag = flag_V;
else
ran_num_HDB3(j) = -flag_V; % 破坏脉冲
flag_V = ran_num_HDB3(j);
if ran_num_HDB3(j) ~= flag
ran_num_HDB3(j-3) = ran_num_HDB3(j); % 调节脉冲
end
flag = flag_V;
end
end
end
end
end
% HDB3解码
decode_HDB3 = ran_num_HDB3;
count = 0;
for j = 1:N
if ran_num_HDB3(j) == 0
count = count + 1;
if count == 3 %若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零
if decode_HDB3(j + 1) * decode_HDB3(j - 3) == 1
decode_HDB3(j + 1) = 0;
end
end
if count == 2 %若2连 “0”前后非零脉冲极性相同,则两零前后都译为零
if decode_HDB3(j + 1) * decode_HDB3(j - 2) == 1
decode_HDB3(j - 2) = 0;
decode_HDB3(j + 1) = 0;
end
end
else
count = 0;
end
end
decode_HDB3 = abs(decode_HDB3);
% 绘图区
disp('消息码:'); disp(ran_num_ori);
disp('AMI码:'); disp(ran_num_AMI);
disp('HDB3码:'); disp(ran_num_HDB3);
figure;
subplot(3, 1, 1); stairs(0:(N-1), ran_num_ori); grid on; axis([0 21 -2 2]); title('消息码');
subplot(3, 1, 2); stairs(0:(N-1), ran_num_AMI); grid on; axis([0 21 -2 2]); title('AMI编码');
subplot(3, 1, 3); stairs(0:(N-1), ran_num_HDB3); grid on; axis([0 21 -2 2]); title('HDB3编码');
figure;
subplot(3, 1, 1); stairs(0:(N-1), ran_num_ori); grid on; axis([0 21 -2 2]); title('消息码');
subplot(3, 1, 2); stairs(0:(N-1), decode_AMI); grid on; axis([0 21 -2 2]); title('AMI解码');
subplot(3, 1, 3); stairs(0:(N-1), decode_HDB3); grid on; axis([0 21 -2 2]); title('HDB3解码');