基于MATLABSimulink的HDB3编译码器的仿真Word文档格式.docx
《基于MATLABSimulink的HDB3编译码器的仿真Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于MATLABSimulink的HDB3编译码器的仿真Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
偶数个非0码就取B00V,
定符号:
V的取值第一个V取值与AMI码(见上)的第一个+1相同,即取+V,以后交替取+V,-V。
然后1与B的符号交替变化即可
快速编码原理:
HDB3码的编码中,V相当于破坏码元,B相当于为消除破坏码元影响而引入的调节码元。
为保证输出无直流的特性,破坏码元V的保持交替变化,同理1与B也得保持交替变化。
例如:
消息代码:
1000010000110000110000000011100001
中间码:
1000V1000V11B00V11B00VB00V111000V1
HDB3码:
+1000+V-1000-V+1-1+B00+V-1+1-B00-V+B00+V-1+1-1000-V+1
HDB3码的特点
1由HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
2HDB3中连0串的数目至多为3个,易于提取定时信号。
3编码规则复杂,但译码较简单。
解码规则
1虽然编码很复杂,但解码规则很简单,就是把原来的取代节(4个连零)找到即可,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1就应该译成“10000”,否则不用改动;
若2连“0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动.
2.再将所有的-1变换成+1后,就可以得到原消息代码。
2.HDB3编译码器的设计方案
方案1:
基于VHDL的HDB3编译码器的设计方案
方案1设计流程:
可编程逻辑器件的一般设计流程
可编程逻辑器件的设计过程是利用EDA开发软件和编程工具对器件进行开发的过程。
可编程逻辑器件的一般设计流程如图1-1所示,包括设计准备,设计输入,功能仿真,设计处理,时序仿真和器件编程及测试等七个步骤。
图2-1可编程逻辑器件的一般设计流程
在HDB3码的VHDL建模思想是在消息代码的基础上,依据HDB3编码规则进行插人“V”符号和“B”符号的操作,且用2位二进制代码分别表示。
最后完成单极性信号变成双极性信号的转换。
其编码模型如图所示:
消息码HDB3码
整个HDB3编码器包含3个功能部分:
插“V”、插“B”和单极性码转变成双极性码。
各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。
方案1.译码流程:
方案2:
基于Matlab程序语言的HDB3编译码器的设计方案
掌握HDB3码的编码规则,利用MATLAB设计并实现HDB3码的编码和译码
最终方案:
基于VHDL的HDB3编译码器的设计方案需要实现以下模块的设计:
(1)插“V”模块的实现
(2)插”B”模块的实现(3)单极性变双极性的实现(4)双极性变换的硬件电路(5)用VHDL语言设计HDB3译码器(6)扣V扣B模块建模在设计过程中模块较多工作量比较大,且容易出错,故此方案被舍弃。
3.Matlab程序语言的HDB3编译码器的设计
技术简介
MATLAB是matrix&
laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。
是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。
它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
MATLAB提供了一种高级编程语言——M语言,这种语言的语法结构与C语言非常类似,任何熟悉C语言的用户学习使用M语言都不会有任何障碍。
尽管M语言是一种解释性的编程语言,但是随着MATLAB版本的不断升级,以及充分利用MATLAB提供的各种编程技巧,能够有效提高M语言应用程序的执行效率,使M语言成为了工程领域中最适合进行算法开发验证的编程语言。
原理简述
编码规则:
1)先将消息代码变换成AMI码,若AMI码中连0的个数小于4,此时的AMI码就是HDB3码;
2)若AMI码中连0的个数大于3,则将每4个连0小段的第4个0变换成与前一个非0符号(+1或-1)同极性的符号,用表示(+1+,-1-);
3)为了不破坏极性交替反转,当相邻符号之间有偶数个非0符号时,再将该小段的第1个0变换成+B或-B,符号的极性与前一非零符号的相反,并让后面的非零符号从符号开始再交替变化。
例如:
消息代码:
100001000011000011
AMI码:
+10000-10000+1-10000+1-1
HDB3码:
+1000+V-1000-V+1-1+B00+V-1+1
简易编码方法:
原理:
HDB3码既要包含AMI的交替特性使输出无直流特性,又要不出现四个以上的连0,因此可以先满足后者。
1)把"
0000"
换为取代节。
规则:
先将"
分离开来,第一个"
直接变为"
000V"
,然后数相邻两个"
之间"
1"
的个数,奇数则变为"
,偶数则变为"
B00V"
。
2)更新符号。
根据教材有:
B总是与其前面的1或V符号相反,V总是与前面的1或B相符号相同,1总是与前面的V或B符号相反,就可以编符号了。
消息代码:
1000010000110000110000000011100001
中间码:
1000V1000V11B00V11B00VB00V111000V1
+1000+V-1000-V+1-1+B00+V-1+1-B00-V+B00+V-1+1-1000-V+1
解码规则:
1)虽然编码很复杂,但解码规则很简单,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1就应该译成“10000”;
若2连“0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000.
2)再将所有的-1变换成+1后,就可以得到原消息代码。
程序运行结果
程序主界面
运行结果
程序源代码及注释
%
%AMI码的编码
xn=[100001
0000
11000011
0000111
1];
%输入单极性码
yn=xn;
%输出yn初始化
num=0;
%计数器初始化
fork=1:
length(xn)
ifxn(k)==1
num=num+1;
%"
计数器
ifnum/2==fix(num/2)%奇数个1时输出-1,进行极性交替
yn(k)=1;
else
yn(k)=-1;
end
end
%HDB3编码
%连零计数器初始化
yh=yn;
%输出初始化
sign=0;
%极性标志初始化为0
V=zeros(1,length(yn));
%V脉冲位置记录变量
B=zeros(1,length(yn));
%B脉冲位置记录变量
length(yn)
ifyn(k)==0
%连“0”个数计数
ifnum==4%如果4连“0”
num=0;
%计数器清零
yh(k)=1*yh(k-4);
%让0000的最后一个0改变为与前一个非零符号相同极性的符号
V(k)=yh(k);
%V脉冲位置记录
ifyh(k)==sign%如果当前V符号与前一个V符号的极性相同
yh(k)=-1*yh(k);
%则让当前V符号极性反转,以满足V符号间相互极性反转要求
yh(k-3)=yh(k);
%添加B符号,与V符号同极性
B(k-3)=yh(k);
%B脉冲位置记录
yh(k+1:
length(yn))=-1*yh(k+1:
length(yn));
%并让后面的非零符号从V符号开始再交替变化
sign=yh(k);
%记录前一个V符号的极性
%当前输入为“1”则连“0”计数器清零
end%编码完成
re=[xn'
yn'
yh'
V'
B'
];
%结果输出:
xnAMIHDB3V&
B符号
%HDB3解码
input=yh;
%HDB3码输入
decode=input;
%极性标志初始化
length(yh)
ifinput(k)~=0
ifsign==yh(k)%如果当前码与前一个非零码的极性相同
decode(k-3:
k)=[0000];
%则该码判为V码并将*00V清零
sign=input(k);
%极性标志
decode=abs(decode);
%整流
error=sum([xn'
-decode'
]);
%解码的正确性检验,作图
subplot(3,1,1);
stairs([0:
length(xn)-1],xn);
axis([0length(xn)-22]);
subplot(3,1,2);
length(xn)-1],yh);
subplot(3,1,3);
length(xn)-1],decode);
总结与心得
三周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做好一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计和同学们相互探讨,相互学习,相互监督,学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是对我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不可少过程。
“千里之行始于足下”,通过这次课程设计我深深体会到这句千古名言真正含义。
我今天认真的进行课程设计,学会脚踏实地迈开这一步,是为了明天能稳健地在社会大潮中奔跑打下坚实的基础。
在这次设计过程中,体现出自己单独设计的能力及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从发现自己平时学习的不足和薄弱环节从而加弥补。
在此感谢我们的知道老师:
侯宝生老师。
侯老师严谨细致、一丝不苟是我工作、学习中的榜样;
老师循循善诱的教导和不拘一格的思路给予我无尽启迪;
在老师细心指导和帮助下,我才能够顺利完成了次课程设计。
同时感谢帮助过我的同学们,谢谢们对我的帮助和支持,让我感受到同学间的友谊。
由于本人的设计能力有限,设计的过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人万分感谢。
参考文献
(1)邓勇、周择、邓斌著《数字电路设计完全手册》.国防工业出版社。
2004;
(2)朱正伟著《EAD技术及应用》.清华大学出版社。
2005;
(3)全国大学生电子设计组委会著《电子系统设计实践》2005;
(4)林明权著《VHDL数字控制系统设计范例》.电子工业出版社
(5)冯涛著《可编程逻辑器件开发技术MAX+plusⅡ入门与提高》人民邮电出版社
(6)王毓银著《数字电路逻辑设计》高等教育出版社
(7)赵俊超著《集成电路设计VHDL语言教程》北京希望出版社
附录
源程序
ifnum/2==fix(num/2)
ifnum==4
ifyh(k)==sign
end
ifsign==yh(k)