您好,欢迎访问三七文档
PCM编码及解码一、设计目的和意义作为电子专业的一名学生,通信原理课程无疑是我所必修专业课中的重点,对于我将来所要从事的领域有着不可或缺的作用,学号这门课是无可厚非的。然而,对于课堂上老师的讲解,最多只能做到了解,真正的理论知识显得枯燥而乏味,没有得到实用的理论等于一纸空文。在这次课程设计中,旨在让我们更深入的了解这门科目某些应用方面以及如何应用自己所学知识去做事情。同时,锻炼我们的动手能力,以及运用软件来实现通信系统中的的工作模式。这对于我们大三,即将走出校园的一代,是很好的历练,让我们学会从发现问题,并找到问题的切入点来处理身边的来来往往。二、设计原理本设计主要会用到的知识有通信原理中的脉冲编码调制(PCM)、数字信号处理的由时域到频域的一些变换知识,如傅立叶变换、FFT以及MATLAB软件的使用等。PCM系统的原理:脉码调制—将模拟调制信号的采样值变换为脉冲码组。PCM编码包括如下三个过程。抽样:将模拟信号转换为时间离散的样本脉冲序列。量化:将离散时间连续幅度的抽样信号转换成为离散时间离散幅度的数字信号。编码:用一定位数的脉冲码组表示量化采样值。译码:把编码后的码流在通过信道传输后得到的码流译成离散时间连续幅度的信号。其系统框图如下:图1PCM系统原理图本次课程设计主要是做量化、编码、信道传输、译码四部分。(一)律15折线的原理2()2HBfoqSSQNRN律采用非均匀量化,它用的是直接法即用不同的量阶对信号进行非均匀量化,对数量化器可以满足要求。律的对数压缩特性为:ln(1)(),01ln(1)xfxx(1)其中为压缩系数。越大则压缩效果越明显,=0相当于无压缩,国际现在的标准为=255。律压缩特性可以用15折线来近似(折线图见附录中,PCM编码输入输出特性曲线)。由于正负对称,且正的第一区间与负的第一区间斜率相同,所以途中只画出了正半轴。编码规则:M1M2M3M4M5M6M7M8,(=255,L=256时)八位码。这里采用的是折叠码(FBC)。极性码M1:‘0’表示负极性,‘1’表示正极性。段落码M2M3M4:表示量化采样值所在段落的序号。电平码(段内码)M5M6M7M8:表示每一段落内的16个均匀量化级。(二)信道误码率信道误码率即信码在信道中传错的概率,在数字通信中,即为‘0’被错传为‘1’,‘1’被错传为‘0’的概率。它主要是由信道中的噪声引起的。在本设计中由于采用软件仿真,没有用噪声的方式来产生误码,而是人为的用程序将它的码流变错,先要根据误码率计算出要被传错的码元的个数,再用随机的方法让他的码元变错,这就体现了噪声所引起的误码的不可确定性。(三)量化信噪比PCM系统输出端平均信号量化噪声比仅依赖于每一个编码组数N。对于一个频带限制在Hf的信号,按照抽样定理,此时要求每秒钟最少传输的抽样脉冲数等于2Hf;若PCM系统的编码位数为N,则要求系统每秒传输2Hf个二进制脉冲。为此,这时的系统总带宽B至少等于NHf。故可用公式:(2)本设计取Hf=1000Hz,抽样点为1000时,sf=1000kHz;当抽样点可变时,sf=k*Hf。三、详细设计步骤由于对理论知识掌握不足,在拿到设计题目时候曾一度不知如何下手,为此,我花费了整整两天的功夫,多次翻看课本第五章关于脉冲编码调制PCM的相关知识,查找资料,寻找前人在这些方面的成果。浏览网页,搜索于此相关公式、论文,咨询同学、老师,找出解决方案。经过一番努力,总算有了初步了解。开始着手编写设计程序了,发现过去MATLAB软件的应用知识忘掉了许多,又用了半天时间对其熟悉,并找到设计中可能用到的函数,学习其用法。终于开始了正题,可编写程序过程中总是出现各种各样的错误,比如randn函数的使用,总想着像其他函数那样画出了“多彩”的波形。在编程过程中随时打开百度搜索。还有就是非均匀量化的信噪比公式书上根本没有,从各方资料上才算获悉其具体表达式。编写程序中,分为几个部分:PCM非均匀量化编码函数,解码函数,误码产生函数,均匀量化编码函数,以及主函数,其中主函数除对各支函数的调用之外,还产生了长度为1000的标准整台分布函数,绘制了PCM编码输入输出关系曲线,计算出了均匀,以及非均匀量化的量化误差等。其中正态分布采用randn函数产生,输入输出关系曲线采用书本中公式来绘制,量化误差亦有相关公式考参考。非均匀量化编码函数参考清华大学出版社出版的《现代通信原理》一书中P133表5—4,U律的PCM编码表编写,程序中首先判断输入数据的正负,确定M1位,然后将该数取绝对值,根据表中的量化间隔划分,确认各M的取值,最后将所得M的序列保存在以数组总y=str2double(dec2bin(p))。非均匀量化解码表,亦根据此表编程,先判断M1位确定数值的正负,之后通过逐个判断,定位取值区间来解码,其中,由于量化间隔的关系,取值时取量化间隔中间值作为解码输出。误码产生函数,通过产生随机序列p=randperm(k),从产生序列中第一、二两个作为产生误码的行和列,从而得到随机的误码分布。四、设计结果及分析运行主程序,观测到:x1=randn(1,1000);x10=fft(x1,1024)(连续图)图2、长度为1000的标准正态分布的随机信号,时域波形及频谱图u=255;xx=0:0.01:1;xy=log(1+u*xx)/log(1+u);图3、PCM编码输入输出关系曲线t=0:2*pi/n:2*pi;x=sin(t);x0=fft(x,256);y(i)=depcm(num8(i,:));y=y/4079;y0=fft(y,256);图4、编码前以及解码后时域信号,和频域信号的波形t=0:100*pi/n:100*pi;x=sin(t);x0=fft(x,256);y(i)=depcm(num8(i,:));y=y/4079;y0=fft(y,256);图5、改变输入信号得到x1=randn(1,1000);x10=fft(x1,1024)(离散图)图6、正态分布离散点时域频域图(作为均匀量化输入信号)sl=100;xi=1:100;yi=sin(xi);jylh=jypcm(yi,sl,js);图7、均匀量化解码图2()162265536HBfoqSSQNRN同时在MATLAB工作窗口中显示:非均匀量化信噪比:65536均匀量化信噪比:1.2058e+003误码率:kl量化级数js注:(1)非均匀量化SQNR由公式(4),Hf=1000Hz,N=8,B=N*Hf=8000Hz,代入公式(2)可得(3)10lg48.16DBSQNRSQNRDB(1)均匀量化SNR由公式6.02*1.76SNRN(4)N=8可得SNR=49.88DB五、体会通过本次课程设计,让我更深入的了解了PCM脉冲编码调制原理,以及实现过程,使我对通信系统原理这门科目产生了很大的兴趣,从简单的软件仿真让我知晓了通信系统的整个框架结构,同时在更多的学习通信原理课程之外,我又一次的接触到了MATLAB仿真软件的强大功能,在我们这一专业中许多用到仿真的软件中算是全能型结构,集原理方框图以及编程于一体。相信我以后还有更多的机会与此软件近距离接触,从而从中获悉更多的宝贵知识财富,当然,在这次课程设计中,更重要的是让我学会了动手做事情的能力,以及从中获取更多快乐的方式。这次的课程设计相对以往来说,时间紧,任务重,在考试关头繁忙,自然做的不那么如意,一些波形的显示不尽理想,但能够按时的完成任务并从中得到尝试的勇气对我来说已经是足够的了。六、参考文献[1]曹志刚、钱亚生.现代通信原理.清华大学出版社.1991.11[2]樊昌信、张甫翊、徐炳祥、吴成柯.通信原理(第5版).国防科技大学出版社2001.5[3]张志涌.精通MATLAB6.5版.北京航空航天大学出版社.2003.3[4]苏金明、张莲花、刘波.MATLAB工具箱应用.电子工业出版社.2004.1[5]程佩青.数字信号处理教程(第二版).清华大学出版社.2001.8附录:函数一:非均匀PCM量化编码:functionpcm=umpcm(x);%PCM编码,入口参数:X(-4079X4079),出口参数PCM为一8码序列;pcm=zeros(1,8);ifx0k=0;elsek=1;endx=abs(x);p=x;ifx=15.5pcm=[k,0,0,0];elseifx=47.5pcm=[k,0,0,1];p=floor((x-15.5)/2);elseifx=111.5pcm=[k,0,1,0];p=floor((x-47.5)/4);elseifx=239.5pcm=[k,0,1,1];p=floor((x-111.5)/8);elseifx=495.5pcm=[k,1,0,0];p=floor((x-239.5)/16);elseifx=1007.5pcm=[k,1,0,1];p=floor((x-495.5)/32);elseifx=2031.5pcm=[k,1,1,0];p=floor((x-1007.5)/64);elseifx=4079.5pcm=[k,1,1,1];p=floor((x-2031.5)/128);endendendendendendendendy=str2double(dec2bin(p));pcm(5)=floor(y/1000);pcm(6)=floor(mod(y,1000)/100);pcm(7)=floor(mod(y,100)/10);pcm(8)=floor(mod(y,10));%dec2bin:将十进制数转换为二进制数;%str2double:将字符型数转化为double型;%floor:像低位取整%mod:求两数的余数函数二、非均匀PCM解码functiondpcm=depcm(s);%解码函数,入口参数S,二进制序列,出口参数:dpcm数据dpcm=0;k=s(2)*4+s(3)*2+s(4);h=s(5)*8+s(6)*4+s(7)*2+s(8);switchkcase0dpcm=h;case1dpcm=16+h*2+1;case2dpcm=48+h*4+2;case3dpcm=112+h*8+4;case4dpcm=240+h*16+8;case5dpcm=496+h*32+16;case6dpcm=1008+h*64+32;case7dpcm=2032+h*128+64;otherwisedisp('error');endifs(1)==0dpcm=0-dpcm;end函数三、误码率生成函数functionwm=wml(num8,k);p=randperm(k)%产生长度为K的随机序列fori=1:kq(i)=num8(p(1)+i,p(2));ifq(i)==0q(i)=1;elseq(i)=0;endnum8(p(1)+i,p(2))=q(i);end函数四、均匀PCM编码functionpcm=jypcm(y,k,n);%均匀量化函数,入口参数%S:输入信号电平,K:信号长度,N:量化级数pcm=zeros(k,n);A=max(y);%取出该函数的最大值derta=A/2^(n-1);y0=fix(y/derta);fori=1:kify0(i)0pcm(i,1)=0;y0(i)=0-y0(i);elsepcm(i,1)=1;end%yy(i)=dec2bin(y0(i));yyy(i)=str2double(dec2bin(y0(i)));forj=1:(n-1)pcm(i,n-j+1)=mod(floor(yyy(i)/10^(j-1)),10^j);end;end函数五、主函数clc;clear;n=200;num8=zeros(n+1,8);t=0:100*pi/n:100*pi;x1=randn(1,1000);%产生一正态分布序列x10=fft(x1,1024);x=sin(t);%待量化编码序列x0=fft(x,2
本文标题:PCM编码及解码
链接地址:https://www.777doc.com/doc-5747329 .html