您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > MATLAB编码实现均匀PCM与非均匀PCM
均匀PCM与非均匀PCM实验目的1.掌握MATLAB语言的函数调用,提高编程编程能力。2.掌握量化信噪比的基本概念。3.学习均匀量化和非均匀量化的基本原理,加深对非均匀量化的理解。实验原理均匀量化的基本原理在脉冲编码调制中,模拟信号首先以高于奈奎斯特的速率采样,然后将所的样本量化。假设模拟信号是以[-Ⅹmax,Ⅹmax]表示的区间内分布的,而量化电平数很大。量化电平可以是相等的或是不相等的;前者就属于均匀PCM,而后者就是非均匀PCM。关于量化的几个基本概念,量化间隔;量化误差;量化信噪比。(1)相邻量化电平间距离称量化间隔,用“Δ”表示。(2)设抽样值为()sxkT,量化后的值为()qsxkT,xq(kTs)与x(kTs)的误差称为量化误差,又称为量化噪声;量化误差不超过±Δ/2,而量化级数目越多,Δ值越小,量化误差也越小。(3)衡量量化的性能好坏最常用指标是量化信噪比(Sq/Nq),其中Sq表示量化信号值xq(kTs)产生的功率,Nq表示量化误差功率,量化信噪比越大,则量化性能越好。在均匀PCM中,长度为2Xmax的区间[-Ⅹmax,Ⅹmax]被划分为N个相等的子区间,每一子区间长度为△=2Xmax/N。如果N足够大,那么在每一子区间内输入的密度函数就能认为是均匀的,产生的失真为D=△2/12。如果N是2的幂次方即2vN,那么就要求用v比特来表示每个量化电平。这就意味着,如果模拟信号的带宽是W,采样又是在奈奎斯特率下完成的,那么传输PCM信号所要求的带宽至少是vW(实际上1.5vW比较接近于实际)。这时失真由下式给出,222maxmax212334vxxDN(1-1)如果模拟信号的功率用2X表示,则信号/量化噪声的比(SQNR)由下式给出222max22max233434vvuXSQNRNxXxX(1-2)式中uX表示归一化输入,定义为maxuXXx(1-3)以分贝(dB)计的SQNR为24.86|dBudBSQNRvX(1-4)量化以后,这些已量化的电平用v比特对每个已量化电平进行编码.编码通常使用自然二进制码(NBC),即最低电平映射为全0序列,最高电平映射为全1序列,全部其余的电平按已量化值的递增次序映射。非均匀量化的基本原理正变换:ln(1)()sgn()ln(1)xygxx,其中x是归一化输入(1x),是一个参数,在标准律的非线性中它等于255。反变换:(1)1sgn()yxy在非均匀量化PCM中,输入信号首先通过一非线性环节以减小输入的动态范围,再将输出加到某一均匀PCM系统上。在接收端,输出再通过另一非线形环节,该环节是在发送端所用的非线性环节的逆特征。这样,总的效果就等效于一个在量化电平之间具有非均匀间隔的PCM系统。非均匀量化时,量化器随着输入信号的大小采用不同的量化间隔,大信号时采用大的量化间隔,小信号时采用小的量化间隔,可以以较少的量化电平数达到输入动态范围的要求一般对语音信号传输来说,所使用的非线性可以是律的非线性,或是A律的非线性,中国和欧洲采用A率压缩特性(A=87.56),北美和日本采用律压缩特性(=255),压缩特性分别如下:μ律:1(1)(11)1(1)nxyxn(1-5)A律:10||11n11n||1||111nAxxAAyAxxAA(1-6)式中,x为归一化输入,y为归一化输出,A、为压缩系数,式(3-1)也可以表示为,ln(1)()sgn()ln(1)xygxx(1-7)本实验主要仿真律的有关特性。如图1-1所示为不同值对应的输入输出关系曲线.图1-1不同值对应的输入输出关系律的非线性的逆为(1)1sgn()yxy量化信噪比的基本概念实验内容:(1)均匀量化产生一个幅度为1和1的正弦信号,用均匀量化方法分别用8电平和16电平进行量化,在同一个坐标轴上画出原信号和已量化信号,比较这两种情况下的SQNR。(2)均匀量化产生长度为500的零均值、单位方差的高斯随机变量序列,利用u_pcm.m求当量化电平数为64时所得的SQNR。求出该序列的前5个值、相应的量化值和相应的码字。(3)非均匀量化产生一个长度为500,按(0,1)N分布的随机变量序列。用16、64和128量化电平数和255的律非线性,并求SQNR。(4)Matlab代码:(5)(1)下面给出的M文件u-pcm.m用采样值序列和要求的量化电平数作输入,求得已量化序列、编码序列和产生的SQNR(以dB计)。function[sqnr,a_quan,code]=u_pcm(a,n)%U_PCMuniformPCMencodingofasequence%[SQNR,A_QUAN,CODE]=U_PCM(A,N)%a=inputsequence.%n=numberofquantizationlevels(even).%sqnr=outputSQNR(indB).%a_quan=quantizedoutputbeforeencoding.%code=theencodedoutput.amax=max(abs(a));a_quan=a/amax;b_quan=a_quan;d=2/n;q=d.*[0:n-1];q=q-((n-1)/2)*d;fori=1:na_quan(find((q(i)-d/2=a_quan)&(a_quan=q(i)+d/2)))=...q(i).*ones(1,length(find((q(i)-d/2=a_quan)&(a_quan=q(i)+d/2))));b_quan(find(a_quan==q(i)))=(i-1).*ones(1,length(find(a_quan==q(i))));enda_quan=a_quan*amax;nu=ceil(log2(n));code=zeros(length(a),nu);fori=1:length(a)forj=nu:-1:0if(fix(b_quan(i)/(2^j))==1)code(i,(nu-j))=1;b_quan(i)=b_quan(i)-2^j;endendendsqnr=20*log10(norm(a)/norm(a-a_quan));PCM.M%SQNR_8=sqnr8%SQNR_16=sqnr16x=0:0.1*pi:4*pi;y=sin(x);[sqnr8,a_quan8,code8]=u_pcm(y,8);[sqnr16,a_quan16,code16]=u_pcm(y,16);plot(x,y,x,a_quan8,x,a_quan16);(2)PCM2.Mx=1:500;y=randn(1,500);[sqnr64,a_quan64,code64]=u_pcm(y,64);%SQNR64=squnr64a_quan64_result=[a_quan64(1),a_quan64(2),...a_quan64(3),a_quan64(4),a_quan64(5)]%Ç°5¸öÁ¿»¯Öµcode64_result=[code64(1,1:6),code64(2,1:6),...code64(3,1:6),code64(4,1:6),code64(5,1:6)]%Ç°5¸öÂë×Ö(3)可能用到的子程序:mulaw.m和invmulaw.m用于实现律的非线性和它的逆.mulaw.mfunction[y,a]=mulaw(x,mu)%MULAWmu-lawnonlinearityfornonuniformPCM%Y=MULAW(X,MU).%X=inputvector.a=max(abs(x));y=(log(1+mu*abs(x/a))./log(1+mu)).*signum(x);invmulaw.mfunctionx=invmulaw(y,mu)%INVMULAWtheinverseofmu-lawnonlinearity%X=INVMULAW(Y,MU)Y=normalizedoutputofthemu-lawnonlinearity.x=(((1+mu).^(abs(y))-1)./mu).*signum(y);signum.mfunctiony=signum(x)%SIGNUMfindsthesignumofavector.%Y=SIGNUM(X)%X=inputvectory=x;y(find(x0))=ones(size(find(x0)));y(find(x0))=-ones(size(find(x0)));y(find(x==0))=zeros(size(find(x==0)));mula_pcm.mfunction[sqnr,a_quan,code]=mula_pcm(a,n,mu)%MULA_PCMmu-lawPCMencodingofasequence%[SQNR,A_QUAN,CODE]=MULA_PCM(A,N,MU).%a=inputsequence.%n=numberofquantizationlevels(even).%sqnr=outputSQNR(indB).%a_quan=quantizedoutputbeforeencoding.%code=theencodedoutput.[y,maximum]=mulaw(a,mu);[sqnr,y_q,code]=u_pcm(y,n);a_quan=invmulaw(y_q,mu);a_quan=maximum*a_quan;sqnr=20*log10(norm(a)/norm(a-a_quan));主程序:令向量a是按N(0,1)产生的长度为500的向量,即a=randn(1,500)pcm3.ma=randn(1,500);[sqnr16,a_quan16,code16]=mula_pcm(a,16,255);[sqnr64,a_quan64,code64]=mula_pcm(a,64,255);[sqnr128,a_quan128,code128]=mula_pcm(a,128,255);[Y,I]=sort(a);sqnr16sqnr64sqnr128实验分析:(1)(2)a_quan64_result=-0.4331-1.69310.11810.2756-1.1419code64_result=Columns1through1701101000101010000Columns18through301100011010001(3)sqnr16=13.5210sqnr64=25.4650sqnr128=31.7463每次实验结果有差异!随机产生实验总结:量化误差与量化比特数成正比,每增加一个比特,即每增加两倍的量化电平,误差约增加6db.
本文标题:MATLAB编码实现均匀PCM与非均匀PCM
链接地址:https://www.777doc.com/doc-4192403 .html