参考资料:

樊昌信,曹丽娜 . 《通信原理》(第7版)

https://wenku.baidu.com/view/24b7bc227fd5360cba1adb6c  (这个PPT给了很多启发)

https://wenku.baidu.com/view/7cd940274b35eefdc8d3330f.html

https://baike.baidu.com/item/HDB3%E7%A0%81/3815309?fr=aladdin

HDB3码(High Density Bipolar of Order 3),三阶高密度双极性码,它是AMI码的一种改进,目的是克服AMI的缺点,使连续“0”的个数不超过3个。其编码规则如下:

(1) 先检查连“0”个数,若小于等于3,则与AMI码相同;

(2)当连“0”个数大于3时,将每4个连“0”化作一个小节,用“000V”代替,其中V取值+1或-1,V的极性与前一个相邻的非“0”脉冲极性相同(这破坏了极性交替规则,故称V为破坏脉冲);

(3) 相邻的V极性必须交替,当V满足(2)但不满足(3)时,将“000V”更改为“B00V”,B的极性与后面的V一致,B称调节脉冲,==>即两个相邻V之间的“1”的个数为偶数时V的极性不满足交替,需要替换为“B00V”;为奇数时V的极性能满足交替,不需要替换;

(4)V后面的传号码极性也要交替。

消息码:     1   0   0   1   1   0   0   0   0   1   0   1   1   0   1   0   0   0   0   1   1   1   1   0

AMI码:  +1  0   0  -1 +1  0   0   0   0  -1   0 +1 -1   0 +1   0   0   0   0 -1 +1 -1 +1   0

加V    :   +1  0   0  -1 +1  0   0   0 +V -1   0 +1 -1   0 +1   0   0   0 +V-1 +1 -1 +1   0

我们可以看到,两个相邻V之间的非0个数为偶数,造成两V的极性相同,不符合(3),所以加B

加B    :   +1  0   0  -1 +1  0   0   0 +V -1   0 +1 -1   0 +1 -B   0   0 -V -1 +1 -1 +1   0

若对0、1、B、V用两位二进制数表示(00,01,10,11),则在不考虑极性的情况下,加B后应该输出

01  00  00  01  00  00  00  11  01  00  01  01  00  01  10  00  00  11  01  01  01  01  00

由此,我们使用Verilog语言进行编写HDB3码的编码程序。

(1)先不考虑极性(+或-),只考虑输出是0、1、B还是V,对上述4个数编码,0--00,1--01,B--10,V--11

(2)加V操作,判断输入的字符是“1”还是“0”,1=>01, 0=>00,若为4个连“0”,前三个输出“00”,第四个输出“11”

always @ ( posedge clk or negedge rst_n )
begin
 if( !rst_n )  begin
  count0 <= 0;
 end
 else  begin
  if( codein == 1'b1 )  begin  //输入1
   codeout_v <= 2'b01;
   count0 <= 2'b00;    //出现1后就要重新对0计数
  end
  else  begin       //输入0
   count0 <= count0 + 1'b1; //对0的计数加1
   if( count0 == 2'b11 ) begin //0的个数等于3,因为是并行,其实是4个了,只是在下一个时钟上升沿变为4
    codeout_v <= 2'b11;  //输出V
    count0 <= 2'b00;   //重新对0计数
   end
   else  begin 
    codeout_v <= 2'b00;
   end
  end
 end
end

(3)加B操作,判断两个相邻的V之间的非“0”(此时两V之间非0的应该只有1,即“01”)的个数是否为偶数,若为偶数,从后一个V往前数,第三个0变为B;若为奇数,正常输出;

注意:此处如何操作V前面的第三个0很关键,按照正常的逻辑似乎不太好把已经输出的0变为B,所以我们可以将输出的数据进行一定的延时,这样要操作的数还在寄存器里没有输出(正要输出最好),即可进行更改后再输出,延时的方法可以使用移位寄存器,利用非租塞赋值(<=)的延时,使输出延时3个周期,操作后正好输出

always @ ( posedge clk )
begin
 buffer[0] <= codein_v; //移位寄存器延时
 buffer[1] <= buffer[0];
 buffer[2] <= buffer[1];
end

always @ ( posedge clk or negedge rst_n )
begin
 if( !rst_n )  begin
  count01 <= 0;
  first_v <= 0;
 end
 else  begin
  if( codein_v == 2'b11 )  begin  //11-->V
  if( first_v == 1'b0 ) begin  //还没出现过V,就不存在两个V之间非0数为偶数的情况,不需要对1计数
    first_v <= 1;     //已经出现了V
    count01 <= 2'b00;    //出现11后就要重新对01计数
    codeout_b <= buffer[2];  //延时后的输出
   end
   else  begin
    if( count01[0] == 0 )  begin //1的个数为偶数
     codeout_b <= 2'b10;   //B-->10
     count01 <= 2'b00; 
    end
    else  begin
     codeout_b <= buffer[2];
     count01 <= 2'b00; 
    end
   end
  end
  else if( codein_v == 2'b01 )  begin  //01--->1
   if( first_v == 1'b1 ) begin
    count01 <= count01 + 1'b1;
    codeout_b <= buffer[2];
   end  
  end
  else begin
   codeout_b <= buffer[2];
  end
 end
end

(4)极性判断输出,这一步在下一篇HDB3编码(2)——极性变换,顶层bdf如下(还差个极性转换,在这HDB3编码(2)——极性变换​​​​​​​​​​​​​​),Modelsim仿真如下(部分关键代码)

initial
begin
    #0 clk = 1'b0;
    #0 rst_n = 1'b0;
    #2 rst_n = 1'b1;
    #100000 $stop;
end

always #15
begin
    clk = ~clk;
end

always
begin
    #30 codein <= 1'b1;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b1;
  #30 codein <= 1'b1;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b1;
  #30 codein <= 1'b0;
  #30 codein <= 1'b1;
  #30 codein <= 1'b1;
  #30 codein <= 1'b0;
  #30 codein <= 1'b1;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b0;
  #30 codein <= 1'b1;
  #30 codein <= 1'b1;
  #30 codein <= 1'b1;
  #30 codein <= 1'b1;
  #30 codein <= 1'b0;
end

HDB3编码(2)——极性变换

通信原理---FPGA---HDB3码编码相关推荐

  1. cmi编码实验_【2017年整理】实验及HDB3码CMI码编码.ppt

    [2017年整理]实验及HDB3码CMI码编码 实验地点: 三楼最西边 通信工程系办公室 HDB3码(三阶高密度双极性码) 编码规则: 把消息代码变换成AMI码.检查AMI码的连0串情况. 当没有4个 ...

  2. 通信原理与MATLAB(十四):HDB3的编解码

    目录 1.HDB3码的编码原理 2.HDB3码的解码原理 3.HDB3码的编解码的代码 4.HDB3码的误码率曲线 4.1原理 4.2 HDB3码的误码率曲线的代码 4.3 HDB3码的误码率曲线图 ...

  3. 西电新时代网信院特色通信原理Assignment(自用)

    CHAP-1 (单选题, 10分)数字通信相对于模拟通信具有( )的优点 A. 占用频带小 B. 抗干扰能力强 C. 传输容量大 D. 易于频分复用 正确答案: B (单选题, 10分)M进制的离散消 ...

  4. FPGA实现IRIG-B(DC)码编码和解码的设计

    [导读]为达到IRIG-B码与时间信号输入.输出的精确同步,采用现代化靶场的IRIG-B码编码和解码的原理,从工程的角度出发,提出了使用现场可编程门阵列(FPGA)来实现IRIG-B码编码和解码的设计 ...

  5. 【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)

    关注公号[逆向通信猿]更精彩!!! 基础知识 要想搞懂本节知识,需要先熟悉掌握以下前几篇博客 [多元域乘法]多项式乘法电路原理及MATLAB详解 [多元域除法]多项式除法电路原理及MATLAB详解 R ...

  6. (三.0)通过FPGA实现以太网通信原理及理解

    0.0 OSI模型的简单理解 OSI(Open System Interconnect),即开放式系统互联.一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型.该体系 ...

  7. 图解通信原理与案例分析-8:以太网通信案例及其物理层工作原理深入剖析--物理层编码

    前言: 以太网是一种计算机局域网通信技术,主要由介质访问层(MAC L2) 协议.物理层(PHY L1)协议.电子信号连接组成. MAC层主要有交换芯片实现,物理层由PHY芯片实现,电信号连接主要定义 ...

  8. matlab实现通信原理(附上完整仿真源码)

    通信原理是现代通信系统的核心,它涉及到信号的传输.调制.解调.编码.解码等多个方面.在通信原理中,信号的传输是最基本的环节,而MATLAB是一个非常适合用来模拟和实现通信原理的工具.本文将介绍如何使用 ...

  9. 图解通信原理与案例分析-19:3G CDMA码分多址通信技术原理---码分多址、OVSF正交扩频码、伪随机码序列

    前言导读: 码分多址(CDMA)是第三代移动通信的核心技术,其基本思想是在相同的载波频段上,通过的不同的地址码来区分的不同用户.不同基站的数据. 3G CDMA与2G GSM通信相比,主要网络架构与通 ...

  10. 【通信原理课程设计】利用MATLAB实现PCM编码的语音基带传输系统

    目录 一.摘要 二.设计任务 项目作业分析: 三.设计内容 1.整体设计方案 2.设计内容 四.结果与分析 这个项目在我的B站上有专门的视频演示:[通信原理课程设计]利用MATLAB实现PCM编码的语 ...

最新文章

  1. Nginx安装及运行服务
  2. sql语句使用foreach报错
  3. Oracle-数据实现竖排打印
  4. python爬酷狗音乐_良心推荐!一个Python高手必读的库,真香!
  5. java map 变量_Java源码解析HashMap成员变量
  6. java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
  7. redux,react-redux之间的关系
  8. Java新职篇:编译程序(2)
  9. $.ajax方法success方法窗口弹不出
  10. Hi3520d 网卡驱动源码分析
  11. 【复习笔记】电分-第三章-电力系统潮流分析与计算
  12. 如何寻找竞争情报发挥企业优势
  13. YB5212A充电IC充电芯片sop8
  14. mysql 汉字笔画排序规则_SQL Server与MySQL中排序规则与字符集相关知识的一点总结...
  15. python模拟ios点击_iOS13 模拟点击 模拟触摸 按键模拟 自写按键精灵
  16. 推动操作系统发展的主要动力是什么?
  17. IPv6技术详解:基本概念、应用现状、技术实践(上篇)
  18. .NET Framework各个版本(3.0 - 3.5)
  19. TTL接口笔记本液晶屏改液晶显示器
  20. PG守护进程(Postmaster)——DefineCustomTypeVariable定义GUC参数

热门文章

  1. vpa函数python_Biopython序列比对
  2. 2021-08-14
  3. 小程序微信登陆及账号绑定功能开发笔记
  4. EXCEL滚动条控件制作动态图表
  5. Ubuntu下挂载Windows分区
  6. python 绝对值_Python绝对值– abs()
  7. 缺少tlsys.conf文件
  8. php那好,php那好【货币问答】- php那好所有答案 - 联合货币
  9. 【程序员读书】读阮一峰最新作《未来世界的幸存者》有感
  10. 量子力学 一 基础5 厄尔米特算符与酉算符 算符的谱分解