通信系统课程设计HDB3编码.docx
《通信系统课程设计HDB3编码.docx》由会员分享,可在线阅读,更多相关《通信系统课程设计HDB3编码.docx(26页珍藏版)》请在冰豆网上搜索。
![通信系统课程设计HDB3编码.docx](https://file1.bdocx.com/fileroot1/2023-7/5/767a120a-2efa-49f3-bb9c-10c19d9b37cb/767a120a-2efa-49f3-bb9c-10c19d9b37cb1.gif)
通信系统课程设计HDB3编码
····课程设计报告
课程名称:
通信系统课程设计
院部:
电气与信息工程学院
专业班级:
学生姓名:
指导教师:
完成时间:
2010年12月31日
报告成绩:
评阅意见:
评阅教师日期
目录
摘要3
关键词:
3
keyword4
1.绪论5
1.1引言5
1.2设计要求5
2.基本概念5
2.1通信系统5
2.2编码6
2.2.1信源编码6
2.2.2信道编码6
2.3选择码型和常用码型7
2.3.1选择码型的考虑7
2.4HDB3码简介8
2.4.1.HDB3码编码规则9
3基带信号的编码建模与设计10
3.1.HDB3编码器的VHDL建模与程序设计10
3.1.1.HDB3的VHDL建模思想10
3.1.2基于VHDL硬件描述语言的建模及程序设计10
3.2.编码器模块的总程序19
4.编译结果24
总结25
参考文献26
摘要
随着数字通信的迅速发展,线路编码己越来越被人们重视,人们先后提出了各种适合线路传输的码型,如CMI码,MILLER码,AMI码,HDB3码等。
传输码型是研究数字通信传输系统的一项重要课题,正确选择传输码型不但能改善传输性能,提高通信质量,而且能延长中继距离,使中继器结构简单,从而获得显著的经济效益。
HDB3码是AMI码的改进型,HDB3码又叫三阶高密度双极性码,HDB3码具有编码规则简单,无直流,低频成份少,具有内在检错能力,可打破长连“0”和对定时信号的恢复十分有利等优点,因此被CCITT协会推荐为常用的基带传输码型之一。
针对数字基带传输系统中HDB3信号的特点,采用基于CPLD/FPGA的VHDL语言,在Max+plusⅡ的环境中,实现HDB3数字基带信号的调制、解调器.仿真结果表明,实现的HDB3基带信号调解器,系统简单、可靠,通过此系统能够方便地将原始信息流转换成HDB3基带信号。
关键词:
HDB3码,VHDL,Max+plusⅡ
Abstract
Alongwithdigitalcommunication'srapidlyexpand,thelinecodesoneselfmoreandmoretotakeseriouslybythepeople,thepeopleproposedsuccessivelyeachkindthecodepatternwhichsuitsthelinetotransmit,likeCMIcode,MILLERcode,AMIcode,HDB3codeandsoon.Thetransmissioncodepatternstudiesadigitalcommunicationtransmissionsystem'simportanttopic,notonlychoosesthetransmissioncodepatterntobeablecorrectlytoimprovethetransmissionperformance,improvesthecorrespondencequality,moreovercanlengthentherelayingdistance,makestherepeaterstructuretobesimple,thusobtainstheremarkableeconomicefficiency.TheHDB3codeistheAMIcodeadvancedversion,theHDB3codeiscalledthethird-orderhighdensitybipolaritycode,theHDB3codetohavethecodingruletobesimple,doesnothavethecocurrent,thelowfrequencyingredientarefew,hastheintrinsicerrordetectionability,maybreakthelongcompany“0”andisveryadvantageoustothetimingsignalrestorationandsoonmerits,thereforeisrecommendedbytheCCITTassociationoneofforcommonlyusedbasebandtransmissioncodepatterns.InviewofthedigitalbasebandtransmissionsystemintheHDB3signal'scharacteristic,usesbasedontheCPLD/FPGAVHDLlanguage,inMax+plusⅡIntheenvironment,realizestheHDB3digitalbasebandsignalmodulation,thedemodulator.ThesimulationresultindicatedthatrealizestheHDB3basebandsignaldemodulator,thesystemissimple,isreliable,canchangeintoconvenientlythroughthissystemtheprimaryinformationcirculationtheHDB3basebandsignal.
keyword:
HDB3code,VHDL,Max+plusⅡ
1.绪论
1.1引言
信号在信道的传输过程中,如何才能保证信号失真最小且可靠的传输是本次课程设计研究的目标。
一个完整的通讯系统,当信号经过一定距离的传送后,总会受到干扰、移相和衰减,因而需要对数字信号进行再生。
从信源输出的信号一般是0,1两种状态的单极性NRZ码,在进行数字信号传输时,考虑到传输信道的特点,将信息比特变换为适合于在信道中传输的数字信号,即进行线路编码。
传统的基带信号含有丰富的直流和低频分量,这些信号不适宜在信道中传输。
为了使得终端机编码输出的由0和1组成的单极性数码流适应于传输信道的特性,还必须经过码型变换,即对信号进行编码。
选择编码码型时一般应考虑几方面的因素,比如从线路码流中容易提取时钟,码型中不宜含有直流分量,高、低频成分应尽量减少,设备应简单,易于实现码型变换和码型反变换的调试等。
基于此,人们考虑是否有一种更好的方法来弥补这一不足之处。
随着EDA技术的不断发展,VHDL作为一种标准化的硬件描述语言,在电子工程领域已成为广泛使用的通用语言和EDA领域的仿真测试、程序模块的移植、ASIC设计源程序的交付、IP盒的应用方面担任着不可或缺的角色,因此成为了必要的设计开发工具。
1.2设计要求
1、阐述HDB3的编码原理及作用;
2、基于VHDL语言实现HDB3的编码;
3、写出详细的设计报告。
1.3设计目的
本文是针对基带信号在传输过程中所做的研究,掌握HDB3的编码原理和作用,
提出基于VHDL语言的HDB3编码器设计的构思。
2.基本概念
2.1通信系统
编码技术源于对通信系统的研究,又服务于通信系统。
通信系统模型如下图所
这个通信系统实际包含了信息的传输与存储两大功能。
从信源发出消息,经过编码器将消息变换成适合于传输或存储的信号形式,可靠而有效的送入信道。
译码器接收信道输出的信号并将信号反变换成原来的消息送到称为信宿的信号接收器。
2.2编码
在有线、无线电通信产生的同时,编码技术随之产生,早期的编码有莫尔斯(Morse)码和波多(Bodo)码等,它们把文字通过点、划、空等信号给以表达,这些虽很原始,但它们实现了从文字到通信信号的转变。
在通信过程中,信息一般都不能直接传送,而是要通过一定形式的电磁信号来传送,由消息变成信号的运算称为编码。
编码实质上是对信源的原始符号按一定的数学规则进行的一种变换。
编码分为信源编码和信道编码。
2.2.1信源编码
信源编码是针对信源统计特性进行编码,主要任务就是减少冗余度,提高编码效率。
由于信源符号之间存在分布不均匀和相关性,使得信源存在冗余度,信源编码的基本途径有两个:
一是使序列中的各个符号尽可能的互相独立,即解除相关性;二是使编码中各个符号出现的概率尽可能相等,即概率均匀化。
2.2.2信道编码
信道编码主要是针对信道统计特性进行编码,主要目的是提高信息传输的可靠性。
由于实际信道存在噪声和干扰,使得经信道传输后与所接收的码字之间存在差异,称为差错。
通常,信道噪声和干扰越大,码字产生差错的概率也就越大。
信道编码的任务就是通过在选择发射的数据中引入冗余,防止数据出现差错。
2.3选择码型和常用码型
2.3.1选择码型的考虑
发送信号设计中主要的问题是确定信号的线路编码类型,基本考虑以下几点:
(1)对直流或低频受限信道,线路编码应不含直流分量;
(2)码型变换应保证透明传输,唯一可译,同时可使两端用户方便发送并正确接收原编码序列,而无觉察中间环节的形式转换,即码型选择仅是传输的中间过程;
(3)便于从接收码流中提取定时信号;
(4)所选码型以及形成波形,应有较大能量,以提高自身抗噪声及干扰的能力;
(5)码型具有一定检错能力,能减少误码扩散;
(6)功率谱主瓣窄,且滚降衰减速度快,以节省传输带宽,减少码间干扰[2]。
2.3.2常用码型及其特点
基带信号在信道中传输,需编成适合于传输用的码型,作为传输用的基带信号归纳起来有如下几点主要要求:
将原始信息符号编制成适合于传输用的码型;对所选码型的电波形,需适宜于在信道中传输。
可进行基带传输的码型较多,这里主要介绍几种常用的码型。
(1)交替传号极性码(AMI)
AMI码全称是传号交替反转码,又称双极性方式码,属于单极性码的变型,编码规则是:
消息码的1交替的变换为+1和-1,0保持不变。
优点:
无直流,零频附近的低频分量少;有一定检错能力,当发生1位误码时,可按AMI规则发现错误,以ARQ纠错;接收后只要全波整流,则变为单极性码,如果它是AMI-RZ型,可直接提取同步。
缺点:
码流中当连0过多时,同步不易提取。
举例如下:
消息代码:
0 11 10010…
AMI 码:
0+1–1+100-10…
或0-1+1–100+10…
上例用波形表示如图3-2所示,(a)为单极性非归零码,(b)和(c)为AMI码。
(2)双相码(曼彻斯特码一Manchester)
它用一个周期的正负对称方波表示“0”,而用其反向波形表示“1”。
其编码关系如表3-1所示。
数字双相码的波形举例如图3-3所示,(a)为单极性非归零码,图(b),(c)所示为数字双相码。
表3-1数字双相码的编码关系
代码
0
1
双相码
01
10
(3)传号反转码(CMI)
CMI码称为传号反转码,是一种二电平码。
其编码规则是:
“1”码交替地用“11”和“00”表示;“0”码用“01”表示。
编码举例如表3-2所示。
表3-2CMI编码举例
代码
1
1
0
1
0
0
1
CMI码
11
00
01
11
01
01
00
CMI码在光纤传输中作为线路传输码。
波形举例如图3-4所示,(a)单极性非归零码(b)(c)为CMI码。
图2.3-2AMI码波形示意图图2.3-3双相码波形示意图图2.3-4CMI码波形示意图
(4)三阶高密度双极性码(HDB3)
这种码型在数字通信中用得很多,是本次设计将要介绍的重点,在下节主要介绍。
2.4HDB3码简介
HDB3码(三阶高密度双极性码,threestephighdensitybipolarcodes)是AMI码的改进型,HDB3中“3阶”的含义是,限制连0数不超过3位。
为减少连0数,有的做法采取“扰码”,按一定规则将多个连0分散,尽量使码序列随机化。
有效的办法是采用HDBn(n=1,2,3),一般多使用n=3,它克服了AMI码长连0串现象,并具有以下特点:
基带信号无直流成分,且只有很少的低频成分;连0串符号最多只有3个,利于定时信息的提取;不受信源统计特性的影响。
2.4.1.HDB3码编码规则
首先将消息代码变换成AMI码;然后检查AMI码中的连0情况,当无4个或4个以上的连0串时,则保持AMI的形式不变;若出现4个或4个以上连0串时,则将1后的第4个0变为与前一非0符号(+1或-1)同极性的符号,用V表示(+1记为+V,-1记为-V);最后检查相邻V符号间的非0符号的个数是否为偶数,若为偶数,则再将当前的V符号的前一非0符号后的第1个0变为+B或-B符号,且B的极性与前一非0符号的极性相反,并使后面的非0符号从V符号开始再交替变化[1]。
举例如表3-3所示。
表3-3HDB3码的编码举例
代码
11
00
11
00
11
11
00
00
00
00
00
11
11
00
00
00
00
11
HDB3码
1+1
00
--1
00
++1
--1
00
00
00
--1
00
++1
--1
++1
00
00
+1
--1
V,B
--V
++B
++V
表3-3的HDB3编码举例用波形表示如图3-5所示。
图中,(a)表示单极性非归零码,(b)和(c)表示HDB3码。
3基带信号的编码建模与设计
3.1.HDB3编码器的VHDL建模与程序设计
3.1.1.HDB3的VHDL建模思想
从编码规则来分析,这个设计的难点之一是:
如何判决是否应该插“B”,因为这涉及到由现在事件的状态决定过去事件状态的问题。
按照实时信号处理的理论,这是没有办法实现的。
但是在实际的电路中,可以考虑用寄存器的方法,首先把信码寄存在寄存器里,同时设置一个计数器计数两个“V”之间”1”的个数,经过4个码元时间后,由一个判偶电路来给寄存器发送是否插”B”的判决符号,从而实现插“B”功能。
不过,信号处理的顺序不能像编码规则那样:
首先把代码串变换成为AMI码完成插“V”及插“B”工作之后,其后的“+1”“-1”的极性还要依据编码规则进行变换,这样做需要大量的寄存器,同时电路结构也变得复杂。
若是把信号处理的顺序变换一下:
首先完成插“V”工作,接着执行插“B”功能,最后实现单极性变双极性的信号输出。
这样做的好处是:
输入进来的信号和插“V”、插“B”功能电路中处理的信号都是单极性信号,且需要的寄存器数目要少的很多[1]。
另外一个难点是:
如何准确识别电路中的“1”、“V”和“B”。
因为“V”和“B”符号是人为标识的符号,但在电路中最终的表现形式还是逻辑电平“1”。
解决的方法是利用了双相码,将其用二进制代码分别表示。
双相码的编码规则:
它是对每个二进制代码分别利用具有两个不同相位的二进制代码去取代。
例如:
代码:
110010
双相码:
101001011001
这样就可以识别电路中的“1”、“V”、“B”。
也可以人为的加入一个标识符,控制一个选择开关,使输出“1”的极性能按照编码规则进行变换。
3.1.2基于VHDL硬件描述语言的建模及程序设计
本设计的思想并不像前面HDB3编码原理介绍的那样首先把消息代码变换成为AMI码,然后进行V符号和B符号的变换,而是在消息代码的基础上,依据HDB3编码规则进行插入“V”符号和插入“B”符号的操作,最后完成单极性信号变成双极性信号的转换。
HDB3编码器模型框图如图4-1所示。
整个HDB3编码器包含三个功能部分:
插“V”、插“B”和单极性码转变成双极性码。
各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。
接下来,详细介绍各个部分的设计流程、编辑的源程序及用软件模拟仿真的波形图。
(1)插“V”模块的实现
插“V”模块的建模
插“V”模块的功能实际上就是对消息代码里的四连0串的检测,即当出现四个连0串的时候,把第四个“0”变换成为符号“V”(“V”可以是逻辑“1”——高电平),而在其他情况下,则保持消息代码的原样输出。
同时为了减少后面工作的麻烦,在进行插“V”时,用“11”标识之,“1”用“01”标识,“0”用“00”标识。
图4-2所示为插“V”符号的流程图。
图4-2插“v”流程图
插“V”模块的程序设计
以下程序是依据上述流程图,完成HDB3编码的程序中
实现插“V”功能的部分程序。
begin
add_v:
process(clk,clr)--插V
begin
if(rising_edge(clk))then
if(clr='1')then
codeoutv<="00";
count0<=0;
else
casecodeinis
when'1'=>codeoutv<="01";--01代表1
count0<=0;
when'0'=>
if(count0=3)then--四连0插V
codeoutv<="11";
count0<=0;
else
count0<=count0+1;
codeoutv<="00";
endif;
whenothers=>
codeoutv<="00";
count0<=count0;
endcase;
endif;
endif;
endprocessadd_v;
这个程序设计了一个计数器(count0),用来作为应插“V”符号的标志。
在进程(process)中,通过条件控制开关(case语句)完成插“V”功能。
这里使用了一个技巧来实现流程的控制,即在选择语句(case语句)中嵌套了条件判断语句(if语句)来控制双重条件判断的执行结果。
假设输入一串代码,根据设计思想,输入代码与插入“V”符号之后的关系如下:
代码:
10 0 00 10 0 0 0 1 1 0 0 0 0 1 1
插V后:
010000001101000000110101000000110101
(2)插“B”模块的实现
建模
插“B”模块的功能是保证附加“V”符号后的序列不破坏“极性交替反转”造成的无直流特性,即当相邻“V”符号之间有偶数个非0符号的时候,把后一小段的第1个“0”变换成一个非破坏符号“B”符号。
图4-3所示为实现插“B”功能的流程图。
图4-3插“B”符号流程图
图中:
“11”表示符号“V”,“01”表示“1”码,“00”表示“0”码,“10”表示符号“B”。
图4-3中插“B”模块是这个设计遇到的第一个难点,因为它涉及到一个由现在事件的状态决定过去事件状态的问题。
其次还有如何确定是“1”,还是“V”的问题。
从下列功能程序中可以分析如何解决这一难题。
程序设计
---------实现编码中插“B”功能的程序部分
s0(0)<=codeoutv(0);
s1(0)<=codeoutv
(1);
ds11:
dffportmap(s1(0),clk,s1
(1));――例化
ds01:
dffportmap(s0(0),clk,s0
(1));――例化
ds12:
dffportmap(s1
(1),clk,s1
(2));――例化
ds02:
dffportmap(s0
(1),clk,s0
(2));――例化
ds13:
dffportmap(s1
(2),clk,s1(3));――例化
ds03:
dffportmap(s0
(2),clk,s0(3));――例化
bclk:
clkb<=notclk;-----------时钟clk倒相
add_b:
process(clkb)------------进程敏感信号clkb
begin
if(rising_edge(clkb))then----------时钟clkb的上升沿触发
if(codeoutv="11")then
if(firstv=0)then
count1<=0;
firstv<=1;
s1(4)<=s1(3);
s0(4)<=s0(3);
else
if(count1=0)then
s1(4)<='1';
s0(4)<='0';
count1<=0;
else
s1(4)<=s1(3);
s0(4)<=s0(3);
count1<=0;
endif;
endif;
elsif(codeoutv="01")then
count1<=count1+1;
s1(4)<=s1(3);
s0(4)<=s0(3);
else
s1(4)<=s1(3);
s0(4)<=s0(3);
count1<=count1;
endif;
endif;
endprocessadd_b;
codeoutb<=s1(4)&s0(4);
处理难点的思路是:
首先把码元(经插“V”处理过的)放入一个4位的移位寄存器里,在同步时钟的作用下,同时进行是否插“B”的判决,等到码元从移位寄存器里出来的时候,就可以决定是应该变换成“B”符号,还是照原码输出。
因此,在程序的结构中进行元件声明(ComponentDeclaration),调用库里的D触发器来实现延迟作用。
为了使程序更清晰,用了四个元件例化语句(CompomemtInstantiation)--“dffx:
dffportmap()”,来说明信号的流向。
所谓元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。
在这里,当前设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接收此芯片的一个插座。
元件例化是使VHDL设计实体构成自上而下层次化设计的一种重要途径。
从上面的程序中我们了解到,“V”已经用“11”代替,“1”用“01”取代,从这里就表现出采用双相码的优点,它轻易地解决了“V”和“1”的差别。
根据这个设计思想,输入代码与插“V”及插“B”后的代码的关系如
代 码:
1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1
插V后:
010000001101000000110101000000110101
插B后:
010000001101000000110101100000110101
(3)单极性变双极性的实现
建模
根据HDB3的编码规则,我们可以知道,“V”