并将量化编码的结果图形绘制出来。
并要求其符合以下设计要求:
1、利用Matlab软件编程输出正弦信号,信号幅度为[-1,1];
2、利用Matlab软件编程对正弦信号进行8位的PCM量化编码;
3、对PCM量化编码的结果进行图形显示、并分析;
4、认真撰写课程设计报告(论文),内容、结构要完整;
3、运行环境
数字通信系统己成为当今通信的发展方向,然而自然界的许多信息通过传感器转换后,绝大部分是模拟量,脉冲编码调制(PCM)是把模拟信号变换为数字信号的一种调制方式,主要用于语音传输,在光纤通信、数字微波通信、卫星通信中得到广泛的应用,借助于MATLAB软件,可以直观、方便地进行计算和仿真。
因此可以通过运行结果,分析系统特性。
4、开发工具和编程语言
MATLAB是美国MathWorks公司开发的一套面向理论分析研究和工程设计处理的系统仿真软件,MATLAB可以提供一个软件包来实现动态系统建模和仿真,它让用户把精力从编程转向模型的构造,为用户省去了许多重复的代码编写工作;其每个模块对用户而言都是透明的,用户只须知道模块的输入、输出以及模块的功能,而不必管模块内部是怎么实现的,于是留给用户的事情就是如何利用这些模块来建立模型以完成自己的仿真任务;至于各个模块在运行时是如何执行,时间是如何采样,事件是如何驱动等细节性问题,用户可以不去关心,正是由于具有这些特点,所以它被广泛的应用在通信仿真中,通过仿真展示了PCM编码实现的设计思路及具体过程,并加以进行分析。
基于MATLAB的仿真模型,能够反映模拟通信系统的动态工作过程,其可视化界面具有很好的演示效果,为通信系统的设计和研究提供强有力的工具,也为学习通信系统理论提供了一条非常好的途径。
当然理论与实际还会有很大的出入,在设计时还要考虑各种干扰和噪声等因素的影响。
5、详细设计
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。
3、实验程序如下
t=0:
0.01:
10;
m1=-60:
1:
0;%输入的正弦信号幅度不同
m=10.^(m1/20);
figure
(1)
fori=1:
length(m)
forj=1:
2
x1=m(i)*sin(2*pi*t+2*pi*rand
(1));
v=1;
x=x1/v;%normalize
sxx=floor(x*4096);
y=pcm_encode(sxx);
y2=pcm_decode(y,v);
nq(j)=sum((x1-y2).*(x1-y2))/length(x1);
sq(j)=mean(y2.^2);
snr(j)=(sq(j)/nq(j));
drawnow
subplot(211)
plot(t,x1);
title('未编码信号波形');
subplot(212)
plot(t,y2)
title('编译码后得到的信号波形');
end
snrq(i)=10*log10(mean(snr));
end
figure
(2)
drawnow
subplot(211)
plot(t,x1);
axis([00.7-11]);
title('未编码信号波形');
subplot(212)
plot(t,y2)
axis([00.7-11]);
title('编译码后得到的信号波形');
figure(3)
plot(m1,snrq);
axis([-600060]);
title('xulie的量化信噪比')
grid;
PCM编码函数程序:
function[out]=pcm_encode(x)
%xencodetopcmcode
n=length(x);
%-4096fori=1:
n
ifx(i)>0
out(i,1)=1;
else
out(i,1)=0;
end
ifabs(x(i))>=0&abs(x(i))<32
out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0;
elseif32<=abs(x(i))&abs(x(i))<64
out(i,2)=0;out(i,3)=0;out(i,4)=1;step=2;st=32;
elseif64<=abs(x(i))&abs(x(i))<128
out(i,2)=0;out(i,3)=1;out(i,4)=0;step=4;st=64;
elseif128<=abs(x(i))&abs(x(i))<256
out(i,2)=0;out(i,3)=1;out(i,4)=1;step=8;st=128
elseif256<=abs(x(i))&abs(x(i))<512
out(i,2)=1;out(i,3)=0;out(i,4)=0;step=16;st=256;
elseif512<=abs(x(i))&abs(x(i))<1024
out(i,2)=1;out(i,3)=0;out(i,4)=1;step=32;st=512;
elseif1024<=abs(x(i))&abs(x(i))<2048
out(i,2)=1;out(i,3)=1;out(i,4)=0;step=64;st=1024;
elseif2048<=abs(x(i))&abs(x(i))<4096
out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;
else
out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;
end
if(abs(x(i))>=4096)
out(i,2:
8)=[1111111];
else
tmp=floor((abs(x(i))-st)/step);
t=dec2bin(tmp,4)-48;%函数dec2bin输出的是ASCII字符串,48对应0
out(i,5:
8)=t(1:
4);
end
end
out=reshape(out',1,8*n);
PCM解码函数程序:
function[out]=pcm_decode(in,v)
%decodetheinputpcmcode
%in:
inputthepcmcode8bitssample
%v:
quantizedlevel
n=length(in);
in=reshape(in',8,n/8)';
slot
(1)=0;
slot
(2)=32;
slot(3)=64;
slot(4)=128;
slot(5)=256;
slot(6)=512;
slot(7)=1024;
slot(8)=2048;
step
(1)=2;
step
(2)=2;
step(3)=4;
step(4)=8;
step(5)=16;
step(6)=32;
step(7)=64;
step(8)=128;
fori=1:
n/8
ss=2*in(i,1)-1;
tmp=in(i,2)*4+in(i,3)*2+in(i,4)+1;
st=slot(tmp);
dt=(in(i,5)*8+in(i,6)*4+in(i,7)*2+in(i,8))*step(tmp)+0.5*step(tmp);
out(i)=ss*(st+dt)/4096*v;
end
6、调试分析
1、整个程序设计流程如图
程序设计大致流程
1)输入要进行编码的正弦信号,
因为正弦信号的幅度是变化的所以定义了一个变量用于存放幅度,通过每次的循环来改变幅度。
由于幅度的的值最大为1,因此要对产生的正弦信号进行标准化。
t=0:
0.01:
10;
m1=-60:
1:
0;%输入的正弦信号幅度不同
m=10.^(m1/20);
figure
(1)
fori=1:
length(m)
forj=1:
2
x1=m(i)*sin(2*pi*t+2*pi*rand
(1));
v=1;
x=x1/v;%normalize
sxx=floor(x*4096);
2)将采样后得到sxx进行A律PCM编码,
y=pcm_encode(sxx);
pcm_encode函数是按照附表A律PCM编码进行编程的。
在话音信号的数字化同际标准G.7ll中,采用了折叠码编码。
表7—1是G.711建议的语音信号的4律编码规则。
输入的语音信号经过抽样、量化后,每个抽样值编码成8个比特的二进制码组。
量化时,A律中的每个区间义被均勺量化成16个量化电平,其编码规则为:
其中:
·b0为极性码,b0=0时对应输入为负。
b0=1时对应输入为正。
·b1b2b3为段落码,分别对应x的8个区间;
·b4b5b6b7为段内码,对应x区间中的l6个量化电平值
3)将经过PCM编码的信号送入信道
题目要求的信道没有误码,所以将编码后的序列送入信道没有什么改变只是传输,没有产生误码。
4)再将经过信道的信号y进行PCM解码
y2=pcm_decode(y,v);
pcm_decode函数实际上是pcm_encode的逆过程。
5)画出经过A律PCM编码、译码后得到的信号波形与未编码的信号波形。
subplot(211)
plot(t,x1);
title('未编码信号波形');
subplot(212)
plot(t,y2)
title('编译码后得到的信号波形');
7、设计结果
1、输出正弦信号的波形
2、PCM编码的波形
3、PCM译码时经过D/A转化并用A律扩张后的输出波形
4、译码后恢复源信号的输出波形
由以上数据波形可看出在PCM编码的过程中,译码输出的波形具有一定的延迟现象,其波形基本上不失真的在接收端得到恢复,传输的过程中实现了数字化的传输过程。
8、参考文献
7.樊昌信,曹丽娜.通信原理(第六版),国防教育出版社.
8.SanjitK.Mitra.数字信号处理——基于计算机的方法(第三版),清华大学出版社.
9.邱关源,罗先觉.电路(第五版),高等教育出版社.
10.童诗白,华成英.模拟电子技术基础(第四版),高等教育出版社.
11.阎石.数字电子技术基础(第四版),高等教育出版社.
6.吴大正.信号与线性系统分析(第四版),高等教育出版社.
九、心得体会
本次课程设计在刚开始的过程中无从下手,手忙脚乱,时间又紧,最终决定用软件仿真来实现PCM的编码过程。
通过这次设计,掌握了PCM编码的工作原理及PCM系统的工作过程,学会了使用MATLAB(通信系统的动态仿真软件),并学会通过应用软件仿真来实现各种通信系统的设计,对以后的学习和工作都起到了一定的作用,加强了动手能力和学业技能。
总体来说,这次实习我受益匪浅。
在摸索该如何设计电路使之实现所需功能的过程中,特别有趣,培养了我的设计思维,增加了实际操作能力。
在让我体会到了设计电路的艰辛的同时,更让我体会到成功的喜悦和快乐。
每次做课程设计都会有许多的收获。
不仅仅是完成一门课程,还能给我们能力一定的提升,它不仅包括动手能力,还包括学习能力、判断能力、搜集资料的能力、交流能力、心理素质等。
以前已经做过很多课程设计,总结经验和教训,花了我很多时间,付出了少心血,不过并没有得到我想要的回报。
不过我还是比较满意我自己的表现,虽然也还有些不足。
从设计中获得的知识,得到的经验对我以后的学习、工作都是有帮助的。
在这次课程设计中,不仅对于以前的上理论课中一些不清楚的地方有了新的认识,对于一个简单的数字通信系统有了一定的了解,而且对于如何将理论转化成程序有了些更深刻的体会,编程中处理问题的能力也有所增强。
虽然是一个简单的课程设计,我对做事态度方面有了不同的理解,事情无论大小,我们都应该认真面对,尽自己的能力去做,不能因为事情小就不尽心。
做事认真的态度对于我们以后工作中也是至关重要的。
所以,我以后要认真的做每一件事。