您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 语音信号的A律13折线PCM编译码的MATLAB实现
通信原理课程设计报告书课题名称语音信号的A律13折线PCM编译码的MATLAB实现姓名学号学院通信与电子工程学院专业通信工程指导教师2015年4月9日※※※※※※※※※※※※※※※※※※※※※※※※2009级通信工程专业通信原理课程设计1设计目的1.进一步学习PCM编译码器原理;2.在通信系统仿真软件MATLAB平台上,采用M文件设计A律PCM码译码器;3.学会利用MATLAB对PCM编码这种实际问题进行处理,将理论应用于实践;4.对设计项目进行调试,对译码器进行仿真;5.对仿真结果结合编译码理论进行分析。2设计原理2.1PCM编码原理脉冲编码调制(PCM,PulseCodeModulation)在通信系统中完成将语音信号数字化功能。是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对于音频信号。PCM对信号每秒钟取样8000次;每次取样为8个位,总共64kbps。PCM的实现主要包括三个步骤完成:抽样、量化、编码。分别完成时间上离散、幅度上离散、及量化信号的二进制表示。根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和律方式,本设计采用了A律方式。由于A律压缩实现复杂,常使用13折线法编码,采用非均匀量化PCM编码示意图如图1所示。图1PCM原理框图1.抽样所谓抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号。该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号。它的抽样速率的下限是由抽样定理确定的。在一个频带限制在(0,)hf内的时间连续信号()ft,如果以1/2hf的时间间隔对它进行抽样,那么根据这些抽样值就能完全恢复原信号。或者说,如果一个连续信号()ft的频谱中最高频率不超过hf,当抽样频率2shff时,抽样后的信号话音输入低通滤波瞬时压缩抽样量化编码信道再生解码解调瞬时扩张低通滤波话音输出就包含原连续的全部信息。抽样定理在实际应用中应注意在抽样前后模拟信号进行滤波,把高于二分之一抽样频率的频率滤掉。这是抽样中必不可少的步骤。2.量化从数学上来看,量化就是把一个连续幅度值的无限数集合映射成一个离散幅度值的有限数集合。如图2所示,量化器Q输出L个量化值ky,Lk,,3,2,1。ky常称为重建电平或量化电平。当量化器输入信号幅度x落在kx与1kx之间时,量化器输出电平为ky。这个量化过程可以表达为:,}{)(1kkkyxxxQxQyLk,,3,2,1(1)这里kx称为分层电平。通常:kkkxx1(2)其中k称为量化间隔。模拟信号的量化分为均匀量化和非均匀量化。由于均匀量化存在的主要缺点是:无论抽样值大小如何,量化噪声的均方根值都固定不变。因此,当信号()mt较小时,则信号量化噪声功率比也就很小,这样,对于弱信号时的量化信噪比就难以达到给定的要求。通常,把满足信噪比要求的输入信号取值范围定义为动态范围,可见,均匀量化时的信号动态范围将受到较大的限制。为了克服这个缺点,实际中,往往采用非均匀量化。非均匀量化是根据信号的不同区间来确定量化间隔的。对于信号取值小的区间,其量化间隔v也小;反之,量化间隔就大。它与均匀量化相比,有两个突出的优点。首先,当输入量化器的信号具有非均匀分布的概率密度(实际中常常是这样)时,非均匀量化器的输出端可以得到较高的平均信号量化噪声功率比;其次,非均匀量化时,量化噪声功率的均方根值基本上与信号抽样值成比例。因此量化噪声对大、小信号的影响大致相同,即改善了小信号时的量化信噪比。实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。通常使用的压缩器中,大多采用对数式压缩。广泛采用的两种对数压缩律是压缩律和A压缩律。美国采用压缩律,我国和欧洲各国均采用A压缩律,因此,PCM编码方式采用的也是A压缩律。模拟信号的量化过程如图2所示图2模拟信号的量化3.编码模拟入yx量化器量化值所谓编码就是把量化后的信号变换成代码,其相反的过程称为译码。当然,这里的编码和译码与差错控制编码和译码是完全不同的,前者是属于信源编码的范畴。在现有的编码方法中,若按编码的速度来分,大致可分为两大类:低速编码和高速编码。通信中一般都采用第二类。编码器的种类大体上可以归结为三类:逐次比较型、折叠级联型、混合型。在逐次比较型编码方式中,无论采用几位码,一般均按极性码、段落码、段内码的顺序排列。下面结合13折线的量化来加以说明。在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。具体的做法是:用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。这样处理的结果,8个段落被划分成128个量化级。段落码和8个段落之间的关系如表1所示;段内码与16个量化级之间的关系见表2所示。表1段落码表2段内码段落序号段落码段落范围量化间隔段内码量化间隔段内码81111024-2048151111701117110512-1024141110601106101256-512131101501015100128-25612110040100401164-12811101130011301032-6410101020010200116-32910011000110000-1681000000004.译码PCM译码器是实现PCM编码的逆系统。其中各模块功能如下:D/A转换器:用来实现与A/D转换相反的过程,实现数字量转化为模拟量,从而达到译码最基本的要求,也就是最起码的步骤。瞬时扩张器:实现与瞬时压缩器相反的功能,由于采用A律压缩,扩张也必须采用A律瞬时扩张器。低通滤波器:由于采样脉冲不可能是理想冲激函数会引入孔径失真,量化时也会带来量化噪声,及信号再生时引入的定时抖动失真,需要对再生信号进行幅度及相位的补偿,同时滤除高频分量,在这里使用与编码模块中相同的低通滤波器。2.2A律13折线原理实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。通常使用的压缩器中,大多采用对数式压缩。广泛采用的两种对数压缩律是压缩律和A压缩律。美国采用压缩律,我国和欧洲各国均采用A压缩律,因此,PCM编码方式采用的也是A压缩律。所谓A压缩律也就是压缩器具有如下特性的压缩律:AXAAxy10,ln1(3)11,ln1ln1XAAAxy(4)其中87.6A。在实际中,A律13折线应用比律13折线用得广泛。表3列出了计算x值与13折线时的x值的比较。表3计算值x与A律13折线时x值的比较y0818283848586871x012816.6016.3014.15179.7193.3198.111按折线分段时的x012816413211618141211段落12345678斜率161684212141表3中第二行的x值是根据87.6A时计算得到的,第三行的x值是13折线分段时的值。可见,13折线各段落的分界点与87.6A曲线十分逼近,同时x按2的幂次分割有利于数字化。A律压扩特性是连续曲线,A律不同压扩特性也不同,在电路上实现这样的函数规律是相当复杂的。实际中,往往采用近似于A律函数规律的13折线(87.6A)的压扩特性。这样,它基本上保持了连续压扩特性曲线的优点,。本设计中所用到的PCM编码正是采用这种压扩特性来编码的。3程序设计3.1程序流程图1.PCM编码函数设计流程图图3主函数流程图2.PCM编码函数设计流程图图4编码函数输入信号判断符号归一化和量化段落判断段内判断输出开始结束语音信源PCM编码调制,加噪声,解调PCM解码开始结束3.PCM译码函数设计流程图图5译码3.2程序代码(见附录)4仿真结果及分析4.1举例分析4.2通过绘制图形整体分析5设计体会参考文献[1]樊昌信,曹丽娜.通信原理[M].北京:国防工业出版社,2011.[2]别志红,别红霞.信息与通信系统仿真[M].北京:北京邮电大学出版社,2010.[3]赵守彬,李鸿刚.利用Matlab实现PCM编码的A律13折线法量化[J].科技信息,2010.[4]刘全金.一种A律PCM编码的简化方法[J].安庆师范学院学报(自然科学版),2007年11月第13卷第4期.[5]曹志刚,钱亚生.现代通信原理[M].北京:清华大学出版社,1992.[6]张志勇,杨祖撄.MATLAB教程[M].北京:北京航空航天大学出版社,2006.输入码组提取符号判断段落位置判断段内位置判断符号位输出开始结束附录:1.主程序closeall;clearall;N=1001;[M]=wavread('a.wav');S=M(2000:3000);%语音信源plot(S,'r');holdon;%画出编码前信号t1=pcm1(S);%调用编码函数t2=tqm(t1);%将N行8列矩阵转换为1行8*N列的矩阵的函数sim('mod1');%调制sim('channel1');%送入信道,加噪声sim('dem1');%解调t6=tqn(t5);%将8*N行1列的矩阵转换为N行8列矩阵的函数t7=pcm2(t6);%调用译码函数plot(t7);%画出译码后信号title('PCM编译码前后信号的比较');%标题legend('PCM编码前的信号','PCM译码后的信号')%添加图例注解xlabel('时间')%x坐标名ylabel('幅值')%y坐标名gridon%添加网格axissquare%将图形设置为正方形2.A律十三折线PCM编码函数functionY=pcm1(S)z=sign(S);%判断S的正负Max=max(abs(S));%求S的最大值S=abs(S/Max);%归一化Q=2048*S;%量化Y=zeros(length(S),8);%存储矩阵(全零)%%段落码判断%%form=1:length(S)ifQ(m)128&Q(m)2048%在第五段与第八段之间,段位码第一位都为“1”Y(m,2)=1;endif(Q(m)32&Q(m)128)||(Q(m)512&Q(m)2048)Y(m,3)=1;%在第三四七八段内,段位码第二位为“1”endif(Q(m)16&Q(m)32)||(Q(m)64&Q(m)128)||(Q(m)256&Q(m)512)||(Q(m)1024&Q(m)2048)Y(m,4)=1;%在二四六八段内,段位码第三位为“1”end%符号位的判断ifz(m)0Y(m,1)=1;elseifz(m)0Y(m,1)=0;endend%段内码判断程序N=zeros(length(S));form=1:length(S)N(m)=Y(m,2)*4+Y(m,3)*2+Y(m,4)+1;%找到Y位于第几段enda=[0,16,32,64,128,256,512,1024];%量化间隔b=[1,1,2,4,8,16,32,64];%除以16,得到每段的最小量化间隔form=1:length(S)q=ceil((Q(m)-a(N(m)))/b(N(m)));%求出在段内的位置ifq==0Y(m,(5:8))=[0,0,0,0];%如果输入为零则输出“0”elsek=num2str(dec2bin(q-1,4));%编码段内码为二进制Y(m,5)=str2num(k(1));Y(m,6)=str2num(k(2));Y(m,7)=str2num(k(3));Y(m,8)=str2num(k(4));endendend3.将N行8列矩阵转换为1行8*N列的矩阵的函数functiont1=tqm(R)t1=zeros(length(R)*8,1);c=1;fora=1:length(R)-1forb=1:8t1(c)=R(a,b);c=
本文标题:语音信号的A律13折线PCM编译码的MATLAB实现
链接地址:https://www.777doc.com/doc-2645921 .html