通信原理---FPGA---HDB3码编码
参考资料:
樊昌信,曹丽娜 . 《通信原理》(第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码编码相关推荐
- cmi编码实验_【2017年整理】实验及HDB3码CMI码编码.ppt
[2017年整理]实验及HDB3码CMI码编码 实验地点: 三楼最西边 通信工程系办公室 HDB3码(三阶高密度双极性码) 编码规则: 把消息代码变换成AMI码.检查AMI码的连0串情况. 当没有4个 ...
- 通信原理与MATLAB(十四):HDB3的编解码
目录 1.HDB3码的编码原理 2.HDB3码的解码原理 3.HDB3码的编解码的代码 4.HDB3码的误码率曲线 4.1原理 4.2 HDB3码的误码率曲线的代码 4.3 HDB3码的误码率曲线图 ...
- 西电新时代网信院特色通信原理Assignment(自用)
CHAP-1 (单选题, 10分)数字通信相对于模拟通信具有( )的优点 A. 占用频带小 B. 抗干扰能力强 C. 传输容量大 D. 易于频分复用 正确答案: B (单选题, 10分)M进制的离散消 ...
- FPGA实现IRIG-B(DC)码编码和解码的设计
[导读]为达到IRIG-B码与时间信号输入.输出的精确同步,采用现代化靶场的IRIG-B码编码和解码的原理,从工程的角度出发,提出了使用现场可编程门阵列(FPGA)来实现IRIG-B码编码和解码的设计 ...
- 【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)
关注公号[逆向通信猿]更精彩!!! 基础知识 要想搞懂本节知识,需要先熟悉掌握以下前几篇博客 [多元域乘法]多项式乘法电路原理及MATLAB详解 [多元域除法]多项式除法电路原理及MATLAB详解 R ...
- (三.0)通过FPGA实现以太网通信原理及理解
0.0 OSI模型的简单理解 OSI(Open System Interconnect),即开放式系统互联.一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型.该体系 ...
- 图解通信原理与案例分析-8:以太网通信案例及其物理层工作原理深入剖析--物理层编码
前言: 以太网是一种计算机局域网通信技术,主要由介质访问层(MAC L2) 协议.物理层(PHY L1)协议.电子信号连接组成. MAC层主要有交换芯片实现,物理层由PHY芯片实现,电信号连接主要定义 ...
- matlab实现通信原理(附上完整仿真源码)
通信原理是现代通信系统的核心,它涉及到信号的传输.调制.解调.编码.解码等多个方面.在通信原理中,信号的传输是最基本的环节,而MATLAB是一个非常适合用来模拟和实现通信原理的工具.本文将介绍如何使用 ...
- 图解通信原理与案例分析-19:3G CDMA码分多址通信技术原理---码分多址、OVSF正交扩频码、伪随机码序列
前言导读: 码分多址(CDMA)是第三代移动通信的核心技术,其基本思想是在相同的载波频段上,通过的不同的地址码来区分的不同用户.不同基站的数据. 3G CDMA与2G GSM通信相比,主要网络架构与通 ...
- 【通信原理课程设计】利用MATLAB实现PCM编码的语音基带传输系统
目录 一.摘要 二.设计任务 项目作业分析: 三.设计内容 1.整体设计方案 2.设计内容 四.结果与分析 这个项目在我的B站上有专门的视频演示:[通信原理课程设计]利用MATLAB实现PCM编码的语 ...
最新文章
- Nginx安装及运行服务
- sql语句使用foreach报错
- Oracle-数据实现竖排打印
- python爬酷狗音乐_良心推荐!一个Python高手必读的库,真香!
- java map 变量_Java源码解析HashMap成员变量
- java语言数组实现栈的操作_基于自定义的动态数组实现一个栈(Java语言)
- redux,react-redux之间的关系
- Java新职篇:编译程序(2)
- $.ajax方法success方法窗口弹不出
- Hi3520d 网卡驱动源码分析
- 【复习笔记】电分-第三章-电力系统潮流分析与计算
- 如何寻找竞争情报发挥企业优势
- YB5212A充电IC充电芯片sop8
- mysql 汉字笔画排序规则_SQL Server与MySQL中排序规则与字符集相关知识的一点总结...
- python模拟ios点击_iOS13 模拟点击 模拟触摸 按键模拟 自写按键精灵
- 推动操作系统发展的主要动力是什么?
- IPv6技术详解:基本概念、应用现状、技术实践(上篇)
- .NET Framework各个版本(3.0 - 3.5)
- TTL接口笔记本液晶屏改液晶显示器
- PG守护进程(Postmaster)——DefineCustomTypeVariable定义GUC参数