Matlab实现HDB3码的编解码过程

更新时间:2023-04-27 08:18:02 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

-

通信工程专业《通信系统课程设计》研究报告

Matlab实现HDB3码的编解码

过程

学生姓名:

学生学号:

指导教师:

所在学院:

专业班级:

2018年7月

欢迎下载

-

欢迎下载

信息技术学院

课程设计任务书

电气与信息院通信工程专业通信S17 级,学号姓名

一、课程设计课题:

Matlab实现HDB

3

码的编解码过程

二、课程设计工作日自 2018 年 6 月 25 日至 2018 年 7 月 5 日

三、课程设计进行地点:信息馆

四、程设计任务要求:

1.课题来源:

指定教师指定题目

2.目的意义:

数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号

交替反转,有可能出现四连零现象,这不利于接收端的定时信号提取。而HDB

3码因其无直流成份、低频成份少和连0个数最多不超过三个等特点,而对定时信号的恢复十分有利,并已成为CCITT协会推荐使用的基带传输码型之一。

3.基本要求:

a.掌握HDB

3

编解码原理。

b.对HDB

3

编解码进行仿真模型设计。

c.有系统框图,电路原理图,软件流程图,模拟仿真结果图。

课程设计评审表

-

欢迎下载Matlab实现HDB3码的编解码过程

概述:数字信号的传输方式按其在传输中对应的信号的不同可分为数字基带传输系统和数字频带传输系统。在数字通信中,选择合适在信道中传输的码型是十分重要的,常用的传输码型是AMI码,但当原信码出现长连“0”串时,信号的电平长时间不调变时,造成提取定时信号的困难。解决连“0”码问题的有效方法之一是采用HDB3码。HDB3码(三阶高密度码)是比较常用的信道传输码型, HDB3码具有较强的检错能力,当数据序列用HDB3码传输时,若传输过程中出现单个误码,其极性交替变化规律将受到破坏,因而在接收端根据HDB3码这一独特规律特性,可检出错误并纠正错误,同时HDB3码方便提取位定时信息。

第一部分原理介绍

(一)HDB

3

编码解码原理

HDB

3

码:三阶高密度双极性码。

HDB

3

码与二进制序列的关系:

(1)二进制信号序列中的“0”码在HDB

3

码中仍编为“0”码,二进制信号中

“1”码,在HDB

3

码中应交替地成+1和-1码,但序列中出现四个连“0”码时应按特殊规律编码(引入传号交替反转码的“破坏点”V码);

(2)二进制序列中四个连“0”按以下规则编码:信码中出现四个连“0”码时,要将这四个连“0”码用000V或B00V取代节来代替(B和V也是“1”码,可正、可负)。这两个取代节选取原则是,使任意两个相邻v脉冲间的传号数为奇数时选用000V取代节,偶数时则选用B00V取代节。

(二)在实际的传输系统中,并不是所有的代码电气波形都可以信道中传输。含有直流分量和较丰富的单极性基带波形就不适宜在低频传输特性差的信道中传输,因为它有可能造成信号的严重的畸变。

在传输码(或称线路码)的结构将取决于实际信道特性和系统的工作条件。通常,传输码的结构应具有以下的特性:

1.相应的基带信号无直流分理,且低频分量少:

2.便于从信号中提取定时信息:

3.信号中高频分应尽量少以节省传输频带并减少码间串扰。

4.不受信号源统计特性影响,即能适应于信息源变化:

5.具有内在的检错能力,传输的码型应具有一定的规律性,以便利用这一规律性进行宏观监测:

6.编译码设备要尽可能简单,等等。

满足以上特性的传输码型种类繁多,这里使用HDB3。

要了解HDB3码的编码规则,首先要知道AMI码的构成规则,AMI码就是把单极性脉冲序列中相邻的“1”码(即正脉冲)变为极性交替的正、负脉冲。将“0”码保持不变,把“1”码变为+1、-1交替的脉冲。如:

AMI码:-10000 +10000-1 +10000-1 +1

-

欢迎下载 HBD 3码(3nd Order High Density Bipolar )的全称是三阶高密度双极性码,它是AMI 码的一种改进型,改进目的是为了保持AMI 码的优点而克服其缺点,使连“0”个数不超过3个。其编码规则:

a.检查消息码中连“0”的个数。当连“0”数目小于等于3时,HBD 3码与AMI 码一样(“1”交替的变换为“+1”和“-1”,“0”保持不变)。

b.当连“0”数目超过3时,将每4个连“0”化作一小节,定义为“B00V "称为破坏节,其中V 称为破坏脉冲,而B 称为调节脉冲;

c.V 与前一个相邻的非“0”脉冲的极性相同(这破坏了极性交替的规则,所以V 称破坏脉冲),并且要求相邻的V 码之间极性必须交替。V 的取值为“+1”或“-1”;

d.B 的取值可选0、+1或-1,,以使V 同时满足两个要求;

e.V 码后面的传号码极性也要交替。例如:

消息码: 1 000 0 1 000 0 1 1 000 0 000 0 1 1

AMI 码: -1 000 0 +1 000 0 -1+1 000 0 000 0 -1+1

HDB 3码:-1 000-V +1 000+V -1+1-B00-V +B00+V -1+1

其中的±B 脉冲和±V 脉冲与±1脉冲波形相同,用V 或B 表示的目的是为了示意其中的该非“0”码是由原信码的“0”变换而来的。

当相邻两个V 码之间有奇数个“1”码时,能保证V 码满足要求,B 取“0”;当相邻两个V 码之间有偶数个“1”码时,不能保证V 码极性交替,B 取“+1”或“-1”,B 码的符号与前相邻“1”相反,而其后面的V 码与B 码极性相同。

第二部分 MATLAB 编程仿真

M 文件调用函数

function[yn,decode]=HDB 3(xn)

yn=xn;

num=0;

for k=1:length(xn)

if xn(k)==1

num=num+1;

if num/2 == fix(num/2)

yn(k)=1;

else

yn(k)=-1;

end

end

end

-

欢迎下载num=0;

yh=yn;

sign=0;

V=zeros(1,length(yn));

B=zeros(1,length(yn));

for k=1:length(yn)

if yn(k)==0

num=num+1;

if num==4

num=0;

yh(k)=1*yh(k-4);

V(k)=yh(k);

if yh(k)==sign

yh(k)=-1*yh(k);

yh(k-3)=yh(k);

B(k-3)=yh(k);

V(k)=yh(k);

yh(k+1:length(yn))=-1*yh(k+1:length(yn)); end

sign=yh(k);

end

else

num=0;

end

end

re=[xn',yn',yh',V',B'];

input=yh;

decode=input;

sign=0;

for k=1:length(yh)

if input(k) ~= 0

if sign==yh(k)

decode(k-3:k)=[0 0 0 0];

end

-

欢迎下载 sign=input(k);

end

end

decode=abs(decode);

error=sum([xn'-decode']);

subplot(3,1,1);stairs([0:length(xn)-1],xn);axis([0 length(xn) -2

2]);

subplot(3,1,2);stairs([0:length(xn)-1],yh);axis([0 length(xn) -2 2]);

subplot(3,1,3);stairs([0:length(xn)-1],decode);axis([0 length(xn) -2 2]);

M文件运行程序

xn=[1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1];

yn=HDB

3

(xn);

(运行效果图)

-

欢迎下载第三部分设计过程和体会

通过这两周的通信原理课程设计实践,我复习了MATLAB编程语言的基本概念、语法、语义和数据类型的使用特点,加深了对课堂所学理论知识的理解,掌握了运用结构化程序设计的基本思想和方法,更重要的是培养了自己的自学能力。

因为这是我们第二次接触MATLAB编程语言,在编写程序以及调试的过程中遇到了很多困难,但是我通过去图书馆查找资料,请教同学老师,再自己一点点改善程序,最终编写出一个比较完善的程序,实现了所有要求功能,这是最值得我欣慰的一点。

以下是我的几点切身感受:

(一)编写程序需要一个清醒的头脑,明确的思路,同时也要有耐心毅力。

刚拿到程序设计课题时,我感觉一片茫然,因为在之前的信号处理学习中,只是在一些例题中接触过MATLAB语言,甚至没有看过一些基础的书籍,更没有上过课,所以初次遇到一个实际问题,感觉无从下手。这是由于自己对MATLAB的模块设计不够理解,同时对MATLAB的基本语句一无所知,不过通过请教老师懂得了首先要设计guide目录,再根据用户输入,执行swtich语句,在每个case后调用一个函数,来实现要求的功能,这样一下子豁然开朗,掌握了基本设计思路之后,后面的编程就顺利多了。至此,我真真体会到清晰地思路对成功编写一个程序的重要性。

当然成功编写一个程序绝非易事,之前,我总以为程序能够正常运行,就代表着编程成功,后来我才发现我大错特错了。我用了三天时间,完成了程序的编写、改错,但我立刻发现尽管程序能够正常运行,部分功能却不完善,甚至不能实现。经过一次又一次调试、修改又修改,一点一点发现问题并改正,我才真正发现编程远没有想象中的简单。它需要的不仅是清晰地编程思路、编程技巧,还需要有耐心有毅力,不要放弃。

(二)我们在大学需要学习的不仅是基础知识、专业知识,更重要的是一种学习能力。

正如老师所说学习是终生的,因此学习能力也就能让我们受益终生。由于课堂时间有限,MATLAB课程只能靠我们自学,然而guide画图功能我们必须用到,因此只能通过自习,实践也证明我们是有自学的潜能的,通过自学课本,不理解的知识,通过查找资料,请教老师,最终掌握知识,因此,这次课程设计时间培养了我们的自学能力。

(三)要学会向他人请教,与他人合作。

在编程过程中,我遇到了许多问题,通过查找资料也未能找到原因,每次我想老师请教,老师总能不厌其烦地一点点讲解。有时,老师为了帮我在那几百行的程序中找到问题,花上一个多小时,这让我非常感动。大学中的老师是每个大学生的好资源,他的博学、重教,向他们请教会有很大收获。

在编程过程中,我与我组成员共同讨论,为对方查找错误,提示建议,在这个过程中我收获甚多,也培养了自己的合作精神。

(四)要学会总结,提高。

在编程过程中,我发现自己的程序还有很多地方可以完善。程序的界面可以做得更加人性化,这样使用户使用更加方便,画图函数也还可以改进,例如:在使用figure分图显示的时候,我尽量选择部分图,都在一个figure中显示,这样既符合了,老师的要求——尽量在一个图中完成设计,同时也使整个设计的显得干净利落。

-

参考文献

[1]《通信原理》(第5版)樊昌信等编著国防工业出版社北京2001年

[2]《MA TLAB信息工程工具箱技术手册》魏巍主编国防工业出版社北京2004年

[3]《MATLAB通信仿真开发手册》孙屹主编李妍编著国防工业出版社北京2004年

[4]《MA TLAB通信仿真及应用实例详解》邓华等编著人民邮电出版社北京2003年

[5]《现代通信系统仿真及应用》李仲令曹世文葛造坤电子科技大学出版社西安1997年欢迎下载

本文来源:https://www.bwwdw.com/article/4ypq.html

Top