基于PCM语音信号编译码分析的课程设计报告.docx
《基于PCM语音信号编译码分析的课程设计报告.docx》由会员分享,可在线阅读,更多相关《基于PCM语音信号编译码分析的课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。
基于PCM语音信号编译码分析的课程设计报告
基于PCM的语音信号编码的译码
摘要
本设计是基于PCM的语音信号编码和译码性能分析,从计算机的麦克风录取一段语音信号,录制时间为12秒,并对录下的语音信号进行时域分析。
其主要内容是将模拟的语音信号数字化,具体分三步抽样、量化、编码。
以PCM编码和译码原理,在MATLAB下对该段语音进行PCM编码(以A律编码规则进行编码)和译码,并比较了与未编码波形的差别。
关键词:
脉冲编码调制;编码;译码;语音信号
前言
实际中的信源通常是模拟的,如电视信号、麦克风拾取的语音信号等。
为了能够使模拟信号在数字通信系统中传输,特别是能够和其他数字信号一起在宽带综合业务数字通信网中同时传输,需要将模拟信号进行数字化。
数字化的过程一般由抽样、量化、编码组成。
其中,抽样要保证不丢失原始信息,而量化要满足一定的质量,最后编码解决信号的表示。
该设计则是在MATLAB平台下,依据脉冲编码调制原理对实际的语音信号进行PCM编码和译码。
脉冲编码调制(PCM,PulseCodeModulation)在通信系统中完成将语音信号数字化功能。
是一种对模拟信号数字化的取样技术,将模拟信号变换为数字信号的编码方式,特别是对于音频信号。
PCM对信号每秒钟取样8000次;每次取样为8个位,总共64kbps。
PCM的实现主要包括三个步骤完成:
抽样、量化、编码。
分别完成时间上离散、幅度上离散、及量化信号的二进制表示。
根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和
律方式。
欧洲和我国大陆采用A律,北美、日本和其他一些国家和地区采用
律。
本设计采用了A律方式,由于A律压缩实现复杂,常使用13折线法编码,采用非均匀量化PCM编码。
基于PCM的语音信号编码与译码性能分析,就是将一段模拟信号进行数字化,并通过对实际语音信号进行PCM编码和译码来掌握PCM编码和译码原理及其实现方法,提高我们综合应运基础知识能力和计算机编程能力,为今后的学习和工作积累经验。
一基本原理
1.1脉冲编码原理
通常把从模拟信号抽样、量化,直到变换成为二进制符号的基本过程,成为脉冲编码调制(PCM,PulseCodeModulation),简称脉冲调制。
PCM是一种对模拟信号数字化的取样技术,是一种将模拟信号变换为数字信号的编码方式。
根据CCITT的建议,为改善小信号量化性能,采用压扩非均匀量化,有两种建议方式,分别为A律和
律方式。
本设计采用了A律方式,采用非均匀量化PCM编码示意图如下图1-1所示:
图1-1PCM原理框图
1.1.1抽样原理
所谓抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号。
该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号。
它的抽样速率的下限是由抽样定理确定的。
在一个频带限制在
内的时间连续信号
,如果以
的时间间隔对它进行抽样,那么根据这些抽样值就能完全恢复原信号。
或者说,如果一个连续信号
的频谱中最高频率不超过
,当抽样频率
时,抽样后的信号就包含原连续的全部信息[1]。
抽样定理在实际应用中应注意在抽样前后模拟信号进行滤波,把高于二分之一抽样频率的频率滤掉。
这是抽样中必不可少的步骤。
1.1.2量化原理
从数学上来看,量化就是把一个连续幅度值的无限数集合映射成一个离散幅度值的有限数集合。
如图2所示,量化器Q输出L个量化值
,
。
常称为重建电平或量化电平。
当量化器输入信号幅度
落在
与
之间时,量化器输出电平为
。
这个量化过程可以表达为[1]:
(1-1)
这里
称为分层电平。
通常:
(1-2)
其中
称为量化间隔。
模拟信号的量化分为均匀量化和非均匀量化。
由于均匀量化存在的主要缺点是:
无论抽样值大小如何,量化噪声的均方根值都固定不变。
因此,当信号
较小时,则信号量化噪声功率比也就很小,这样,对于弱信号时的量化信噪比就难以达到给定的要求[2]。
通常,把满足信噪比要求的输入信号取值X围定义为动态X围,可见,均匀量化时的信号动态X围将受到较大的限制。
为了克服这个缺点,实际中,往往采用非均匀量化。
非均匀量化是根据信号的不同区间来确定量化间隔的。
对于信号取值小的区间,其量化间隔
也小;反之,量化间隔就大。
它与均匀量化相比,有两个突出的优点。
首先,当输入量化器的信号具有非均匀分布的概率密度(实际中常常是这样)时,非均匀量化器的输出端可以得到较高的平均信号量化噪声功率比;其次,非均匀量化时,量化噪声功率的均方根值基本上与信号抽样值成比例。
因此量化噪声对大、小信号的影响大致相同,即改善了小信号时的量化信噪比。
实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。
通常使用的压缩器中,大多采用对数式压缩。
广泛采用的两种对数压缩律是
压缩律和A压缩律。
美XX用
压缩律,我国和欧洲各国均采用A压缩律,因此,PCM编码方式采用的也是A压缩律。
模拟信号的量化过程如图1-2所示[3]:
图1-2模拟信号的量化
1.1.3编码原理
所谓编码就是把量化后的信号变换成代码,其相反的过程称为译码。
当然,这里的编码和译码与差错控制编码和译码是完全不同的,前者是属于信源编码的X畴。
在现有的编码方法中,若按编码的速度来分,大致可分为两大类:
低速编码和高速编码。
通信中一般都采用第二类。
编码器的种类大体上可以归结为三类:
逐次比较型、折叠级联型、混合型。
在逐次比较型编码方式中,无论采用几位码,一般均按极性码、段落码、段内码的顺序排列。
下面结合13折线的量化来加以说明。
在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。
若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。
具体的做法是:
用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。
其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。
这样处理的结果,8个段落被划分成128个量化级。
段落码和8个段落之间的关系如表1-1所示[1];段内码与16个量化级之间的关系见表1-2所示[1]:
表1-1段落码表1-2段内码
段落序号
段落码
段落X围
量化间隔
段内码
量化间隔
段内码
8
111
1024-2048
15
1111
7
0111
7
110
512-1024
14
1110
6
0110
6
101
256-512
13
1101
5
0101
5
100
128-256
12
1100
4
0100
4
011
64-128
11
1011
3
0011
3
010
32-64
10
1010
2
0010
2
001
16-32
9
1001
1
0001
1
000
0-16
8
1000
0
0000
语音PCM抽样频率是8KHZ,每个量化样值对应一个8位二进制码,故语音数字编码信号的速率为8bits×8kHz=64kb/s[4].量化噪声随级数的增多和极差的缩小而缩小。
量化级数增多即样值个数增多,就要求更长的二进制编码。
因此,量化噪声随二进制编码的位数增多而减少,即随数字编码信号的速率提高而减少。
自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。
PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
1.1.4译码原理
PCM译码器是实现PCM编码的逆系统。
其中各模块功能如下[5]:
D/A转换器:
用来实现与A/D转换相反的过程,实现数字量转化为模拟量,从而达到译码最基本的要求,也就是最起码的步骤。
瞬时扩X器:
实现与瞬时压缩器相反的功能,由于采用A律压缩,扩X也必须采用A律瞬时扩X器。
低通滤波器:
由于采样脉冲不可能是理想冲激函数会引入孔径失真,量化时也会带来量化噪声,及信号再生时引入的定时抖动失真,需要对再生信号进行幅度及相位的补偿,同时滤除高频分量,在这里使用与编码模块中相同的低通滤波器。
1.2A律13折线原理
实际中,非均匀量化的实际方法通常是将抽样值通过压缩再进行均匀量化。
通常使用的压缩器中,大多采用对数式压缩。
广泛采用的两种对数压缩律是
压缩律和A压缩律。
美XX用
压缩律,我国和欧洲各国均采用A压缩律,因此,PCM编码方式采用的也是A压缩律。
所谓A压缩律也就是压缩器具有如下特性的压缩律[1]:
(1-3)
(1-4)
其中
。
A律压扩特性是连续曲线,A值不同压扩特性亦不同,在电路上实现这样的函数规律是相当复杂的。
实际中,往往都采用近似于A律函数规律的13折线(A=87.6)的压扩特性。
在这个设计之中所用着的PCM编码正是采用这种压扩特性来编码的。
图1-2示出了这种压扩特性,表1-3列出了13折线时的x值与计算x值的比较。
图1-213折线特征
表1-3计算值
与A律13折线时
值的比较
0
1
0
1
按折线
分段时的
0
1
段落
1
2
3
4
5
6
7
8
斜率
16
16
8
4
2
1
表1-3中第二行的
值是根据
时计算得到的,第三行的
值是13折线分段时的值。
可见,13折线各段落的分界点与
曲线十分逼近,同时
按2的幂次分割有利于数字化[1]。
二程序设计
2.1程序流程图
在MATLAB平台下,对录入的语音信号现进行PCM编码,然后对已经编码了的语音信号进行PCM译码,其整个过程的程序流程图如下图2-1所示:
图2-1主函数流程图
2.1.1PCM编码函数设计流程图
在MATLAB平台下,对录入的语音信号现进行PCM编码,其中PCM的实现主要包括三个步骤完成:
抽样、量化、编码。
具体编码函数设计的流程图如下图2-2所示:
图2-2PCM编码函数流程图
2.1.2PCM译码函数设计流程图
图2-3PCM译码函数流程图
2.2详细程序代码
2.2.1主程序
closeall;
clearall;
y=wavred(‘cang.wav’)
figure
(1)
plot(y)
title(‘原始语音信号波形图’)
N=1001;
[M]=wavread('cang.wav');
S=M(2000:
3000);%语音信源
Figure
(2)
plot(S,'r');holdon;%画出编码前信号
xlabel('时间')%x坐标名
ylabel('幅值')%y坐标名
gridon%添加网格
axissquare%将图形设置为正方形
t1=pcm1(S);%调用编码函数
figure(3)
plot(t1);%画出译码后信号
title('PCM编码前信号');%标题
xlabel('时间')%x坐标名
ylabel('幅值')%y坐标名
gridon%添加网格
axissquare%将图形设置为正方形
t2=tqm(t1);%将N行8列矩阵转换为1行8*N列的矩阵的函数
t3=tqn(t2);%将8*N行1列的矩阵转换为N行8列矩阵的函数
t4=pcm2(t3);%调用译码函数
figure(4)
plot(t4);%画出译码后信号
title('PCM译码后信号');%标题
xlabel('时间')%x坐标名
ylabel('幅值')%y坐标名
gridon%添加网格
axissquare%将图形设置为正方形
2.2.2A律十三折线PCM编码函数
functionY=pcm1(S)
z=sign(S);%判断S的正负
Max=max(abs(S));%求S的最大值
S=abs(S/Max);%归一化
Q=2048*S;%量化
Y=zeros(length(S),8);%存储矩阵(全零)
%%段落码判断%%
form=1:
length(S)
ifQ(m)>128&&Q(m)<2048%在第五段与第八段之间,段位码第一位都为“1”
Y(m,2)=1;
end
if(Q(m)>32&&Q(m)<128)||(Q(m)>512&&Q(m)<2048)
Y(m,3)=1;%在第三四七八段内,段位码第二位为“1”
end
if(Q(m)>16&&Q(m)<32)||(Q(m)>64&&Q(m)<128)||(Q(m)>256&&Q(m)<512)||
(Q(m)>1024&&Q(m)<2048)
Y(m,4)=1;%在二四六八段内,段位码第三位为“1”
end
%符号位的判断
ifz(m)>0
Y(m,1)=1;
elseifz(m)<0
Y(m,1)=0;
end
end
%段内码判断程序
N=zeros(length(S));
form=1:
length(S)
N(m)=Y(m,2)*4+Y(m,3)*2+Y(m,4)+1;%找到Y位于第几段
end
a=[0,16,32,64,128,256,512,1024];%量化间隔
b=[1,1,2,4,8,16,32,64];%除以16,得到每段的最小量化间隔
form=1:
length(S)
q=ceil((Q(m)-a(N(m)))/b(N(m)));%求出在段内的位置
ifq==0
Y(m,(5:
8))=[0,0,0,0];%如果输入为零则输出“0”
elsek=num2str(dec2bin(q-1,4));%编码段内码为二进制
Y(m,5)=str2num(k
(1));
Y(m,6)=str2num(k
(2));
Y(m,7)=str2num(k(3));
Y(m,8)=str2num(k(4));
end
end
end
2.2.3将N行8列矩阵转换为1行8*N列的矩阵的函数
functiont1=tqm(R)
t1=zeros(length(R)*8,1);
c=1;
fora=1:
length(R)-1
forb=1:
8
t1(c)=R(a,b);
c=c+1;
end
end
t1=t1';
end
2.2.4A律十三折线PCM译码函数
%PCM译码程序
functionS=pcm2(Y)
d=size(Y,1);%求出输入码组的个数
a=[0,16,32,64,128,256,512,1024];%段落起点值
b=[1,1,2,4,8,16,32,64];%每段的最小量化间隔
c=[0,1.5:
15.5];%段内码平均值
form=1:
d
t1=Y(m,1);%取符号
t2=Y(m,2)*4+Y(m,3)*2+Y(m,4)+1;%判断段落位置
t3=Y(m,5)*8+Y(m,6)*4+Y(m,7)*2+Y(m,8);%判断段内位置
ift3==0%段内码为零时
k(m)=a(t2)/2048;
else
k(m)=(a(t2)+b(t2)*c(t3))/2048;%还原出量化后的电平值
end
%判断符号位
ift1==0
S(m)=-k(m);
else
S(m)=k(m);
end
end
2.2.5将8*N行1列的矩阵转换为N行8列矩阵的函数
functiont2=tqn(t1)
t2=zeros(length(t1)/8,8);
a=1;
b=1;
form=1:
length(t1)-1
ifb>8
a=a+1;
b=1;
end
t2(a,b)=t1(m);
b=b+1;
m=m+1;
end
三仿真结果及分析
3.1原始语音信号波形图
在MATLAB下,调用函数wavrecord(6*fs,fs,’int16’)录制一段话音信号,其时间为6秒,同时完成对语音信号的采样,采样频率是8000Hz。
然后对原始语音信号进行分析,画出它的时域波形图如下图3-1所示,对其进行时域分析,分析语音信号的特性。
图3-1原始语音信号波形图
由原始语音信号的时域波形图3-1可知,语音信号是模拟信号,其在时间上和幅度上都连续的信号。
3.2编码前的信号图
运行程序后,语音信号经抽样、量化后的信号图如下图3-2所示:
图3-2PCM编码前的信号图
原始语音信号是模拟信号,在PCM编码前将其数字化的过程中,要先经过抽样和量化两步。
模拟信号被抽样后,成为抽样信号,它在时间上是离散的,但是其取值仍然是连续的。
3.3PCM编码后信号图
运行程序后,语音信号经PCM编码后的波形图如下图3-3所示:
图3-3PCM编码后信号图
由于,次设计PCM编码的方式采用的是A压缩律,将抽样、量化后的信号变换成二进制码元。
语音信号为交流信号,即输入电压有正负极性,用以为二进制码元来表示极性。
采用A律13折线法,将量化区间划分成非均匀的8段,用3位二进制码元表示抽样值所在段。
又将每段均匀分为16小段,用4位二进制码元表示。
经PCM编码后,每一抽样值被用8位二进制码元表示。
3.4PCM译码后信号图
运行程序后,语音信号经PCM译码后的信号图如下图3-4所示:
图3-4PCM译码后信号图
译码是编码的逆过程,语音信号经PCM译码后的波形与编码前的信号波形相比较,可以无失真将原始语音信号恢复出来。
总结
通过这次通信系统仿真训练,我收获不少,对通信原理更加了解,尤其是对语音信号进行PCM编译码有了更深刻了解。
一开始的预期工作就是查阅资料,通过查阅课本和在网上来查找一些相关资料。
在查阅资料的过程中,慢慢理清楚了其基本构架,并逐渐确定了设计和编程思路。
首先,运用Matlab工具调用函数wavrecord录制了一段语音信号,时间为12秒,并对录下的语音信号进行时域分析。
然后,对原始语音信号进行数字化,其数字化的过程由抽样、量化、编码三步组成。
编码是在Matlab下对语音信号进行PCM编码,并画出了编码后的波形。
最后,将已经经过PCM编码后的语音信号进行编码的逆过程,即译码。
通过比较语音信号编码前的波形和译码后的波形,其差别基本可以忽略。
本课程设计是基于PCM的语音信号编码和译码性能分析,做了实现语音信号的编译码的详细的介绍,并实现了语音信号的PCM编码和译码的功能。
经过测试运行,圆满完成了对实际的语音信号进行PCM的编译码,这与课题的要求十分相符。
参考文献
[1]樊昌信,曹丽娜.通信原理[M].:
国防工业,2011.265:
282
[2]别志红,别红霞.信息与通信系统仿真[M].:
邮电大学,2010.120:
156
[3]赵守彬,李鸿刚.利用Matlab实现PCM编码的A律13折线法量化[J].科技信息,2010.98:
132
[4]X全金.一种A律PCM编码的简化方法[J].XX师X学院学报(自然科学版),2007年11月第13卷第4期.212:
250
[5]曹志刚,钱亚生.现代通信原理[M].:
清华大学,1992.104:
166
致谢
通过本次通信系统仿真训练课程设计,我们真的学习到了很多东西。
不仅仅是PCM对语音信号编译码方面的理论知识,还有许多实际中的技能,如如何找一些有用的相关材料,如何删选有价值的部分等等。
当然,对于理论知识如此欠缺的我们来说,初次接触综合性如此强的课程设计会遇到许许多多问题,这时候就少不了老师的细心指导和认真讲解。
一直以来老师都是我们的指路人,孜孜不倦的发光发热,在这里我想首先向我们敬爱的老师道声谢,老师辛苦了!
还要谢谢帮助我的同学们,愿我们一起进步,一起更努力!