资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
PCM 编码及解码的仿真1. 仿真原理及思路在 PCM 中,对模拟信号进行抽样、量化,将量化的信号电平值转化为对应的二进制码组的过程称为编码,其逆过程称为译码或解码。从理论上看,任何一个可逆的二进制码组均可用于 PCM。但是目前最常见的二进制码有三类:二进制自然码(NBC ) 、折叠二进制码组( FBC) 、格雷二进制码( RBC) 。在PCM 中实际采用的是折叠二进制码。图 1 A 律 13 折线由表 1 可见,如果把 16 个量化级分成两部分:07 的 8 个量化级对于于负极性样值脉冲,815 的 8 个量化级对应于正极性样值脉冲。自然二进制码就是一般的十进制正整数的二进制表示,在 16 个量化级中: ,采用 4 位4216码元表示为: 、 、 、 的有无组合来构成。比如第 11312b213b042个量化级可表示为 08其对应的码组可表示为:1011,其余依次类推。本程序中采用自然码的编码方式。表 1 自然码、折叠码、格雷码样值脉冲极性 量化级自然二进制码b1 b2 b3 b4 折叠二进制码b1 b2 b3 b4格雷码b1 b2 b3 b4正极性部分151413121110981 1 1 11 1 1 01 1 0 11 1 0 01 0 1 11 0 1 01 0 0 11 0 0 01 1 1 11 1 1 01 1 0 11 1 0 01 0 1 11 0 1 01 0 0 11 0 0 01 0 0 01 0 0 11 0 1 11 0 1 01 1 1 01 1 1 11 1 0 11 1 0 0负极性部分765432100 1 1 10 1 1 00 1 0 10 1 0 00 0 1 10 0 1 00 0 0 10 0 0 00 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 10 1 1 00 1 1 10 1 0 00 1 0 10 1 1 00 1 1 00 0 1 00 0 1 10 0 0 10 0 0 0CCITT 建议的 PCM 编码规则,电话语音信号的频带为 3003400Hz,抽样速率为 ,对每个抽样值进行 A 律或者 律对数压缩非均匀量化及非线性8sfkHz编码,每个样值用八位二进制代码表示,这样,每路标准话路的比特率为64kbps。表 3.5.2 中给出的是信号正值的编码,负值编码是对称的,其绝对值与此表相同。整个信号动态范围共分 13 个段落,各段落的量化间隔都不同,并且有 2的倍数关系。每个段落内位均匀分层量化,共 16 层。每个样值用 8 比特来表示,即 。这 8 比特分为三部分: 为极性码,0 代表负值,1 代12345678bb1b表正值。 称为段落码,表示段落的号码,其值为 07,代表 8 个段落。表示每个段落内均匀分层的位置,其值为 015,代表一段落内的 165678个均匀量化间隔。在 PCM 解码时,根据八比特码确定某段落内均匀分层的位置,然后去其量化间隔的中间值作为量化电平。本程序首先产生一个正弦信号,并对其进行采样量化,生成一个幅值矩阵;然后利用编码子函数对此矩阵中的每个元素按照 A 律 13 折线编码规则编码,并产生一个输出码组矩阵;最后利用解码子函数对输出码组矩阵解码,并画出编码前与解码后的波形图。2. 程序流程图产生正弦信号画出波形采样量化编码 译码 画出波形图 2 A 律十三折线编码译码流程图3. 仿真程序及运行结果仿真程序:%实验四: PCM 编码及解码仿真clear all;close all;global dt t df Nt = 0:0.01:10;x = sin(t);v = max(x);xx = x/v; %normalizesxx = floor(xx*4096);y = pcm_encode(sxx);yy = pcm_decode(y,v);drawnowfigure(1)set(1,Position,10,350,600,200)%设定窗口位置及大小 plot(t,x)title(sample sequence);figure(2)set(2,Position,10,50,600,200)%设定窗口位置及大小 plot(t,yy)title(pcm decode sequence); 编码子程序:function out=pcm_encode(x) %x encode to pcm code n=length(x); %-40960out(i,1)=1;elseout(i,1)=0;endif abs(x(i) =0 & abs(x(i)32out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0;elseif 32=abs(x(i)&abs(x(i)64out(i,2)=0;out(i,3)=0;out(i,4)=1;step=2;st=32;elseif 64=abs(x(i)&abs(x(i)128out(i,2)=0;out(i,3)=1;out(i,4)=0;step=4;st=64;elseif 128=abs(x(i)&abs(x(i)256out(i,2)=0;out(i,3)=1;out(i,4)=1;step=8;st=128;elseif 256=abs(x(i)&abs(x(i)512out(i,2)=1;out(i,3)=0;out(i,4)=0;step=16;st=256;elseif 512=abs(x(i)&abs(x(i)1024out(i,2)=1;out(i,3)=0;out(i,4)=1;step=32;st=512;elseif 1024=abs(x(i)&abs(x(i)2048out(i,2)=1;out(i,3)=1;out(i,4)=0;step=64;st=1024;elseif 2048=abs(x(i)&abs(x(i)4096out(i,2)=1;out(i,3)=1;out(i,4)=1;step=128;st=2048;endif abs(x(i)=4096out(i,2:8)=1 1 1 1 1 1 1;elsetmp=floor(abs(x(i)-st)/step); t=dec2bin(tmp,4)-48;%函数 dec2bin 输出的是 ASCII 字符串,48 对应 0out(i,5:8)=t(1:4);endendout=reshape(out,1,8*n);解码子程序:function out= pcm_decode(in,v)%decode the input pcm code%in : input the pcm code 8 bits sample%v:quantized leveln=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;for i=1:n/8ss=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;end4. 程序结果:图 3 PCM 编码、解码仿真结果5. 实验结果分析从上图可以看出,该程序能将正弦信号正确采样量化编码解码。正弦信号经 A 律 13 折线编码解码后,两条曲线基本一致。此图可以清晰地看出当信号幅度较小时,解码后的波形是平滑的曲线,而当信号幅度较大时(比如波峰和波谷附近)可以看到细小的锯齿状波形,此现象说明了 A 率 13 折线编码当输入信号小时,段落小,量化级间隔小;当输入信号大时,段落大,量化级间隔大的特点,可以有效减低小信号的量化误差。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号