实验三 PCM编码译码Word格式.docx
《实验三 PCM编码译码Word格式.docx》由会员分享,可在线阅读,更多相关《实验三 PCM编码译码Word格式.docx(10页珍藏版)》请在冰豆网上搜索。
律方式,本设计采用了A律方式。
由于A律压缩实现复杂,常使用13折线法编码,采用非均匀量化PCM编码示意图如图1所示
图1PCM编码示意图
2.抽样:
在一系列离散点上,对信号抽取样值称为抽样。
其模拟信号的抽样过程如图2所示。
图2模拟信号的抽样过程图
3.非均匀量化
图3非均匀13折线压缩特性曲线
图4非均匀13折线编码原理图
在实际应用中,量化器设计好后,量化电平数M和量化间隔
都是确定的。
量化噪声Nq也是确定的。
但是,信号的强度会影响信号量噪比,当信号小时,信号量噪比也就越小。
因此,均匀量化器对小输入信号很不利,为了克服这个缺点,以改善小信号时的信号量噪比,采用下述的非均匀量化方式。
在非均匀量化中,量化间隔是随信号抽样值的不同而变化的。
信号抽样值小时,量化间隔
也小;
信号抽样值大时,量化间隔
也大,非均匀量化的实现方法有两种:
一种是北美和日本采用的μ律压扩,一种是欧洲和我国采用的A律压扩,常采用的近似算法是13折线法,该算法的压缩特性图如图3所示。
信号小时,Δ小,信号大时,Δ大。
一般语音信号,信号幅度小出现的概率大,信号幅度大出现的概率小。
通过非均匀量化,使得平均信噪比增大。
13折线A律PCM的非线性编码方法具体过程如表1所示。
在13折线法中采用的折叠码有8位。
其中一位c1表示量化值的极性正负,后7位分为段落码和段内码两部分。
用于表示量化值的绝对值。
其中第2~4位(c2~c4)是段落码,5~8位(c5~c8)为段内码,可以表示每一段落内的16种量化电平。
段内码代表的16个量化电平是均匀分布的,因此,这7位码总共能表示27=128种量化值。
编码方法如下所示:
极性码 段落码 段内码
C1C2C3C4C5C6C7C8
(1)将量化区间[a,b]分为4096个小段
(2)正半轴2048个小段,负半轴2048个小段
(3)每个小段用Δ表示
表1非均匀13折线编码原理
四、程序设计
1.首先给定一个模拟信号。
2.根据PCM(脉冲编码调制)原理,对模拟信号进行抽样,得到离散信号,然后进行非均匀量化编码,采用13折线法。
3.在Matlab当中进行操作时,首先要画出经过PCM调制的模拟信号波形。
4.将经过PCM调制的信号叠加上一个高斯白噪声信道,然后,根据非均匀量化译码原理,得到译码后的波形,即原始的模拟信号。
五、设计流程
1.输入一个模拟信号,根据奈奎斯特定理,进行抽样,得到时间上离散的模拟信号。
2.根据非均匀量化编码(13折线法),设定模拟信号各个段的段落码和段内码。
并画出量化编码后的波形。
3.根据非均匀量化编码(13折线法)的逆向思想,即不同的段落码和段内码分别对应不同的电平值,最终得到译码后的模拟信号,然后画出译码后的模拟信号的波形。
六、源程序代码
T=0.002;
t=-0.1:
T:
0.1;
xt=cos(2*pi*30*t)+sin(2*pi*65*t);
fs=500;
sdt=1/fs;
t1=-0.1:
sdt:
st=cos(2*pi*30*t)+sin(2*pi*65*t);
figure
(1);
subplot(3,1,1);
plot(t,xt);
title('
原始信号'
);
gridon
subplot(3,1,2);
stem(t1,st,'
.'
量化信号'
抽样信号'
gridon
n=length(st);
M=max(st);
C=(st/M)*2048;
code=zeros(1,8);
fori=1:
n
ifC(i)>
=0
code(i,1)=1
else
code(i,1)=0
end
ifabs(C(i))>
=0&
&
abs(C(i))<
16
code(i,2)=0;
code(i,3)=0;
code(i,4)=0;
step=1;
start=0;
elseif16<
=abs(C(i))&
32
code(i,4)=1;
start=16;
elseif32<
64
code(i,3)=1;
step=2;
start=32;
elseif64<
128
step=4;
start=64;
elseif128<
256
code(i,2)=1;
step=8;
start=128;
elseif256<
512
step=16;
start=256;
elseif512<
1024
step=32;
start=512;
elseif1024<
2048
step=64;
start=1024;
B=floor((abs(C(i))-start)/step);
t=dec2bin(B,4)-48;
code(i,5:
8)=t(1:
4);
code=reshape(code'
1,8*n);
subplot(3,1,3);
stem(code,'
axis([16401]);
编码信号'
y=awgn(code,5);
figure
(2);
stem(y,'
axis([16403]);
叠加加性高斯信号的信号'
n=length(code);
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;
n/8
ss=2*code(i,1)-1;
tmp=code(i,2)*4+code(i,3)*2+code(i,4)+1;
st=slot(tmp);
dt=(code(i,5)*8+code(i,6)*4+code(i,7)*2+code(i,8))*step(tmp)+0.5*step(tmp);
v=1;
r(i)=ss*(st+dt)/4096*v;
end
figure(3);
subplot(1,1,1);
plot(t,r);
编码后的原始信号'
七、MATLAB绘制波形
八、实验总结和心得
在本次实验中,我根据PCM(脉冲编码调制)原理,写出了源程序代码,了解到了很多东西,其中通过Matlab软件仿真给定模拟信号编码后的波形、对比给的原始信号波形和译码后的波形。
我熟悉掌握了脉冲编码调制的原理和更深一步掌握如何使用MATLAB调制仿真。
但是,我也发现了我自己有很多不足的地方,比如说比较粗心,总是会忘记某个括号,导致数据的不完整性。
同时在也会在不需要“;
”的语句中添加,导致程序不能运行。