PCM编码及解码的仿真.doc

上传人:啊飒飒 文档编号:10733210 上传时间:2021-06-01 格式:DOC 页数:5 大小:127.50KB
返回 下载 相关 举报
PCM编码及解码的仿真.doc_第1页
第1页 / 共5页
PCM编码及解码的仿真.doc_第2页
第2页 / 共5页
PCM编码及解码的仿真.doc_第3页
第3页 / 共5页
PCM编码及解码的仿真.doc_第4页
第4页 / 共5页
PCM编码及解码的仿真.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《PCM编码及解码的仿真.doc》由会员分享,可在线阅读,更多相关《PCM编码及解码的仿真.doc(5页珍藏版)》请在三一文库上搜索。

1、PCM编码及解码的仿真 1. 仿真原理及思路在PCM中,对模拟信号进行抽样、量化,将量化的信号电平值转化为对应的二进制码组的过程称为编码,其逆过程称为译码或解码。从理论上看,任何一个可逆的二进制码组均可用于PCM。但是目前最常见的二进制码有三类:二进制自然码(NBC)、折叠二进制码组(FBC)、格雷二进制码(RBC)。在PCM中实际采用的是折叠二进制码。图1 A律13折线由表1可见,如果把16个量化级分成两部分:07的8个量化级对于于负极性样值脉冲,815的8个量化级对应于正极性样值脉冲。自然二进制码就是一般的十进制正整数的二进制表示,在16个量化级中:,采用4位码元表示为:、的有无组合来构成

2、。比如第11个量化级可表示为其对应的码组可表示为: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

3、 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律或者律对数压缩非均匀量化及非线性编码,每个样值用八位二进制代码表示,这样,每路标准话路的比特率为64kbps。表

4、3.5.2中给出的是信号正值的编码,负值编码是对称的,其绝对值与此表相同。整个信号动态范围共分13个段落,各段落的量化间隔都不同,并且有2的倍数关系。每个段落内位均匀分层量化,共16层。每个样值用8比特来表示,即。这8比特分为三部分:为极性码,0代表负值,1代表正值。称为段落码,表示段落的号码,其值为07,代表8个段落。表示每个段落内均匀分层的位置,其值为015,代表一段落内的16个均匀量化间隔。在PCM解码时,根据八比特码确定某段落内均匀分层的位置,然后去其量化间隔的中间值作为量化电平。本程序首先产生一个正弦信号,并对其进行采样量化,生成一个幅值矩阵;然后利用编码子函数对此矩阵中的每个元素按

5、照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);drawnowf

6、igure(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); %-4096x0 out(i,1)=1; else out(i,1)=0; end if abs(x(i) =0 & abs(x

7、(i)32 out(i,2)=0;out(i,3)=0;out(i,4)=0;step=2;st=0; elseif 32=abs(x(i)&abs(x(i)64 out(i,2)=0;out(i,3)=0;out(i,4)=1;step=2;st=32; elseif 64=abs(x(i)&abs(x(i)128 out(i,2)=0;out(i,3)=1;out(i,4)=0;step=4;st=64; elseif 128=abs(x(i)&abs(x(i)256 out(i,2)=0;out(i,3)=1;out(i,4)=1;step=8;st=128; elseif 256=ab

8、s(x(i)&abs(x(i)512 out(i,2)=1;out(i,3)=0;out(i,4)=0;step=16;st=256; elseif 512=abs(x(i)&abs(x(i)1024 out(i,2)=1;out(i,3)=0;out(i,4)=1;step=32;st=512; elseif 1024=abs(x(i)&abs(x(i)2048 out(i,2)=1;out(i,3)=1;out(i,4)=0;step=64;st=1024; elseif 2048=abs(x(i)&abs(x(i)4096 out(i,2)=1;out(i,3)=1;out(i,4)=1

9、;step=128;st=2048; end if abs(x(i)=4096 out(i,2:8)=1 1 1 1 1 1 1; else tmp=floor(abs(x(i)-st)/step); t=dec2bin(tmp,4)-48;%函数dec2bin输出的是ASCII字符串,48对应0 out(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

10、: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/8 ss=2*in(i,1)-1; tmp = in(i,2)*4+in(i,3)*2+in(i,4)+1; st = s

11、lot(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折线编码当输入信号小时,段落小,量化级间隔小;当输入信号大时,段落大,量化级间隔大的特点,可以有效减低小信号的量化误差。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1