当前位置:文档之家› MATLAB的A律PCM译码器系统仿真

MATLAB的A律PCM译码器系统仿真

MATLAB的A律PCM译码器系统仿真
MATLAB的A律PCM译码器系统仿真

MATLAB的A律PCM译码器系统仿真

摘要脉冲编码调制(PCM)是现代语音通信中数字化的重要编码方式。本课程设计主要目的是在信号传输过程中,运用A律PCM译码实现数字信号到模拟信号的转换。该设计运用MATLAB的M文件来编写程序,根据经过抽样、量化、编码后收到的码组(极性码除外),使用A律译码产生相应的控制脉冲,从而输出一个与发信端抽样值接近的脉冲,通过计算,得出理论值与实际值近似,成功达到了设计效果。

关键词PCM脉冲编码;MATLAB;A律13折线;译码

1 引言

近十年来,随着大规模集成电路的飞速发展,已可将话路滤波器和PCM 编码器集成在同一芯片上,这使PCM在光纤通信,数字微波通信,卫星通信等数字通信领域中获得了更广泛的应用。然而在某些需要PCM编码器的实际应用中,如数字交换机中的信号音的产生和实现,单靠PCM编解码芯片来完成整个编解码功能,在电路设计和实现上都显得烦琐和笨拙,相反如果运用软件方法来实现PCM编解码芯片的部分功能并与PCM编解码芯片相结合来共同完成整个电路设计上的编解码,不仅设计简单,灵活方便,而且往往可以达到事半功倍的结果。在现代通信系统中以PCM为代表的编码调制技术被广泛应用于模拟信号的数字传输。PCM的主要优点是:抗干扰能力强;失真小;传输特性稳定,尤其是远距离信号再生中继时噪声不累积,而且可以采用压缩编码、纠错编码和保密编码等来提高系统的有效性、可靠性和保密性。另外,PCM还可以在一个信道上将多路信号进行时分复用传输。所以,在未来的很长一段时间内,PCM在通信系统中都会起着很大的作用。

随着电子技术和计算机技术的发展,仿真技术也得到了广泛的应用。基于信号用于通信系统的动态仿真软件MATLAB具有强大的功能,可以满足从底层到

高层不同层次的设计、分析使用,并且提供了嵌入式的模块分析方法,形成多层系统,使系统设计更加简洁明了,便于完成复杂系统的设计。

1.1 课程设计目的

该课程设计的目的是让我们进一步学习PCM编译码器原理;在通信系统仿真软件MATLAB平台上,采用M文件设计A律PCM码译码器。对设计项目进行调试;对译码器进行仿真;对仿真结果结合编译码理论进行分析等。

1.2 课程设计要求

设计译码器前,首先以理论作指导,构思设计方案。再用MATLAB语言编写程序,在MATLAB软件平台上运行,得到正确程序,并且进行调试、仿真和分析。然后对结果进行处理,输出结果和分析结论应该一致,而且应符合理论。最后,独立完成课程设计并按要求写课程设计报告书。

1.3 设计平台

该设计使用的是MATLAB软件平台。现在应用非常广泛。一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。MATLAB给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点。

(1)语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上。

(2)运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。

(3)MATLAB既具有结构化的控制语句(如for循环,while循环,break

语句和if语句),又有面向对象编程的特性。

(4)程序限制不严格,程序设计自由度大。例如,在MATLAB里,用户无需对矩阵预定义就可使用。

(5)程序的可移植性很好,基本上不做修改就可以在各种型号的计算机和操作系统上运行。

(6)MATLAB的图形功能强大。在FORTRAN和C语言里,绘图都很不容易,但在MATLAB里,数据的可视化非常简单。MATLAB还具有较强的编辑图形界面的能力。

(7)MATLAB的缺点是,它和其他高级程序相比,程序的执行速度较慢。由于MATLAB的程序不用编译等预处理,也不生成可执行文件,程序为解释执行,所以速度较慢。

(8)功能强大的工具箱是MATLAB的另一特色。MATLAB包含两个部分:核心部分和各种可选的工具箱。核心部分中有数百个核心内部函数。其工具箱又分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能,图示建模仿真功能,文字处理功能以及与硬件实时交互功能。功能性工具箱用于多种学科。而学科性工具箱是专业性比较强的,如

control,toolbox,signl proceessing toolbox,

commumnication toolbox等。这些工具箱都是由该领域内学术水平很高的专家编写的,所以用户无需编写自己学科范围内的基础程序,而直接进行高,精,尖的研究。

(9)源程序的开放性。开放性也许是MATLAB最受人们欢迎的特点。除内部函数以外,所有MATLAB的核心文件和工具箱文件都是可读可改的源文件,用户可通过对源文件的修改以及加入自己的文件构成新的工具箱[1]。

2 设计原理

2.1 PCM原理

脉冲编码调制(PCM,Pulse Code Modulation)在通信系统中完成将语音信号数字化功能。是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对于音频信号。PCM对信号每秒钟取样 8000 次;每次取样为 8 个位,总共 64 kbps。PCM的实现主要包括三个步骤完成:

抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。根据CCITT 的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A 律和μ律方式,我

国采用了A 律方式,由于A 律压缩实现复杂,常使用 13 折线法编码,采用非均匀量化PCM 编码示意图如图2.1所以 [2] 。

图2.1 PCM 原理框图

其中简单介绍下抽样、量化、编码和译码原理。 (1)抽样

所谓抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号。该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号。它的抽样速率的下限是由抽样定理确定的。

在一个频带限制在(0,f h )内的时间连续信号f (t ),如果以1/2 f h 的时间间隔对它进行抽样,那么根据这些抽样值就能完全恢复原信号。或者说,如果一个连续信号

f (t )的频谱中最高频率不超过f h ,当抽样频率f S≥2 f h 时,抽样后的信号就包含原连续的全部信息。抽样定理在实际应用中应注意在抽样前后模拟信号进行滤波,把高于二分之一抽样频率的频率滤掉。这是抽样中必不可少的步骤。 (2)量化

从数学上来看,量化就是把一个连续幅度值的无限数集合映射成一个离散幅度值的有限数集合。如图2所示,量化器Q 输出L 个量化值y k ,k =1,2,3,…,L 。k y 常称为重建电平或量化电平。当量化器输入信号幅度x 落在k x 与1+k x 之间时,量化器输出电平为y k 。这个量化过程可以表达为:

,}{)(1k k k y x x x Q x Q y =<<==+ L k ,,3,2,1 = (2-1) 这里k x 称为分层电平。通常:

k k k x x -=?+1 (2-2)

其中k ?称为量化间隔。

话音输入

低通滤波

瞬时压缩

抽 样

量 化

编 码

低通滤波

瞬时扩张

解 调 解 码

信 道

再 生

话音输出

模拟信号的量化分为均匀量化和非均匀量化。由于均匀量化存在的主要缺点是:无论抽样值大小如何,量化噪声的均方根值都固定不变。因此,当信号()m t 较小时,则信号量化噪声功率比也就很小,这样,对于弱信号时的量化信噪比就难以达到给定的要求。通常,把满足信噪比要求的输入信号取值范围定义为动态范围,可见,均匀量化时的信号动态范围将受到较大的限制。为了克服这个缺点,实际中,往往采用非均匀量化。

非均匀量化是根据信号的不同区间来确定量化间隔的。对于信号取值小的区间,其量化间隔v ?也小;反之,量化间隔就大。它与均匀量化相比,有两个突出的优点。首先,当输入量化器的信号具有非均匀分布的概率密度(实际中常常是这样)时,非均匀

量化器的输出端可以得到较高的平均信号量化噪声功率比;其次,非均匀量化时,量化噪声功率的均方根值基本上与信号抽样值成比例。因此量化噪声对大、小信号的影响大致相同,即改善了小信号时的量化信噪比。

实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。通常使用的压缩器中,大多采用对数式压缩。广泛采用的两种对数压缩律是μ压缩律和A 压缩律。美国采用μ压缩律,我国和欧洲各国均采用A 压缩律,因此,PCM 编码方式采用的也是A 压缩律。模拟信号的量化过程如图2.2所示 [3]

图2.2 模拟信号的量化

(3)编码

所谓编码就是把量化后的信号变换成代码,其相反的过程称为译码。当然,这里的编码和译码与差错控制编码和译码是完全不同的,前者是属于信源编码的范畴。

在现有的编码方法中,若按编码的速度来分,大致可分为两大类:低速编码和高速编码。通信中一般都采用第二类。编码器的种类大体上可以归结为三类:逐次比较型、折叠级联型、混合型。在逐次比较型编码方式中,无论采用几位码,一般均按极性码、段落码、段内码的顺序排列。下面结合13折线的量化来加以说明。

模拟

y

x

量化器

量化值

在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。具体的做法是:用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。这样处理的结果,8个段落被划分成27=128个量化级。段落码和8个段落之间的关系如表2-1所示;段内码与16个量化级之间的关系见表2-2所示。

表2-1 段落码表2-2 段内码

段落序号段落码量化级段内码

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

PCM编译码器的实现可以借鉴单片PCM编码器集成芯片,如:TP3067A、CD22357等。单芯片工作时只需给出外围的时序电路即可实现,考虑到实现细节,仿真时将PCM编译码器分为编码器和译码器模块分别实现[4]。

(4)译码

PCM译码器是实现PCM编码的逆系统。其中各模块功能如下:

D/A转换器:用来实现与A/D转换相反的过程,实现数字量转化为模拟量,从而达到译码最基本的要求,也就是最起码的步骤。

瞬时扩张器:实现与瞬时压缩器相反的功能,由于采用 A 律压缩,扩张也必须采用A 律瞬时扩张器。

低通滤波器:由于采样脉冲不可能是理想冲激函数会引入孔径失真,量化时也会带来量化噪声,及信号再生时引入的定时抖动失真,需要对再生信号进行幅度及相位的补偿,同时滤除高频分量,在这里使用与编码模块中相同的低通滤波器。

2.2 A 律13折线原理

实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。通常使用的压缩器中,大多采用对数式压缩。广泛采用的两种对数压缩律是

μ

压缩律和A 压缩律。美国采用μ压缩律,我国和欧洲各国均采用A 压缩律,因

此,PCM 编码方式采用的也是A 压缩律。

所谓A 压缩律也就是压缩器具有如下特性的压缩律:

A

X A

Ax y 10,ln 1≤<+=

(2-3)

11,

ln 1ln 1<≤++=

X A

A

Ax y (2-4)

其中6.87=A 。

在实际中,A 律13折线应用比u 律13折线用得广泛。表2-3列出了计算x 值与13折线时的x 值的比较。

表2-3 计算值x 与A 律13折线时x 值的比较

y

0 81 82 83 84 85 86 87 1 x

1281

6.601

6.301

4.151

79.71

93.31

98

.11

1

按折线 分段时的x 0 128

1 64

1 32

1 16

1 8

1 4

1 2

1 1 段落 1

2

3

4

5

6 7

8

斜率

16

16

8

4

2

1

2

1

4

1

表2-3中第二行的x 值是根据6.87=A 时计算得到的,第三行的x 值是13折线分段时的值。可见,13折线各段落的分界点与6.87=A 曲线十分逼近,同时x 按2

的幂次分割有利于数字化。

A 律压扩特性是连续曲线,A 律不同压扩特性也不同,在电路上实现这样的函数规律是相当复杂的。实际中,往往采用近似于A 律函数规律的13折线(A=87.6)的压扩特性。这样,它基本上保持了连续压扩特性曲线的优点,。本设计中所用到的PCM 编码正是采用这种压扩特性来编码的,图2.3示出了这种压扩特性[5]。

图2.3 A 律13折线

2.3文本输入法简介

MATLAB 语言是当今国际上科学界 (尤其是自动控制领域) 最具影响力、也是最有活力的软件。它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。MATLAB 语言在各国高校与研究单位起着重大的作用。

MATLAB 的含义是矩阵实验室(MATRIX LABORATORY ),主要用于方便矩阵的存取,其基本元素是无须定义维数的矩阵。MATLAB 自问世以来,就是以

未压缩

(1)

(2) (3) (4) (5)

(6)

(7)

(8)

1618

1

4

1

2

1 1

y

1

878

6858

48

3828

1

32

1

64

1

128

1

数值计算称雄。MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使得MATLAB高度“向量化”。经过十几年的完善和扩充,现已发展成为线性代数课程的标准工具。由于它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。美国许多大学的实验室都安装有MATLAB供学习和研究之用。在那里,MATLAB 是攻读学位的大学生硕士生、博士生必须掌握的基本工具。MATLAB中包括了被称作工具箱(TOOLBOX)的各类应用问题的求解工具。工具箱实际上是对MATLAB进行扩展应用的一系列MATLAB函数(称为M文件),它可用来求解各类学科的问题,包括信号处理、图象处理、控制系统辨识、神经网络等。随着MATLAB版本的不断升级,其所含的工具箱的功能也越来越丰富,因此,应用范围也越来越广泛,成为涉及数值分析的各类工程师不可不用的工具。MATLAB5.3中包括了图形界面编辑GUI,改变了以前单一的“在指令窗通过文本形的指令进行各种操作”的状况。这可让使用者也可以象VB、VC、VJ、DELPHI 等那样进行一般的可视化的程序编辑。在命令窗口(matlab command window)键入simulink,就出现(SIMULINK)窗口。以往十分困难的系统仿真问题,用SIMULINK只需拖动鼠标即可轻而易举地解决问题,这也是近来受到重视的原因所在。

2.4系统功能简介

该系统主要是通过A律PCM译码,在信号传输过程中,运用A律PCM译码实现数字信号到模拟信号的转换。该设计运用MATLAB的M文件来编写程序,根据经过抽样、量化、编码后收到的码组(极性码除外),使用A律译码产生相应的控制脉冲,从而输出一个与发信端抽样值接近的脉冲,通过计算,得出理论值与实际值近似,成功达到了设计效果。

在通信系统中完成将语音信号数字化功能。PCM的实现主要包括三个步骤完成:抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。

PCM 编码通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。采用均匀量化时,其抗噪声性能与量化级数有关,每增加一位编码,其信噪比增加约6dB,但实现的电路复杂程度也随之增加,占用带宽也越宽。因此

实际采用的量化方式多为非均匀量化,通常使用信号压缩与扩张技术来实现非均匀量化。在保持信号固有的动态范围前提下,在量化前将小信号进行放大而对大信号进行压缩。通常的压缩方法有13折线A律和μ律两种标准,本课程设计采用的是A律13折线。从而成功实现了该课程设计。

3 设计步骤

3.1 系统分析

通过对脉冲编码调制的了解,将PCM与译码器原理结合,通过运用MATLAB 软件的M文件进行编程,在MATLAB软件平台里调试,输出结果,并对结果进行分析。实现该设计。

3.2 源程序的运行与解释

该程序主要是通过MATLAB软件里的M文件,结合A律13折线和PCM 译码器进行编程,实现译码输出。

源程序代码为:

x=input(‘输入编码信号向量形式:’);%输入PCM编码信号

a=input(‘输入信号范围a:’);

b=input(‘输入信号范围b:’);%a,b为输入信号范围delta=b/2048;%量化间隔

n1=x(2)*2^2+x(3)*2^1+x(4)+1;%将二进制码转换成十进制码,求得信号落在第几个段落区间

if n1==1

a1=0;b1=16;

else

a1=2^(n1+2);b1=2^(n1+3);

end %求该段落区间的范围

delta1=(b1-a1)/16;%将该段落平均分成16份

p=x(5)*2^3+x(6)*2^2+x(7)*2^1+x(8);%p为该信号落在第几个段内区间a2=a1+delta1*(p);b2=a1+delta1*(p+1);%求得段内区间范围

disp(‘译码器输出为:’)

if x(1)==1

y=(a2+b2)/2*delta %根据极性输出PCM解码值

else y=-(a2+b2)/2*delta

end

3.3 程序输入与输出结果

程序的编码输入与译码输出如下:

>> q_pcm

x=[1 0 0 1 1 1 0 1]

a=-2048

b=2048

>>y =

29.5000

3.4 输出结果分析

输入编码信号的向量第一个1是极性码,代表为正.后面的0 0 1代表的是在第二区间,其中第二区间的范围是16~32,把第二区间分成16份,每个量化区间为1,最后四位

1 1 0 1代表的是第二的区间的第13个量化间隔。译码输出为:

+

16=

+

=

y(3-1)

14

(

29

5.

13

2/)

该计算结果与程序输出结果相同,所以结果正确[6]。

4 出现的问题与解决方法

在设计过程中,出现了很多错误。但经过老师和同学的帮助,都一一解

决了。

(1)开始进行调试的时候,提示我的文件没被定义。因为以前对

MATLAB的了解比较少,所以我也不知道什么原因,于是请教了个成绩好的

同学。这才知道原来是我没打开M文件所在的文件,因此导致程序以及一些

公式无法被调用。经过重新设置,终于可以进行调试。

(2)后来,碰到一个严重的问题。程序译码输出结果为:

y

=

500

.

28

(4-1)

但我计算的结果是:

5000.29=y (4-2)

译码输出与我计算的结果差1。开始以为是我算错了,就重新算了一遍,并且请同学进行了检查,但同样发现结果是29.5000。于是把错误定在了程序上,但又感觉程序没有错误。通过对程序一句依据反复的检查,最后发现

“p=x(5)*2^3+x(6)*2^2+x(7)*2^1;”出了问题。因为我少写了一项x(8),本来应该是“p=x(5)*2^3+x(6)*2^2+x(7)*2^1+x(8);”的。根据二进制到十进制的转换,1 1 0 1的值应该是:

13

22220

1

2

3

=+++=p (4-3)

而我程序里面的结果是:

12

2221

2

3

=++=p (4-4)

所以我计算的结果与译码输出的结果相差1。成功解决这个问题后,我对接下来的设计细心许多,因为很多问题就是出在认为最简单的地方。

5 结 束 语

经过三周的努力终于完成了本次的课程设计。该课程设计对通信系统的编码、传输和译码都进行了设计与仿真,对仿真结果结合编译码理论进行了分析。

从老师那里了解到,说这门课程设计比较容易完成,于是对这次的课程设计充满了信心。可当我开始动手的时候,发现并不是他们说的那么容易,主要是我对所设计的东西不是很清楚,所以要用MATLAB 语言来编程序确实有点困难。但想归想,课程设计还得继续下去,于是开始大量的找资料,并且大致想好了设计思路。当这一切悄悄进行的时候,确实感觉到这些真的都算容易。

设计过程中,在老师和同学的帮助下,弄懂了A 律13折线和PCM 译码的原理,了解这些后总个设计思路就呈现在眼前,自己的信心也倍增。我很早就把论文格式定好,并且把概念性的东西都写好了。可当给老师检查的时候,才发现原来很多错误,其中我写的摘要和引言根本就不合格,本以为最简单的东西,偏偏是错得最多的地方。让我明白每意见事情都要认真面对,这对我接下来的设计有很大帮助,减少了很多第几错误的发生。把设计原理和基本思路写好后,开始了

最终要也最难的一项——编程。我对MATLAB语言掌握得不好,从为总个课程设计的绊脚石,连续几天都无从下手,看到别人一个个的把程序编好,并开始了仿真和结果分析,那时真的很担心,担心不能及时完成任务。不过功夫不负苦心人,在老师和同学的悉心知道下,终于把程序编写好,成功进行了调试,经过结果分析后验证了输出结果是正确的。成功达到该设计的要求和目的。

对这次课程设计,感受颇深。使我们进一步掌握了PCM编译码的工作原理及PCM系统的工作过程;加强了运用仿真软件MATLAB平台,采用M文件编程的能力;学会了通过应用软件仿真来实现各种通信系统的设计,对以后的学习和工作都起到了一定的促进作用;更好的锻炼了我们的动手能力和思维方式。

总体来说,这次实习让我受益匪浅。打破了一直局限于课本知识的学习方式,增加了我们的兴趣,并且体会到成功给大家带来的喜悦。让我明白:无论遇到什么困难,只要对自己有信心,认真思考,悉心求教,自然会找到解决的办法。相信在以后的日子里,大家会做得更好。

能成功完成该设计,离不开大家的帮助。在此,感谢老师与学姐的悉心指导,是你们让我对这门课程设计有了做下去的勇气和信心;感谢同学们,是你们不厌其烦的帮助我,才使我一次次的成功解决困难。在此,我真心的对你们说声:谢谢!

参考文献

[1]张圣勤.MATLAB7.0实用教程.北京:机械工业出版社,2006

[2]樊昌信,曹丽娜.通信原理.北京:国防工业出版社,2008

[3]Proakis J G,et al.Communication Systems.叶芝慧,等译.北京:电子工业出版社,2002

[4]刘玉君.信道编码.郑州:河南科学技术出版社,1992

[5]王秉钧,王少毅,韩敏.通信原理及其应用.北京:国防工业出版社2006

[6]桑林,郝建军,刘丹谱.数字通信.北京:邮电大学出版社,2002

相关主题
文本预览
相关文档 最新文档