PCM课程设计.docx
《PCM课程设计.docx》由会员分享,可在线阅读,更多相关《PCM课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
PCM课程设计
通信工程专业《通信仿真综合实践》研究报告
基于MATLAB的PCM仿真设计
学生姓名:
学生学号:
指导教师:
所在学院:
专业班级:
信息技术学院
课程设计任务书
院专业学号:
姓名:
一、课程设计课题:
基于MATLAB的PCM仿真设计
二、课程设计工作日自年月日至年月日
三、课程设计进行地点:
四、程设计任务要求:
1.课题来源:
通信专业老师命题。
2.目的意义:
(1)培养我综合运用多门课程知识的能力。
(2)培养我熟练掌握MATLAB,运用此MATLAB软件工具进行通信系统仿真的能力。
(3)培养我发现问题,解决问题,查阅资料解决问题的能力。
(4)加强我对通信系统各个不同方面的理解。
(5)培养我们系统设计和系统开发的良好的思想。
3.基本要求:
1:
使用matlab编程完成pcm编码与解码
2:
阐述pcm基本理论
3:
最终给出信号的仿真结果
课程设计评审表
指导教师评语:
成绩:
签字:
日期:
基于MATLAB的PCM仿真设计
概述:
数字通信系统己经成为现今通信发展的方向,但是经过传感器的转换以后自然界中的很多信息,大多数依旧为模拟量,PCM(脉冲编码调制)它是一种调制方式就是把模拟信号转换作数字信号。
重点运用在语音传输,并且在数字微波通信、卫星通信、光纤通信当中得到了广阔的运用,通过凭借MATLAB软件,能够更便捷、直接的来仿真与计算。
因此可以通过运行出的结果,分析系统特性。
MATLAB能够进行绘制函数与数据、运算矩阵、用户界面的创建、算法的实现、matlab的开发工作界面连到其它编程语言程序等等。
它重点运用在控制设计、工程的计算、金融建模分析和设计、检测信号、处理图像、信号通讯和处理等方面。
第一部分原理介绍
✍PCM的基本原理
脉冲编码调制(PCM)简称脉码调制,它是一种用二进制数字代码来代替连续信号的抽样值,从而实现通信的方式。
因为此种通信方式抗干扰能力强,因此在光钎通信、数字微波通信、卫星通信中均获得了极为广泛的运用。
PCM信号的形成是模拟信号经过“抽样、量化、编码”三个步骤实现的。
分别完成时间上离散、幅度上离散、及量化信号的二进制表示。
根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和μ律方式,我国采用了A律方式,由于A律压缩实现复杂,常使用13折线法编码。
✍抽样
抽样,即是对模拟的信号所进行的周期性的扫描,将在时间上连续的信号变为在时间上离散的信号。
这个模拟信号经过抽样以后还应要包含原有信号当中所有信息,也就是说能够无失真的恢复原有模拟信号。
抽样定理可确定其抽样速率下限。
于一个频带限制在(0,fh)内的时间连续信号f(t),若以1/2fh的时间间隔对它进行抽样,以此能完全恢复有原信号依靠这些个抽样值。
也就是说,要是一个连续信号f(t)的频谱当中其最高的频率不大于fh,在抽样的频率fs≥2fh时候,原有连续的所有信息也就包含于抽样后的信号。
这就是抽样定理。
✍量化
抽样信号虽然是时间轴上离散的信号,但仍然是模拟信号,其样值在一定的取值范围内,可有无限多个值。
显然,对无限个样值一一给出数字码组来对应是不可能的。
为了实现以数字码表示样值,必须采用“四舍五入”的方法把样值分级“取整”,使一定取值范围内的样值由无限多个值变为有限个值。
这一过程称为量化。
量化后的抽样信号与量化前的抽样信号相比较,当然有所失真,且不再是模拟信号。
这种量化失真在接收端还原模拟信号时表现为噪声,并称为量化噪声。
量化噪声的大小取决于把样值分级“取整”的方式,分的级数越多,即量化级差或间隔越小,量化噪声也越小。
模拟信号的量化分为均匀量化和非均匀量化。
均匀量化
均匀量化,即量化间隔相等,均匀量化输出与输入关系为均匀阶梯关系。
在非过载区内,量化值随信号变化,在过载区内,量化值不随信号变化,保持在最大量化值。
设过载量化电平
,在非过载区内[
],量化电平数
,
且个量化电平数可以用
个二进制数进行编码
,均匀量化的量化间隔是
图1均匀量化原理图
如图1所示,在非过载区,当原电平数
满足
时,M就被量化为量化电平
;在过载区,原电平被量化成最大值。
非均匀量化
非均匀量化的量化间隔是依据信号的不同的区间来定的。
信号取值大的区间,它的量化间隔△v大;在信号的取值小的区间,它的量化间隔△v小。
将它和均匀量化作比较,它有俩主要好处。
首先,在信号具非均匀的分布概率密度(现实中经常如此)时当在输入量化器的时候,能够取得比更加高地的平均信号的量化噪声的功率比在非均匀量化器输出端上;第二是,量化噪声功率的它均方根值大体上和信号的抽样值成比例在非均匀量化的时候。
所以说大信号和小信号在量化噪声影响下大体是一样的,也就是改良小信号的时候其量化的信噪比。
在实际中,非均匀的量化的办法通常是将获得的抽样值经过压缩然后再均匀量化。
广泛被采用的两种对数压缩律是μ压缩律和A压缩律。
在设计中我们使用A压缩律。
所谓A压缩律也就是压缩器具有如下特性的压缩律:
(1-1)
(1-2)
A律压扩特性是连续曲线,A值不同压扩特性亦不同,在电路上实现这样的函数规律是相当复杂的。
实际中,往往都采用近似于A律函数规律的13折线(A=87.6)的压扩特性。
图213折线图图3A=87.6压缩特性曲线
图4A=87.6时A律压缩曲线和13折线的比较图
如图4所示,当A律压缩A=87.6时,A律压缩曲线和13折线图基本重合,具体数据比较件见表1所示。
表113折线时A律的x值与折线x值的比较表
1
1
按折线
分段时的
1
段落
1
2
3
4
5
6
7
8
斜率
16
16
8
4
2
1
✍编码
所谓编码就是把量化后的信号变换成代码,其相反的过程称为译码。
当然,这里的编码和译码与差错控制编码和译码是完全不同的,前者是属于信源编码的范畴。
在现有的编码方法中,若按编码的速度来分,大致可分为两大类:
低速编码和高速编码。
通信中一般都采用第二类。
编码器的种类大体上可以归结为三类:
逐次比较型、折叠级联型、混合型。
在逐次比较型编码方式中,无论采用几位码,一般均按极性码、段落码、段内码的顺序排列。
下面结合13折线的量化来加以说明。
在13折线法中,无论输入信号正还是负,都依8段折线(8个段落)来编码。
要是输入信号抽样量化值由8位折叠二进制码表示,在此间量化值极性就要用第一位表示,抽样量化值其绝对的大小就要用其余七位(第2至8位)来表示。
详细的做法是:
用第2到第4位表示段落码,八个段落的起点电平由它的八种可能状态来分别表示。
其它四位表示段内码,每一个段落它的16个均匀的划分地量化级由它的16种可能状态来分别的代表。
这样处理的结果,8个段落被划分成128个量化级。
PCM编码8位二进制码的具体组成结构如下:
M1M2M3M4M5M6M7M8
M1是极性码,“1”表示正极性,“0”表示负极性;M2M3M4这3位二进制码表示段落码,3位二进制码共可以表示8个段落;剩余的4位二进制码,M5M6M7M8表示的是每一段内的16个量化电平,每一段内的量化电平是等间隔分布的,但是量化电平间隔的大小是随着段落序号的增加而以2倍的速度增加的。
其中段落码和段内码分别如下表2和表3所示。
表2段落码表
段落序号
段落码
8
111
7
110
6
101
5
100
4
011
3
010
2
001
1
000
表3段内码表
量化级
段内码
量化级
段内码
15
1111
7
0111
14
1110
6
0110
13
1101
5
0101
12
1100
4
0100
11
1011
3
0011
10
1010
2
0010
9
1001
1
0001
8
1000
0
0000
第二部分直接用MATLAB编程仿真
编码过程如图4所示:
图5编码过程框图
译码过程如图5所示:
图6译码过程框图
设计方案如图6所示:
图7设计方案框图
在主函数中,先产生一个模拟信号,再经过抽样后得到抽样值,将抽样值通过13拆线法转换成对应值,将转换后的值经过量化和编码后得到0、1比特流,完成信源编码。
信源编码不能直接在通信系统内进行传输,需要经过数字调制,在经过借条得到信源译码,再经过A侓公式反转成原始模拟信号。
利用MATLAB进行调制与解调的仿真的程序,以下是建立的M文件:
图8MATLAB的界面
主程序:
clc
clearall
t=0:
0.1:
6*pi;
a1=4*sin(3*t)+cos(2*t);
c=abs(a1);
figure
(1)
plot(t,a1);
t1=0:
2*pi/32:
6*pi;
a=4*sin(3*t1)+cos(2*t1);
figure
(2)
plot(t1,a);
stem(t1,a);
y4=zhexianlianghua(a);
n=256;
bitstream=bianma(y4,n);
figure(3)
plot(y4);
y2=xinyuanyima(bitstream,n);
y5=Ayi(y2,87.65);
y5=y5*max(c);
figure(4)
plot(y5);
stem(y5,'r')
figure(5)
plot(y5,'r');
holdon
plot(y5,'.b');
图9原始信号
图10抽样信号
量化子程序:
functiony1=zhexianlianghua(x)
x=x/max(x);
z=sign(x);
x=abs(x);
fori=1:
length(x)
if((x(i)>0)&(x(i)<1/64))
y(i)=16*x(i);
elseif((x(i)>=1/64)&(x(i)<1/32))
y(i)=x(i)*8+1/8;
elseif((x(i)>=1/32)&(x(i)<1/16))
y(i)=4*x(i)+2/8;
elseif((x(i)>=1/16)&(x(i)<1/8))
y(i)=2*x(i)+3/8;
elseif((x(i)>=1/8)&(x(i)<1/4))
y(i)=x(i)+4/8;
elseif((x(i)>=1/4)&(x(i)<1/2))
y(i)=1/2*x(i)+5/8;
elseif((x(i)>=1/2)&(x(i)<=1))
y(i)=1/4*x(i)+6/8;
end;
end;
end;
end;
end;
end;
end;
end;
y1=z.*y;
end
运行结果如下:
图11非均匀量化后的信号
编码子程序:
functionbit=bianma(y4,n)
m=2/n;
fori=1:
n+1
q(i)=min(y4)+(i-1)*m;
end
t=length(q);
ttt=[];
tt=[];
e=1;
tt
(1)=-1;
forx=2:
length(q)
tt(x)=(q(x-1)+q(x))/2;
end
tt=[tt,max(y4)];
b_duan=[];
forx=1:
length(y4)
ify4(x)==q(t)
b_duan(x)=length(tt);
else
ify4(x)==min(q)
b_duan(x)=1;
else
fory=1:
t-1
if(q(y)<=y4(x))&&(y4(x)b_duan(x)=y+1;
end
end
end
end
end
nu=ceil(log2(n));
code=zeros(length(y4),nu);
fori=1:
length(y4)
forj=nu:
-1:
0
if(fix(b_duan(i)/(2^j))==1)
code(i,(nu-j+1))=1;
b_duan(i)=b_duan(i)-2^j;
else
code(i,(nu-j+1))=0;
end
end
end
bit=[];
fori=1:
length(y4)
bit=[bit,code(i,:
)];
end
运行结果如下:
g=
01110001
01111101
10000001
10000000
01111010
00100101
00001000
00000010
00000010
00000111
00011000
01110111
01111111
10000001
01111110
01110100
00010010
00000110
信源译码子程序:
functiona3=xinyuanyima(y,n)
m=2/n;
fori=1:
n+1
q(i)=(-1)+(i-1)*m;
end
tt=[];
tt
(1)=-1;
forx=2:
length(q)
tt(x)=(q(x-1)+q(x))/2;
end
tt=[tt,1];
nu=ceil(log2(n));
decode=[];
fori=1:
length(y)/(nu+1)
decode(i,[1:
(nu+1)])=y((i-1)*(nu+1)+1:
i*(nu+1));
end
ab=[];
[w,z]=size(decode);
forj=1:
w
L=nu;
value=0;
fori=0:
L
value=decode(j,i+1)*(2^(L-i))+value;
end
ab(j)=value;
end
decode;
w;
a3=[];
fori=1:
w
a3(i)=tt(ab(i));
end
运行结果如下:
h=
Columns1through9
0.74280.93540.99760.97630.8788-0.4447-0.8990-0.9856-0.9928
Columns10through18
-0.9182-0.64740.83880.96461.00000.95110.7939-0.7428-0.9354
A律还原原信号子程序:
functiony5=Ayi(y,A)
fori=1:
length(y)
if((abs(y(i))>=0)&(abs(y(i))<=(1/(1+log(A)))))
y1(i)=y(i)*(1+log(A))/A;
elseif((abs(y(i))<=1)&(abs(y(i))>(1/(1+log(A)))))
y1(i)=(1/A)*sign(y(i))*exp(abs(y(i))*(1+log(A))-1);
end
end
end
y5=y1;
end
运行结果如下:
图12译码之后的信号
图13还原出原信号
均匀量化的程序:
functionaverage()
t=[0:
0.01:
4*pi];
y=sin(3*t)+2*cos(t);
w=jylh(y,1,64);
plot(t,w);
xlabel('时间');
ylabel('幅度');
axis([0,4*pi,-1.1,1.1]);
functionh=jylh(f,V,L)
n=length(f);t=2*V/L;
p=zeros(1,L+1);
fori=1:
L+1,p(i)=-V+(i-1)*t;end
fori=1:
n
iff(i)>V,h(i)=V;end
iff(i)<=-V,h(i)=-V;end
flag=0;
forj=2:
L/2+1
if(flag==0)
if(f(i)
h(i)=p(j-1);
flag=1;
end;
end;
end;
forj=L/2+2:
L+1
if(flag==0)
if(f(i)
h(i)=p(j);
flag=1;
end
end
end
end
nq=V^2/(3*L^2);
运行结果如下:
图14均匀量化后的信号
第三部分设计过程和体会
通过这次课设我认识到在以后的学习中,不仅要有刻苦钻研的精神,还要有创新精神,对自己感兴趣的一定要用心去学。
而在本次课程设计在刚开始时,由于对MATLAB的应用不太熟,觉得做起来有些棘手,当发现可以用软件仿真来实现PCM的编码过程后,我便去图书馆查阅了相关书籍,进一步熟悉了MATLAB编程方法和PCM的MATLAB实现原理,这是我最终顺利完成PCM系统设计的前提。
随着设计的完成,我也逐渐掌握了PCM编码的工作原理及PCM系统的工作过程,通过应用软件仿真来实现各种通信系统的设计,进一步地,可以完成硬件上的实现,以增强动手能力和学业技能。
总体来说,这次课程设计使我受益匪浅。
在摸索该如何设计PCM系统使之实现所需功能的过程中,不仅体验到了动手的乐趣,而且培养了我的设计思维,增加了实际操作能力。
在让我体会到设计艰辛的同时,更让我体会到了成功的喜悦。
今后,我要更加严格要求自己,主动寻找通信专业方面进行软件仿真及硬件设计的机会,通过实践逐步提升自己的专业技术水平,为今后发展奠定坚实的基础。
均匀量化输出波形图清晰地显示处均匀量化的特征,每个量阶都是均匀分布的,每个间隔都是相等的。
由于量化级数是64,所以从图中看到的结果不是那么明显,和输入波形相比几乎没什么变化。
将A律非均匀量化的结果和A律13折线近似量化进行比较,两者压缩特性很接近。
13折线输出的码组序列也符合要求。
通过本次课程设计,我较系统地掌握有关PCM脉冲编码调制的设计思想和设计方法,主要对MATLAB的仿真方法,开发环境等有了一定的了解并对其进行测试和加以应用的知识得到学习。
掌握了用程序对信号进行分析的基本方法,并画出波形图。
以前对PCM编码的方法只是在理论上,经过这次课设,加深了对PCM编码的基本原理理解,并对其在实际中的应用有了一定了解。
参考文献
[1]《通信原理》(第5版)樊昌信等编着国防工业出版社北京2001年
[2]《MATLAB信息工程工具箱技术手册》魏巍主编国防工业出版社北京2004年
[3]《MATLAB通信仿真开发手册》孙屹主编李妍编着国防工业出版社北京2004年
[4]《MATLAB通信仿真及应用实例详解》邓华等编着人民邮电出版社北京2003年
[5]《现代通信系统仿真及应用》李仲令曹世文葛造坤电子科技大学出版社西安1997年