一、HDB3码简介
HDB3码全称是三阶高密度双极性码(High Density Bipolar of Order 3 Code),是一种适用于基带传输的编码方式,它是为了克服AMI码的缺点而出现的。HDB3码具有能量分散,抗破坏性强的特点。
二、编码规则
1)当连续0的个数不超过3时,规则与AMI码相同,即0不变,1变为-1、+1交
替;
2)若连续0的个数超过3,则将每4个0看成一小节,定义为B00V,B可以是-1、
0、+1,V可以是-1,+1;
3)B和V具体值满足以下条件:V和前面相邻的非0符号极性相同;不看V时极
性交替;V与V之间极性交替;
4)一般第一个B取0,第一个非0符号取-1;
三、MATLAB实现
利用MATLAB程序实现上述编码规则,并对消息码1101001000000111编码后的
结果如下:
消息码
1 1 0 1 0 0 1 0 0 0 0 0 0 1 1 1
AMI码
-1 1 0 -1 0 0 1 0 0 0 0 0 0 -1 1 -1 HDB3码
-1 1 0 -1 0 0 1 0 0 0 -2 0 0 -1 1 -1
clear;
close all;
clc;
% 生成AMI码
input = [1 1 0 1 0 0 1 0 0 0 0 0 0 1 1 1];
disp('原码');
disp(input);
AMI = zeros(size(input));
% number1记录原码中1的数量
number1 = 0;
% number0记录原码中0的数量
number0 = 0;
% 生成AMI码
for i=1:length(input)
if input(i)==1
number1 = number1+1;
if mod(number1,2)==0
AMI(i) = +1;
end
if mod(number1,2)==1
AMI(i) = -1;
end
end
if input(i)==0
number0 = number0+1;
AMI(i) = 0;
end
end
disp('AMI码');
disp(AMI);
clear i;
% 生成HDB3码
HDB = zeros(size(input));
% 给每个0000小节加V
i=0;
while(i<=length(input))
i = i+1;
if i>length(input)
break;
end
% AMI中的-1和+1保持不变
if abs(AMI(i))==1
HDB(i) = AMI(i);
end
%
if AMI(i) == 0
HDB(i) = 0;
if AMI(i+1) == 0
HDB(i+1) = 0;
if AMI(i+2) == 0
HDB(i+2) = 0;
if AMI(i+3) == 0
% 用2代表V
HDB(i+3) = 2;
i = i+3;
end
end
end
end
end
% 每两个V极性相反
number2 = 0;
for i=1:length(input)
if HDB(i)==2
number2 = number2+1;
if mod(number2,2)==0
HDB(i) = +2;
end
if mod(number2,2)==1
HDB(i) = -2;
end
end
end
% 统计每2个V之间非零脉冲个数,若偶数,则第2个V所在小节的第1个0变为B
firstV=0;
secondV=0;
for i=1:length(input)
% 找到第一个V
if abs(HDB(i)) == 2
firstV = i;
for j=i+1:length(input)
if abs(HDB(j)) == 2
% 找到第二个V
secondV = j;
end
end
if secondV ~= 0
% 计算非0脉冲的个数
number3 = sum(abs(HDB(firstV+1,secondV-1)));
if mod(number3,2) == 0
if HDB(secondV)==-2
HDB(secondV-3)==-3;%用-3代表-B
end
if HDB(secondV)==+2
HDB(secondV-3)==+3;%用+3代表+B
end
end
end
end
end
disp('HDB3码');
disp(HDB);