MATLAB实现AMI码和HDB3码 您所在的位置:网站首页 hdb3的编码原则 MATLAB实现AMI码和HDB3码

MATLAB实现AMI码和HDB3码

2023-12-21 02:08| 来源: 网络整理| 查看: 265

一、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(ilength(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);


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有