通信原理报告数字基带信号HDB3码型编码转换实现.docx
《通信原理报告数字基带信号HDB3码型编码转换实现.docx》由会员分享,可在线阅读,更多相关《通信原理报告数字基带信号HDB3码型编码转换实现.docx(18页珍藏版)》请在冰豆网上搜索。
通信原理报告数字基带信号HDB3码型编码转换实现
通信原理课程设计报告
题目:
数字基带信号HDB3码型编码转换实现
专业班级:
姓名:
学号:
指导教师:
设计任务要求:
仿真实现数字基带通信系统信源输入24位二进制序列产生HDB3码,通过高斯白噪声信道,接收端滤波、解码的时域图及频谱图。
以矩形波为例,要现输入24位二进制序列产生AMI码,HDB3码,接收端滤波、解码上述码型。
摘要
HDB3码全称三阶高密度双极性码(英语:
HighDensityBipolarofOrder3,简称:
HDB3码)是一种适用于基带传输的编码方式,它是为了克服AMI码的缺点而出现的,具有能量分散,抗破坏性强等特点。
HDB3码实行转换一般分为三个步骤,先将消息码转换AMI码然后加“V”,接着加“B”,这几部我们可以使用C语言进行编程实现。
为了实现HDB3码的编码与转换,同时加深对通信系统工作原理的了解,我们采用了MATLAB软件进行编码仿真,同时学习掌握MATLAB软件的基础使用。
关键词:
AMI码;HDB3码;编码;解码;MATLAB;仿真
1.设计原理..............................................................................4
1.1HDB3码的介绍..................................................................4
1.2HDB3码的编码转换规则...................................................5
1.3HDB3码的解码转换规则...................................................5
1.4HDB3码的软件程序设计...................................................6
2.MATLAB软件仿真结果及其分析.............................................10
2.1MATLAB软件的介绍........................................................10
2.2仿真结果图示..................................................................12
2.3仿真结果分析.................................................................15
3.设计总结及心得体会............................................................22
4.参考文献................................................................................22
5.致......................................................................................23
正文
1.设计原理
1.1HDB3码的介绍
HDB3码即三阶高密度双极性码(英语:
HighDensityBipolarofOrder3,简称:
HDB3码)是一种适用于基带传输的编码方式,“三阶”通俗讲就是最多3个连0码元,“高密度双极性”就是没有直流分量,不会连续出现+1或-1,它是为了克服AMI码的缺点而出现的,具有能量分散,抗破坏性强等特点。
三阶高密度双极性码用于所有层次的欧洲E-carrier系统,HDB3码将4个连续的"0"位元取代成"000V"或"B00V"。
这个做法可以确保连续的相隔单数的一般B记号。
1.2HDB3的编码转换规则
HDB3码的编码规则主要分为3步:
1.先将消息代码变换成AMI码,若AMI码中连0的个数小于4,此时的AMI码就是HDB3码;
2.若AMI码中连0的个数大于等于4,则将每4个连0小段的第4个0变换成与前一个非0符号(+1或-1)同极性的符号,用表示(+V,-V);
3.为了不破坏极性交替反转,当相邻V符号之间有偶数个非0符号时,再将该小段的连0码元段的第1个0变换成+B或-B,B的符号与前一非零符号的相反,并让后面的非零符号从符号开始再交替变化。
例如:
消息代码:
100001000011000011
AMI码:
+10000-10000+1-10000+1-1
HDB3码:
+1000+V-1000-V+1-1+B00+V-1+1
HDB3码:
+1000+1-1000-1+1-1+100+1-1+1
1.3HDB3码的解码转换规则
虽然编码很复杂,但解码规则很简单,就是把原来的取代节(4个连零)找到即可,若3连"0"前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1就应该译成"10000",否则不用改动;若2连"0"前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动。
再将所有的-1变换成+1后,就可以得到原消息代码。
例如:
HDB3:
0+100-1000-1+1000+1-1+1-100-1+100-1
译码:
01001000010000110000001001
1.4HDB3码的软件程序设计
HDB3码编码程序主要包含3个部分:
消息码与AMI码的转换,加“V”和加“B”
加“B”
加“V”
AMI码
消息码
HDB3码
程序译码部分主要是从收到的符号序列中找到破坏极性交替的点,从而断定符号及其前面的3个符号必是连0符号,从而恢复4个连码,再将所有的-1变换成+1后,就可以得到原消息代码
恢复连零码
寻找破坏极性点
消息
原码
-1正化
HDB3码
当程序完成HDB3的编码与解码后,就是对HDB3码进行加噪声与滤波处理,接着是图像方波输出部分,完整源程序如下:
源程序:
clc;
clearall;
xn=[100001100000101000001010];%输入单极性码
yn=xn;%输出yn初始化
num=0;%计数器初始化
fork=1:
length(xn)
AMI码
编码部分
ifxn(k)==1
num=num+1;%"1"计数器
ifnum/2==fix(num/2)%奇数个1时输出-1,进行极性交替
yn(k)=1;
else
yn(k)=-1;
end
end
end%AMI编码完成
num=0;%连零计数器初始化
HDB3码编码部分
yh=yn;%输出初始化
sign=0;%极性标志初始化为0
V=zeros(1,length(yn));%V脉冲位置记录变量
B=zeros(1,length(yn));%B脉冲位置记录变量
fork=1:
length(yn)
ifyn(k)==0
num=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符号开始再交替变化
end
sign=yh(k);%记录前一个V符号的极性
end
else
num=0;%当前输入为“1”则连“0”计数器清零
end
end%编码完成
re=[xn',yn',yh',V',B'];
b=xn;
t=0:
0.001:
0.999;
g=b(ceil(24*t+0.01));
subplot(611);
plot(t,g)
axis([01.2-1.21.2])
title('信源');
am=yh;
t=0:
0.001:
0.999;
ami=am(ceil(24*t+0.01));
subplot(612);
plot(t,ami)
axis([01.2-1.21.2])
title('信源');
f=150;
a=yh;
t=0:
0.001:
0.999;
m=a(ceil(24*t+0.01));
st=m;
subplot(613);
plot(t,st)
axis([01.2-1.21.2])
title('HDB3信号')
%加高斯噪声
高斯噪声
len=length(st);
std_val=0.2;
j=std_val*randn(1,len);%加入高斯噪声
nst=st+j;
subplot(614)
plot(t,nst)
axis([01.2-1.21.2]);
title('高斯HBD3信号')
%低通滤波器设计
wp=2*pi*2*f*0.5;
低通滤波与译码部分
ws=2*pi*2*f*0.9;
Rp=2;
As=45;
[N,wc]=buttord(wp,ws,Rp,As,'s');
[B,A]=butter(N,wc,'s');
%低通滤波
h=tf(B,A);
%转换为传输函数
dst=lsim(h,nst,t);
subplot(615)
plot(t,dst)
axis([01.2-1.21.2]);
title('经过低通滤波器后的信号');
input=yh;%HDB3码输入
decode=input;%输出初始化
sign=0;%极性标志初始化
fork=1:
length(yh)
ifinput(k)~=0
ifsign==yh(k)%如果当前码与前一个非零码的极性相同
decode(k-3:
k)=[0000];%则该码判为V码并将*00V清零
end
sign=input(k);%极性标志
end
end
decode=abs(decode);
u=decode;
t=0:
0.001:
0.999;
v=u(ceil(24*t+0.01));
subplot(616);
plot(t,v)
axis([01.2-1.21.2])
title('信源');
%频谱观察
Y=fft(st,1024);
Z=fftshift(Y);
Pyy=Z.*conj(Z)/(1024);
f=1000*(0:
1000)/(1024);
figure
(2);
plot(f,Pyy(1:
1001));
axis([400600,055]);
title('HDB3频谱图');
xlabel('频率f(Hz)');
Y=fft(decode,1024);
Z=fftshift(Y);
Pyy=Z.*conj(Z)/(1024);
f=1000*(0:
1000)/(1024);
figure(3);
plot(f,Pyy(1:
1001));
axis([400600,00.05]);
title('解码频谱图');
xlabel('频率f(Hz)');
由于这个课程设计是以组为单位的,我主要负责译码的部分,下面是译码的程序。
input=yh;%HDB3码输入
decode=input;%输出初始化
sign=0;%极性标志初始化
fork=1:
length(yh)
ifinput(k)~=0
ifsign==yh(k)%如果当前码与前一个非零码的极性相同
decode(k-3:
k)=[0000];%则该码判为V码并将*00V清零
end
sign=input(k);%极性标志
end
end
decode=abs(decode);
2.MATLAB软件仿真结果及其分析
2.1MATLAB软件的介绍
MATLAB是一种用于数据可视化、算法开发、数据分析以及数值计算的高级技术计算语言和交互式环境。
除了绘制函数/数据图像、矩阵运算等常用功能外,MATLAB还可用来创建用户界面及与调用其它语言(包括C,C++和FORTRAN)编写的程序。
MATLAB有一系列的工具,这些工具可供用户使用MATLAB的函数和文件,其中许多工具是图形界面。
包括MATLAB桌面和历史命令窗口、编辑器和调试器、命令窗口、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。
Matlab它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点,是一个高级的矩阵/阵列语言,。
用户可以在命令窗口中将输入语句与执行命令同步,或者编写好一个复杂的应用程序后再一起运行。
新版本的MATLAB语言是基于最为流行的C++语言基础上的,但是更具要包容性,因此语法特征与C++语言极为相似,而且更加简单,更加符合人们对数学表达式的书写格式。
使之更利于非计算机专业的科技人员使用。
而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。
MATLAB拥有大量计算算法。
其拥有600多个工程中要用到的数学运算函数,可实现用户所需的各种计算功能。
函数中所使用的算法都是科研和工程计算中的满意成果,而且经过了优化和容错处理。
通常情况下,用它来代替底层编程语言是可行的,如C和C++。
在计算要求相同的情况下,使用MATLAB的编程工作量和时间会大大减少。
Matlab可以对图形进行标注和打印。
高级的作图包括二维和三维的可视化、图象处理、动画和表达式作图。
可用于科学计算和工程绘图。
新版本的MATLAB对整个图形处理功能作了完善,让它不仅在一般数据可视化软件都具有的功能。
尽管MATLAB主要用于数值运算,但利用为数众多的附加工具箱(Toolbox)它也适合不同领域的应用,比如图像处理、控制系统设计与分析、信号处理与通讯、金融建模和分析等。
提供了一个可视化开发环境,常用于系统模拟、动态/嵌入式系统开发等方面。
由于MATLAB具有高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来和具有完备的图形处理功能,实现计算结果和编程的可视化,因此我们选择它来进行此次课程设计的仿真软件。
2.2仿真结果图示
图1
图1从上往下图形依次是信源波形图、AMI码波形图、HDB3码波形图、经过高斯白噪声信道的HDB3码图形、经过接收端滤波的HDB3码解码图形。
图2为解码频谱图
图2
图3为HDB3码频谱图
图3
2.3仿真结果分析
根据AMI和HDB3的编码规则,图中的AMI和HDB3码的编码与其是一致的。
信道是方差为0.2,均值为0的高斯白噪声信道。
经过低通滤波后的波形通过阈值为0.3的抽样判决得出的二进制序列的消息码与信源基本一致。
下图的图3,图4,图5分别为HDB3,接收端,信宿的频谱,由图中可以看出编码出来的HDB3和滤波后的HDB3码所含低频分量少,无直流分量;适合在信道传输。
图4
图5
图6
数据2
将高斯信道的方差改为0.05,判决器的阈值依然是0.3,各个码型的时域图如下:
图7
图8
图9
图10
分析:
因为将噪声的强度变小了,所以在高斯白噪声信道的HDB3码的噪声强度有所减弱。
阈值为0.3的判决器能将其还原出完整的信源。
其他的AMI码,HDB3码的编码实现无改变。
数据3:
将高斯信道的方差改为0.6,判决器的阈值是0.3,各个码型的时域图如下:
图11
图12
图13
图14
分析:
因为将噪声强度升到0.6,所以HDB3通过高斯白噪声信道的波形变得更加不稳定,所以经过设计的低通滤波后,滤波效果比之前的会有点误差。
最后,在经过之前设置的抽样判决,判决出来的结果不理想。
若想得到与信源一样完整的波形,需调整判决器的阈值。
3.设计总结及心得体会:
这次课程设计相对来说还算完成了大部分要求任务,做这个课程设计,首先应该要寻找一些参考文献和网络一些教程去掌握好基础知识,再者则要学会MATLAB的基本操作,最后就是编写程序和一步步调试了。
结果MATLAB软件仿真时能输出24位二进制HDB3码图形,唯一相对不足是没能做出消息的误码率分析。
尽管如此,还是觉得此次设计给我带来了很大的能力锻炼,不仅加深了对通信知识的掌握,还学会了运用MATLAB软件近些一些函数的仿真。
总之,成为一个有用的人,离不开知识的积累与努力学习。
参考文献:
[1]罗军辉等编著MATLAB7.0在数字信号处理中的应用[M].:
机械工业,2005.5
[2]樊昌信.通信原理教程(第三版):
电子工业,2012.12
[3]郭文彬,桑林编著通信原理:
基于Matlab的计算机仿真.:
邮电大学
[4]《MATLAB7.0在数字信号处理中的应用》
[5]《Matlab2010经典超强教程》
[6]《通信原理基于Matlab的计算机仿真》
致:
感老师的悉心教导,组员们的合力相助。
感激学院给了这次让我得到锻炼的实践机会。