通信原理课程设计PCM系统设计与仿真报告.docx
《通信原理课程设计PCM系统设计与仿真报告.docx》由会员分享,可在线阅读,更多相关《通信原理课程设计PCM系统设计与仿真报告.docx(26页珍藏版)》请在冰豆网上搜索。
通信原理课程设计PCM系统设计与仿真报告
引言
数字通信系统己成为当今通信的发展方向,然而自然界的许多信息通过传感器转换后,绝大部分是模拟量,脉冲编码调制(PCM)是把模拟信号变换为数字信号的一种调制方式,主要用于语音传输,在光纤通信、数字微波通信、卫星通信中得到广泛的应用,借助于MATLAB软件,可以直观、方便地进行计算和仿真。
因此可以通过运行结果,分析系统特性。
MATLAB是美国MathWorks公司开发的一套面向理论分析研究和工程设计处理的系统仿真软件,Simulink是MATLAB提供的实现动态系统建模和仿真的一个软件包,它让用户把精力从编程转向模型的构造,为用户省去了许多重复的代码编写工作;Simulink的每个模块对用户而言都是透明的,用户只须知道模块的输入、输出以及模块的功能,而不必管模块内部是怎么实现的,于是留给用户的事情就是如何利用这些模块来建立模型以完成自己的仿真任务;至于Simulink的各个模块在运行时是如何执行,时间是如何采样,事件是如何驱动等细节性问题,用户可以不去关心,正是由于Simulink具有这些特点,所以它被广泛的应用在通信仿真中,通过仿真展示了PCM编码实现的设计思路及具体过程,并加以进行分析。
基于MATLAB的SIMULINK仿真模型,能够反映模拟通信系统的动态工作过程,其可视化界面具有很好的演示效果,为通信系统的设计和研究提供强有力的工具,也为学习通信系统理论提供了一条非常好的途径。
当然理论与实际还会有很大的出入,在设计时还要考虑各种干扰和噪声等因素的影响。
系统介绍
1、脉冲编码调制
脉冲编码调制(pulsecodemodulation,PCM)是概念上最简单、理论上最完善的编码系统,是最早研制成功、使用最为广泛的编码系统,但也是数据量最大的编码系统。
PCM的编码原理比较直观和简单,下图为PCM系统的原理框图:
图中,输入的模拟信号m(t)经抽样、量化、编码后变成了数字信号(PCM信号),经信道传输到达接收端,由译码器恢复出抽样值序列,再由低通滤波器滤出模拟基带信号m(t)。
通常,将量化与编码的组合称为模/数变换器(A/D变换器);而译码与低通滤波的组合称为数/模变换器(D/A变换器)。
前者完成由模拟信号到数字信号的变换,后者则相反,即完成数字信号到模拟信号的变换。
PCM在通信系统中完成将语音信号数字化功能,它的实现主要包括三个步骤完成:
抽样、量化、编码。
分别完成时间上离散、幅度上离散、及量化信号的二进制表示。
根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和μ律方式,我国采用了A律方式,由于A律压缩实现复杂,常使用13折线法编码,采用非均匀量化PCM编码。
2、PCM编码原理
(1)抽样
所谓抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号。
该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号。
它的抽样速率的下限是由抽样定理确定的。
(2)量化
量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。
从数学上来看,量化就是把一个连续幅度值的无限数集合映射成一个离散幅度值的有限数集合。
一个模拟信号经过抽样量化后,得到已量化的脉冲幅度调制信号,它仅为有限个数值。
如下图所示,量化器输出L个量化值
,k=1,2,3,…,L。
常称为重建电平或量化电平。
当量化器输入信号幅度x落在
与
之间时,量化器输出电平为
。
这个量化过程可以表达为:
这里
称为分层电平或判决阈值。
通常
称为量化间隔。
模拟信号的量化分为均匀量化和非均匀量化。
均匀量化:
用这种方法量化输入信号时,无论对大的输入信号还是小的输入信号一律都采用相同的量化间隔。
为了适应幅度大的输入信号,同时又要满足精度要求,就需要增加样本的位数。
但是,对话音信号来说,大信号出现的机会并不多,增加的样本位数就没有充分利用。
为了克服这个不足,就出现了非均匀量化的方法。
非均匀量化:
非均匀量化是根据信号的不同区间来确定量化间隔的。
对于信号取值小的区间,其量化间隔
也小;反之,量化间隔就大。
它与均匀量化相比,有两个突出的优点。
首先,当输入量化器的信号具有非均匀分布的概率密度(实际中常常是这样)时,非均匀量化器的输出端可以得到较高的平均信号量化噪声功率比;其次,非均匀量化时,量化噪声功率的均方根值基本上与信号抽样值成比例。
因此量化噪声对大、小信号的影响大致相同,即改善了小信号时的量化信噪比。
实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。
通常使用的压缩器中,大多采用对数式压缩。
广泛采用的两种对数压缩律是
压缩律和A压缩律。
美国采用
压缩律,我国和欧洲各国均采用A压缩律,所谓A压缩律也就是压缩器具有如下特性的压缩律:
,
。
由于A律压缩实现复杂,常使用13折线法编码,压扩特性图如下图所示:
A律函数13折线压扩特性图
这样,它基本上保持了连续压扩特性曲线的优点,又便于用数字电路实现,本设计中所用到的PCM编码正是采用这种压扩特性来进行编码的。
表113折线时的
值与计算
值的比较
0
1
0
1
按折线
分段时的
0
1
段落
1
2
3
4
5
6
7
8
斜率
16
16
8
4
2
1
表1中第二行的值是根据时计算得到的,第三行的值是13折线分段时的值。
可见,13折线各段落的分界点与曲线十分逼近,同时按2的幂次分割有利于数字化。
(3)编码
所谓编码就是把量化后的信号变换成代码,其相反的过程称为译码。
当然,这里的编码和译码与差错控制编码和译码是完全不同的,前者是属于信源编码的范畴。
在现有的编码方法中,若按编码的速度来分,大致可分为两大类:
低速编码和高速编码。
通信中一般都采用第二类。
编码器的种类大体上可以归结为三类:
逐次比较型、折叠级联型、混合型。
在逐次比较型编码方式中,无论采用几位码,一般均按极性码、段落码、段内码的顺序排列。
下面结合13折线的量化来加以说明。
段落序号
段落码
量化级
段内码
8
111
15
1111
14
1110
7
110
13
1101
12
1100
6
101
11
1011
10
1010
5
100
9
1001
8
1000
4
011
7
0111
6
0110
3
010
5
0101
4
0100
2
001
3
0011
2
0010
1
000
1
0001
0
0000
表2段落码表3段内码
在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。
若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。
具体的做法是:
用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。
其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。
这样处理的结果,8个段落被划分成27=128个量化级。
段落码和8个段落之间的关系如表2所示;段内码与16个量化级之间的关系见表3。
系统仿真模型
以MATLAB的Simulink为工具平台,根据PCM系统的组成原理,在Simulink模块库中找出相应的模块,选择合适的模块以及设置适当的参数,建立了PCM通信系统仿真模型,图示如下:
仿真波形
信号源的波形
PCM编码的波形
PCM译码时经过D/A转化并用A律扩张后的输出波形
译码后恢复源信号的输出波形
由以上数据波形可以看出在PCM编码的过程中,译码输出的波形具有一定的延迟现象,其波形基本上不失真的在接收端得到恢复,传输的过程中实现了数字化的传输过程。
总结
利用MATLAB软件完成了一个完整的PCM通信系统设计,充分发挥了SIMULINK功能强大,建模简单,参数易于调整的特点。
结果表明,基于SIMULINK仿真模型,能够反映模拟通信系统的动态工作过程,其可视化界面具有很好的演示效果,为通信系统的设计和研究提供了强有力的工具,也为学习通信系统理论提供了一条非常好的途径。
在通信原理的教学过程中,一直注重理论的教学,但是深奥的理论难以理解,很有必要以某种可见的、图形化的形式来加深对理论的理解。
MATLAB的引入带来了直观的感受,提供了完整的动态系统设计、仿真和可视化的分析环境,可以构造各种复杂的模拟、数字、数模混合系统以及各种速率的系统,主要用于电路与通信系统的设计和仿真。
通过MATLAB语言对PCM调制系统的采样、量化、编码的仿真与计算,使得分析PCM调制系统变得直观简单。
参考文献
1徐素妍曹坤梅基于MATLAB语言的现代通信仿真分析
2孙学军通信原理教程人民邮电出版社
3李建新刘乃安现代通信系统分析与仿真-MATLAB通信工具箱西安电子科技大学出版社
4邓华MATLAB通信仿真及应用实例讲解人民邮电出版社
5孙屹李妍MATLAB通信仿真开发手册国防工业出版社
6邱晓林基于MATLAB的动态模型与系统仿真工具西安交通大学出版社
设计过程中需解决的问题
1、运用MATLAB仿真抽样信号的频谱,分析满足不同条件下的抽样情况、验证奈奎斯特抽样定理;不同量化电平情况下的信噪比的计算,对PCM调制系统中的非均匀量化的压扩技术和编码进行仿真与计算。
2、必须根据实际情况合理的设计采样频率和抽样脉冲的参数,以防波形的失真,采样频率fs一定要大于等于2fH条件。
由于在信道传输过程中,各种因素影响,会引起译码波形有一定的延时现象。
3、在设计滤波器时,要看系统信号源输出信号频率到底是处于在哪个频率范围,再根据其他参考参数和系统各项技术要求,决定是要设计哪种类型的滤波器。
心得体会
本次课程设计在刚开始的过程中由于主要知识掌握不熟透,时间又紧,做起来有些棘手,之后通过向同学询问与去图书馆以及互联网查找资料,我开始慢慢地了解其工作原理,最终决定用学过的MATLAB软件来仿真实现PCM的编码过程。
通过这次课程设计,充分掌握了PCM编码的工作原理及PCM系统的工作过程,学会了使用仿真软件MATLAB的SIMULINK,并学会通过应用软件仿真来实现PCM系统的设计,对以后的学习和工作都起到了一定的作用,加强了实践动手能力和学习新知识的技能。
总体来说,这次课程设计使我受益匪浅。
在摸索该如何设计系统使之实现所需功能的过程中,培养了我的设计思维,增加了实际操作能力。
在让我体会到了系统设计的艰辛同时,更让我体会到成功的喜悦。
我想也许时间会让我们忘记我们现在所学的知识,可是我不会忘记这种学习的方法和思维。
附录资料:
matlab画二次曲面
一、螺旋线
1.静态螺旋线
a=0:
0.1:
20*pi;
h=plot3(a.*cos(a),a.*sin(a),2.*a,'b','linewidth',2);
axis([-50,50,-50,50,0,150]);
gridon
set(h,'erasemode','none','markersize',22);
xlabel('x轴');ylabel('y轴');zlabel('z轴');
title('静态螺旋线');
2.动态螺旋线
t=0:
0.1:
10*pi;
i=1;
h=plot3(sin(t(i)),cos(t(i)),t(i),'*','erasemode','none');
gridon
axis([-22-22035])
fori=2:
length(t)
set(h,'xdata',sin(t(i)),'ydata',cos(t(i)),'zdata',t(i));
drawnow
pause(0.01)
end
title('动态螺旋线');
(图略)
3.圆柱螺旋线
t=0:
0.1:
10*pi;
x=r.*cos(t);
y=r.*sin(t);
z=t;
plot3(x,y,z,'h','linewidth',2);
gridon
axis('square')
xlabel('x轴');ylabel('y轴');zlabel('z轴');
title('圆柱螺旋线')
二、旋转抛物面
b=0:
0.2:
2*pi;
[X,Y]=meshgrid(-6:
0.1:
6);
Z=(X.^2+Y.^2)./4;
meshc(X,Y,Z);
axis('square')
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('旋转抛物面')
或直接用:
ezsurfc('(X.^2+Y.^2)./4')
三、椭圆柱面
loadclown
ezsurf('(2*cos(u))','4*sin(u)','v',[0,2*pi,0,2*pi])
view(-105,40)%视角处理
shadinginterp%灯光处理
colormap(map)%颜色处理
gridon%添加网格线
axisequal%使x,y轴比例一致
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('椭圆柱面')%添加标题
四、椭圆抛物面
b=0:
0.2:
2*pi;
[X,Y]=meshgrid(-6:
0.1:
6);
Z=X.^2./9+Y.^2./4;
meshc(X,Y,Z);
axis('square')
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('椭圆抛物面')
或直接用:
ezsurfc('X.^2./9+Y.^2./4')
五、'双叶双曲面
ezsurf('8*tan(u)*cos(v)','8.*tan(u)*sin(v)','2.*sec(u)',[-pi./2,3*pi./2,0,2*pi])
axisequal
gridon
axissquare
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('双叶双曲面')
六、双曲柱面
loadclown
ezsurf('2*sec(u)','2*tan(u)','v',[-pi/2,pi/2,-3*pi,3*pi])
holdon%在原来的图上继续作图
ezsurf('2*sec(u)','2*tan(u)','v',[pi/2,3*pi/2,-3*pi,3*pi])
colormap(map)
shadinginterp
view(-15,30)
axisequal
gridon
axisequal
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('双曲柱面')
七、双曲抛物面(马鞍面)
[X,Y]=meshgrid(-7:
0.1:
7);
Z=X.^2./8-Y.^2./6;
meshc(X,Y,Z);
view(85,20)
axis('square')
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('双曲抛物面')
或直接用:
ezsurfc('X.^2./8-Y.^2./6')
八、抛物柱面
[X,Y]=meshgrid(-7:
0.1:
7);
Z=Y.^2./8;
h=mesh(Z);
rotate(h,[101],180)%旋转处理
%axis([-8,8,-8,8,-2,6]);
axis('square')
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('抛物柱面')
或直接用:
ezsurfc('Y.^2./8')
九、环面
ezmesh('(5+2*cos(u))*cos(v)','(5+2*cos(u))*sin(v)','2*sin(u)',[0,2*pi,0,2*pi])
axisequal
gridon
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('环面')
十、椭球
ezsurfc('(5*cos(u))*sin(v)','(3*sin(u))*sin(v)','4*cos(v)',[0,2*pi,0,2*pi])
axisequal
gridon
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('椭球')
十一、单叶双曲面
ezsurf('4*sec(u)*cos(v)','2.*sec(u)*sin(v)','3.*tan(u)',[-pi./2,pi./2,0,2*pi])
axisequal
gridon
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('单叶双曲面')
十二、旋转单叶双曲面
loadclown
ezsurf('8*sec(u)*cos(v)','8.*sec(u)*sin(v)','2.*tan(u)',[-pi./2,pi./2,0,2*pi])
colormap(map)
view(-175,30)
%alpha(.2)%透明处理
axisequal
gridon
axissquare
xlabel('x轴');ylabel('y轴');zlabel('z轴');
shadingflat;
title('旋转单叶双曲面')
十三、圆柱面
subplot(1,2,1)
ezsurf('(2*cos(u))','2*sin(u)','v',[0,2*pi,0,2*pi])
gridon
shadinginterp
axisequal
xlabel('x轴');ylabel('y轴');zlabel('z轴');
title('圆柱面')
subplot(1,2,2)
cylinder(30)
shadinginterp
axissquare
title('调用cylinder函数所得圆柱面')
十四、二次锥面
clc,clear;
P=[1,0,0;
0,cos(45*pi/180),sin(45*pi/180);
0,-sin(45*pi/180),cos(45*pi/180)];
fork2=1:
31
fork1=1:
31
x(k1,k2)=(k2-1)*cos((k1-1)*12*pi/180);
y(k1,k2)=(k2-1)*sin((k1-1)*12*pi/180);
z(k1,k2)=sqrt(x(k1,k2)^2+y(k1,k2)^2);
Vxyz=P*[x(k1,k2),y(k1,k2),z(k1,k2)]';
x1(k1,k2)=Vxyz
(1);
y1(k1,k2)=Vxyz
(2);
z1(k1,k2)=Vxyz(3);
end
end
surf(x,y,z)
holdon;
surf(x1,y1,z1);
shadingflat;