通信原理 HDB3 码

一、完成对给定NRZ码的HDB3编码(注意必须写出V/B符号)。
NRZ 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1
求HDB3,以+1开头
+1 0 0 0 +v -B 0 0 -V -1 +1 0 0 0 +V -1
中间那个-v和后面的-1不需要极性交替吗?

什么是“通信(Communication)”?

简单来说,通信就是传递信息。我把我的信息发给你,你把你的信息发给我,这就是通信。

通信的官方定义更加严谨一些——人与人,或人与自然之间,通过某种行为或媒介,进行的信息交流与传递,叫做通信。

也就是说,通信不仅限于人类之间的信息交换,也包括自然万物。

还是从我们人类开始说起吧,毕竟在绝大部分通信场景中,人都是主体。

在人类诞生的那一刻起,通信就是生存的基本需求。新生的婴儿,通过哭声传递饥饿的信息,给自己的母亲,索取母乳和关爱。参与围猎的部落成员,通过呼吼声,召唤同伴的支援和协助。这一切,都属于通信的范畴。

随着人类社会组织单位的不断变大,通信的作用也越来越大。国家之间的合纵连横,亲人之间的思念关怀,都离不开通信。通信的手段,也由面谈这种近距离方式,逐渐发展出烽火、旗语、击鼓、鸣金等多种远距离方式。

这些通信方式,主要是通过视觉或者听觉来实现。这就要求通信双方之间,是可视的,或者,是可以听见的。客观条件的约束,就限制了通信的范围。

而如果采用驿站或信鸽等方式,虽然一定程度上解决了范围和距离的问题,却带来了时效性的问题,无法在很快的时间内送达。

19世纪电磁理论出现并成熟。在此基础上,莫尔斯发明了莫尔斯编码和有线电报,贝尔发明了电话,马可尼发明了无线电报,人类就此开启了用电磁波进行通信的近现代通信时代。通信的距离限制,不断被突破。与此同时,长距离通信的时延,也在不断缩小。

时至今日,我们已经全面进入了信息时代,对通信的需求和依赖变得前所未有的强烈。像手机这样的现代通信工具,作为每个人保持社会联系的纽带,变成了寸步难离的必需品。

不仅是个人,整个社会的运转,都建立在对通信技术的依赖之上。通信技术的先进程度,成为衡量一个国家综合实力的重要标志之一。

我们无法想象,如果通信技术倒退回两百年前,我们的世界将会是怎样的混乱场景。

让我们回到通信的本质。

任何通信行为,都可以看成是一个通信系统。而对于一个通信系统来说,都包括以下三个要素:信源、信道和信宿。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
NRZ 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1
HDB3 +1 0 0 0 +V -B 0 0 -V +1 -1 +B 0 0 +V -1

准则只有两点:

一是,V码自身必须极性交替(最后出现的是+V -V +V),除了V码以外的其他非零码(包括NRZ原来中的1和B码元)之间极性交替出现(最后出现的是+1 -B +1 -1 +B -1);
二是,V码必须与前一非零码极性相同(V的极性必须同前面的1码元或B码元的极性相同)。
只要这两点掌握,HDB3就没问题了。本回答被提问者采纳
第2个回答  2010-07-10
1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1

+1 0 0 0 +v -B 0 0 -V -1 +1 0 0 0 +V -1
第3个回答  2020-11-12
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

搜索博文/帖子/用户
登录

DengFengLai123
关注
通信原理---FPGA---HDB3码编码 原创
2018-03-24 00:01:15
8点赞

DengFengLai123

码龄4年

关注

参考资料:

樊昌信,曹丽娜 . 《通信原理》(第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;

搜索博文/帖子/用户
登录
通信原理---FPGA---HDB3码编码 原创
2018-03-24 00:01:15
8点赞

DengFengLai123

码龄4年

关注

参考资料:

樊昌信,曹丽娜 . 《通信原理》(第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个周期,操作后正好输出