HDB3

  AMI码存在出现长的连0串的缺点,为了克服AMI码的缺点,人们设计了HDB3码。HDB3码的编码规则如下:

  1. 把原二进制序列变成AMI码,检查AMI码的连0情况,当无3个以上连0码时,AMI码就是HDB3码。(我感觉实际应用时可以不要转AMI码这一步)
  2. 当出现4个或4个以上的连0码时,则将每4个连0小段的第4个0变成非0码,这个非0码用符号V表示。原来二进制序列中所有的1码称为信码,用符号B表示。B码与V码的正负必须满足两个条件:①B码和V码各自都应该保持极性交替变换(确保编好的码中没有直流成分);②V码必须与前一个B码同极性,如果不能满足这个条件,则将4个连0码的第1个0码变成与V码同极性的补信码,补信码用符号B’表示,同时要做出调整以保持B码与B’码保持极性交替变换。

  例如:

原二进制序列:0 1 0 0 0 0 1 HDB3码:0 1 0 0 0 1 -1   特殊情况: 原二进制序列:0 0 0 0 0 0 0 0 HDB3码:1 0 0 1 -1 0 0 -1

C语言HDB3编码

/*** @description: Encode the source code as HDB3 code.* @param: hdb3   is a pointer to HDB3 code.*         source is a pointer to source code.*         len    is sequence length.* @return: none*/
void HDB3_Encoding(char *hdb3, const char *source, int len)
{   unsigned int i = 0;unsigned int cnt_0 = 0; //记录连续0的个数char last_b = 0;        //记录上一个信码(含B及B')极性,初始化为0保证第一个信码极性为+1char last_v = -1;       //记录上一个V码极性,初始化为-1保证第一个V码极性为+1for(i = 0; i < len; i++){if(!source[i]){//源码为0cnt_0++;if(cnt_0 >= 4){//连续0的个数大于4cnt_0 = 0;*(hdb3+i) = (last_v&0x80)?1:-1;//保证V码极性交替变化last_v = *(hdb3+i);//更新last_vif((last_v != last_b)){//如果当前V码与前一个信码极性不同,则增加同极性的补信码*(hdb3+i-3) = last_v;last_b = last_v;//更新last_b}}else{*(hdb3+i) = 0;}}else{//源码为1cnt_0 = 0;if(!last_b){//如果是第一个为1的源码,则对应HDB3码的信码极性为+1*(hdb3+i) = 1;last_b = 1;}else{*(hdb3+i) = (last_b&0x80)?1:-1;//保证信码极性交替变化last_b = *(hdb3+i);//更新last_b}}}
}

C语言HDB3译码

/*** @description: Decode HDB3 code.* @param: hdb3   is a pointer to HDB3 code.*         source is a pointer to source code.*         len    is sequence length.* @return: none*/
void HDB3_Decoding(char *source, const char *hdb3, int len)
{unsigned int i = 0;unsigned int cnt_0 = 0; //记录连续0的个数char polarity = 0;      //记录前一个信码(含B及B')极性for(i = 0; i < len; i++){if(!(*(hdb3+i))){//HDB3码为0,译码结果一定是0cnt_0++;*(source+i) = 0;}else{//HDB3码为1或-1if((*(hdb3+i) == polarity)&&(cnt_0 >= 2)){//如果当前HDB3码极性与前一个信码极性相同且连续0的个数大于等于2个//则当前HDB3码是V码,译码结果为0*(source+i) = 0;if(cnt_0 == 2){//如果连续0的个数等于2个,则前一个信码是补信码,译码结果为0*(source+i-3) = 0;//修改补信码处的译码结果}}else{//当前HDB3码是信码(含B及B'),译码结果是1*(source+i) = 1;polarity = *(hdb3+i);//记录信码极性}cnt_0 = 0;}}
}

  将HDB3码的编、译码函数编译成Matlab可以调用的.mexw64文件后,用Matlab绘制的波形图如下图所示,可见译码结果与原二进制序列相同。

C语言实现HDB3编码与译码相关推荐

  1. Verilog实现HDB3编码译码

    Verilog实现HDB3编码译码 前言 一.使用的软件 二.具体实现 1.模块介绍 2.模块的.V文件 三.仿真结果 四.总结 1.关于编程的结构 2.收获 五.附testbench文件 前言 本次 ...

  2. c语言赫夫曼树的编码与译码,哈夫曼树与编码译码实现

    一.哈弗曼树的基本概念. 哈夫曼树,又称最优树,是一类带权路径长度最短的树.下面有几个概念: (1)路径. 树中一个结点到另一个结点之间的分支构成这两个结点之间的路径. (2)路径长度. 路径上的分枝 ...

  3. 电文的编码和译码,哈夫曼编码译码(C语言)

    内容: 从键盘接收一串电文字符,输出对应的Huffman(哈夫曼)编码,同时,能翻译由Huffman编码生成的代码串,输出对应的电文字符串.设计要求: (1)构造一棵Huffman树:         ...

  4. 电文的编码和译码c语言实现,电文的编码及译码.doc

    数据结构课程设计 题目:电文的编码与译码 院系: 班级: 学号: 姓名: 2014-2015年度 第1学期 目录 一.题目:电文的编码与译码3 二.设计目标3 三.问题描述3 四.需求分析3 五.概要 ...

  5. 哈夫曼树编码和译码c语言,C++哈夫曼树编码和译码的实现

    78 /*-----------创建工作---------------------------*/ 79     int s1,s2; 80     for (int i = n + 1; i < ...

  6. 算术编码、译码以及matlab实现

    算术编码是一种采用的编码,我们用matlab语言来实现算术码的编码.译码过程. 首先,我们给定研究范围为 2元信号.用{0,1}符号来表示,然后我们假设发送方和接收方都知道符号0出现的概率p(0)和符 ...

  7. 优先级队列实现哈夫曼树的编码和译码

    //优先级队列实现的哈夫曼树的编码和译码 #include<iostream> #include<queue> #include<string> using nam ...

  8. Swift3.0语言教程使用编码创建和初始化字符串

    Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...

  9. r语言处理数据集编码_在强调编码语言或工具之前,请学习这3个基本数据概念

    r语言处理数据集编码 重点 (Top highlight) I got an Instagram DM the other day that really got me thinking. This ...

  10. 信息论 哈夫曼编码 与 菲诺编码的实现(对一幅BMP格式的灰度图像(个人 证件照片)进行二元霍夫曼编码和译码。并进行编码效率的计算,对一幅BMP格式的灰度图像进行二 元Fano编码、译码 )

    信息论 哈夫曼编码 与 菲诺编码的实现(对一幅BMP格式的灰度图像(个人 证件照片)进行二元霍夫曼编码和译码.并进行编码效率的计算,对一幅BMP格式的灰度图像进行二 元Fano编码.译码 ) 原始图片 ...

最新文章

  1. 在多线程 Python 程序中实现多目标不同缩进格式的 logging
  2. 常用的 服务器 与 交换机
  3. 计算机进阶操作,新手进阶Win7系统操作使用手册
  4. Linux中断处理流程
  5. Server Tomcat v8.0 Server at localhost was unable to start within 45 seconds. 报错详细
  6. DIV中文字不换行解决办法
  7. 如何通过提问成为更好的开发人员
  8. cache 计算机系统实验报告,西安交通大学计算机系统结构实验报告CACHE.doc
  9. stats | nls——求解非线性回归的待定参数
  10. 【报告分享】2019年中国互联网企业战投发展白皮书.pdf(附154页pdf下载链接)...
  11. Hive Union操作中的隐式转换
  12. 济南 天然气 暖气 物业费 水费 电费价格
  13. 湖州南浔张静江:“满堂花醉三千客,一剑霜寒四十州”
  14. 神经网络模型如何使用的,神经网络模型是干嘛的
  15. 3DGIS 与 BIM 融合技术方案
  16. python-函数参数和文档
  17. 干货!怎么写满意度调查报告?
  18. 计算机一级一分钟要打多少字,打字速度分几个等级,一分钟打多少个字算较快?...
  19. 杨森翔书法:立马越王台
  20. k8s pod控制器详解(ReplicaSet、Deployment、Horizontal Pod Autoscaler)

热门文章

  1. 全世界最全牛人博客,你可以学习到太多太多
  2. VARCHART XGantt Activex 5.2.095 Crack
  3. 网页版-抽签程序源码
  4. 阿里云弹性计算研发团队如何从0到1自建SRE体系
  5. 我的博客今天启用了量子统计
  6. php云erp进销存v8安装,PHP仿金蝶云ERP进销存V8网络多仓版源码
  7. 浏览器UserAgent发展历史
  8. win11官网的预览版系统如何下载安装
  9. Win32扫雷(根据以前的控制台扫雷实现)
  10. 调速水泵控制c语言实验程序,液压控制实验报告