计算机仿真设计HDB3编码系、部:电气与信息工程系学生姓名:陆诗林指导教师:张松华专业:电子信息工程班级:电子0901班完成时间:2012-5-16-1-一、设计内容与设计目的设计内容:利用Matlab进行HDB3码的编译,码元数为1000,每个码元的抽样点数为8,二进制序列为0、1等概率出现,码元持续时间为1s,接收滤波器为其他001)(sTttg,高斯白噪声的功率谱密度N0=0.01。技术要求:1.掌握数字基带信号的产生2.绘制经过接收滤波器后的波形及抽样后的数字序列3.利用Matlab进行HDB3码的编译元数为1000,每个码元的抽样点数为8,二进制序列为0、1等概率出现,码元持续时间为1s,接收滤波器为其他001)(sTttg,高斯白噪声的功率谱密度N0=0.01二、设计原理及设计思路在实际的传输系统中,并不是所有的代码电气波形都可以信道中传输。含有直流分量和较丰富的单极性基带波形就不适宜在低频传输特性差的信道中传输,因为它有可能造成信号的严重的畸变。在传输码(或称线路吗)的结构将取决于实际信道特性和系统的工作条件。通常,传输码的结构应具有以下的特性:(1)相应的基带信号无直流分理,且低频分量少:(2)便于从信号中提取定时信息:(3)信号中高频分应尽量少以节省传输频带并减少码间串扰。(4)不受信号源统计特性影响,即能适应于信息源变化:(5)具有内在的检错能力,传输的码型应具有一定的规律性,以便利用这一规律性进行宏观监测:(6)编译码设备要尽可能简单,等等。-2-满足以上特性的传输码型种类繁多,这里使用HDB3。要了解HDB3码的编码规则,首先要知道AMI码的构成规则,AMI码就是把单极性脉冲序列中相邻的“1”码(即正脉冲)变为极性交替的正、负脉冲。将“0”码保持不变,把“1”码变为+1、-1交替的脉冲。如:AMI码:-10000+10000-1+10000-1+1HBD3码(3ndOrderHighDensityBipolar)的全称是三阶高密度双极性码,它是AMI码的一种改进型,改进目的是为了保持AMI码的优点而克服其缺点,使连“0”个数不超过3个。其编码规则:(1)检查消息码中连“0”的个数。当连“0”数目小于等于3时,HBD3码与AMI码一样(“1”交替的变换为“+1”和“-1”,“0”保持不变)。(2)当连“0”数目超过3时,将每4个连“0”化作一小节,定义为“B00V称为破坏节,其中V称为破坏脉冲,而B称为调节脉冲;(3)V与前一个相邻的非“0”脉冲的极性相同(这破坏了极性交替的规则,所以V称破坏脉冲),并且要求相邻的V码之间极性必须交替。V的取值为“+1”或“-1”;(4)B的取值可选0、+1或-1,,以使V同时满足(3)中的两个要求;(5)V码后面的传号码极性也要交替。例如:消息码:1000010000110000000011AMI码:-10000+10000-1+100000000-1+1HDB3码:-1000-V+1000+V-1+1-B00-V+B00+V-1+1其中的±B脉冲和±V脉冲与±1脉冲波形相同,用V或B表示的目的是为了示意其中的该非“0”码是由原信码的“0”变换而来的。当相邻两个V码之间有奇数个“1”码时,能保证V码满足(3)的要求,B取“0”;当相邻两个V码之间有偶数个“1”码时,不能保证V码极性交替,B取“+1”或“-1”,B码的符号与前相邻“1”相反,而其后面的V码与B码极性相同。三、程序流程图实验编码原理框图如下所示:-3-连零检测取代节判断破坏点产生单双变换NRZHDB3图1编码框图译码规则:在接收端,将接收到的HDB3码序列恢复为原输入二进制数字信息序列的过程称为译码。对HDB3码而言,译码就是找到编码时插入的特殊序列并将它恢复为0000。根据编码原则,HDB3的译码可分为三个步骤:(1)根据“V”的极性特点,找出特殊序列。由于编码时,每个“V”的极性都与其前一个“1”码的极性相同,所以,在接收序列中一旦出现连续两个同极性码时,两个同极性码的后一个即为“V”,此“V”与其前的三位码就是一个特殊序列;(2)将所有的特殊序列都恢复为“0000”;(3)将正、负脉冲都恢复为“1”码,零电平恢复为“0”码。下图是译码的框图:双单变换破坏点产生去掉添加的v码HDB3译码输出图2译码框图四、程序源代码xn=[101100000001100000010];%输入单极性码-4-yn=xn;%输出yn初始化num=0;%计数器初始化fork=1:length(xn)ifxn(k)==1num=num+1;%1计数器ifnum/2==fix(num/2)%奇数个1时输出-1,进行极性交替yn(k)=1;elseyn(k)=-1;endendend%HDB3编码num=0;%连零计数器初始化yh=yn;%输出初始化sign=0;%极性标志初始化为0V=zeros(1,length(yn));%V脉冲位置记录变量B=zeros(1,length(yn));%B脉冲位置记录变量fork=1:length(yn)ifyn(k)==0num=num+1;%连“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脉冲位置记录V(k)=yh(k);%V脉冲位置记录yh(k+1:length(yn))=-1*yh(k+1:length(yn));%让后面的非零符号从V符号开始再交替变化endsign=yh(k);%记录前一个V符号的极性endelsenum=0;%当前输入为“1”则连“0”计数器清零end-5-end%编码完成re=[xn',yn',yh',V',B'];%结果输出:xnAMIHDB3V&B符号%HDB3解码input=yh;%HDB3码输入decode=input;%输出初始化sign=0;%极性标志初始化fork=1:length(yh)ifinput(k)~=0ifsign==yh(k)%如果当前码与前一个非零码的极性相同decode(k-3:k)=[0000];%则该码判为V码并将*00V清零endsign=input(k);%极性标志endenddecode=abs(decode);%整流error=sum([xn'-decode']);%解码的正确性检验,作图subplot(3,1,1);stairs([0:length(xn)-1],xn);axis([0length(xn)-22]);subplot(3,1,2);stairs([0:length(xn)-1],yh);axis([0length(xn)-22]);subplot(3,1,3);stairs([0:length(xn)-1],decode);axis([0length(xn)-22]);五、运行效果图-6-图3运行结果六、结果分析和结论HDB3(HighDensityBinary-3)码的全称是3阶高密度双极性码。它是AMI码的一种改进型,主要是为了克服AMI码中连“0”时所带来的提取定时信息的困难。HDB3编码规则是:先把消息代码中的“1”交替变成“+1”和“-1”,“0”仍然保持“0”不变的AMI码,然后去检查AMI码的连“0”的情况,当没有4个和4个以上连“0”串时,这样的AMI码就是HDB3码;当出现4个和4个以上连“0”串时,则将每4个连“0”的小段的第4个“0”变换成与其前一个非零符号相同极型的符号,并用“+V”和“-V”表示.若此“V”使后面的序列破坏了“极性交替反转”的原则,则将出现直流分量。故需要保证相邻“V”的符号也是极性相反,所以,当不满足V也极性相反时,将这个连“0”码无串的等一个“0”变成“-B”和“+B”。“B”的符号与前一个非“0”码的符号相反,并且让后面的非“0”码元符号从“V”码开始再交替变化。七、参考资料-7-1.郭文彬,桑林编著,通信原理-基于Matlab的计算机仿真,北京邮电大学出版社,20062.曹志刚,钱亚生,现代通信原理,清华大学出版社,2002年3.郭仕剑等,《MATLAB7.x数字信号处理》,人民邮电出版社,2006年八、设计心得通过本次设计,我进一步熟悉了matlab语句的语法规则同时也对同学原理中HDB3码有了更深刻的认识,同时通过设计也学到了很多书本上学不到的知识。并且此次对于MATLAB有了进一步的学习与理解,对我以后在学习以及工作中是很有帮助的。