基于ADPCM的语音信号编解码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于ADPCM的语音信号编解码
班级:电子与通信工程
姓名:
学号:
目录
一、语音压缩编码简介 .................................................................................................- 2 -
1.1 语音压缩技术的现状及发展方向........................................................................- 2 -
1.2 语音压缩编码分类................................................................................................- 2 -
1.3 语音信号压缩的基本原理....................................................................................- 2 -
1.4 语音压缩编码性能的评价指标............................................................................- 3 -
二、G.721编码及算法实现 ................................................................................................- 4 -
2.1自适应差分脉冲编码调制ADPCM .......................................................................- 4 -
2.2 G.721各部分算法介绍 ..........................................................................................- 5 -
三、仿真结果.......................................................................................................................- 9 -
四、分析与总结................................................................................................................ - 11 -
五、仿真程序.................................................................................................................... - 12 -
六、参考文献.................................................................................................................... - 15 -
摘要
自适应差分脉冲编码调制(ADPCM)是运用了自适应技术、脉冲编码调制、差值调制技术,对PCM(脉冲编码调制)语音信号进行再压缩。

本报告从ADPCM编码基础理论出发,基于对G721标准的分析和理解,对语音压缩编码算法进行了仿真,包括了一下几个模块,自适应预测,快速非锁定因子的计算,单频信号的判定,窄带信号瞬变判定,自适应速度控制,量化矩阵自适应因子的计算,自适应量化编码,自适应逆量化,量化器标度因子自适应的选取,速度控制。

然后,实现了一个ADPCM的编码器程序。

最后,基于对编码器的研究,进行了解码输出的仿真。

一、语音压缩编码简介
语音信号的数字化传输一直是通信发展的主要方向之一,语音的数字通信和模拟通信相比,无疑具有更好的效率和性能,这主要体现在:具有更好的语音质量:具有更强的抗干扰性,并易于进行加密;可节省带宽,能够更有效的利用网络资源;更加易于存储和处理。

最简单的数字化方法是直接对语音信号进行模数转换,只要满足一定的采样率和量化要求,就能够得到高质量的数字语音,但这时语音的数据量仍旧很大,因此在进行传输和存储之前,往往要对其进行压缩处理,以减少其传输码率或存储量,即进行压缩编码。

传输码率也称为数码率或编码速率,表示每秒传输语音信号所需的比特数。

1.1 语音压缩技术的现状及发展方向
语音压缩编码技术的发展是十分迅速的,CELP的编码速率较低,但复杂度较高,可以在4.8kb/s左右的码速率上获得较高质量的语音,是当今中低速率语音编码技术的主流技术之一,许多国际标准化组织及机构纷纷将这一编码方案作为语音编码标准。

在对其改善质量、降低复杂度、减少编码延迟等方面都提出了不少新的方法,使CELP在实践中得到广泛应用。

随着DSP技术的发展,CELP技术还具有一定的潜力,例如将G.729扩展到6.4kb/s,用于TDMA/CDMA移动无线系统和DCME。

目前,语音压缩编码技术主要有两个努力方向:一个是中低速率的语音编码的实用化,及如何使用化过程中进一步减低编码速率和提高其抗干扰、抗噪声能力;另一个是如何进一步的降低其编码速率,目前已能在5kb/s-6kb/s的速率上获得高质量的重建语音,下一个目标则是要在4kb/s的速率上获得短延时、高质量的重建语音。

特别是对中长延时编码,人们正在研究其更低速率(如400b/s-1200b/s)的编码算法,在这个过程中当编码速率降至2.4kb/s速率以下时,CELP算法即使应用更高效的量化技术也无法达到预期的指标,需要其它一些更符合低速率编码要求的算法,目前比较好的算法还有正弦变换编码(STC)、混合激励线性预测编码(MELPC)、时频域插值编码(TFI)、基音同步激励线性预测编码(PSELP)等,同时还要求引入新的分析技术,如非线性预测、多精度时频分析技术(包括子波变换技术)、高阶统计分析技术等,这些技术更能挖掘人耳听觉掩蔽等感知机理,更能以类似人耳的特性作语音的分析与合成,使语音编码系统更接近于人类听觉器官的处理方式工作,从而在低速率语音编码的研究上取得突破。

1.2 语音压缩编码分类
语音编码按编码方式分为3类:波形编码、参数编码、混合编码。

波形编码是将时间域或变换域信号直接变换为数字信号,力求使重建语音波形保持原始语音信号的波形形状。

参数编码又称声码器编码,它是将信源信号在频域或其他变换域提取特征参数,然后对这些特征参数重建语音信号。

混合编码将波形编码和参数编码结合起来,克服了波形编码和参数编码的缺点,吸收了它们的长处,能够在低速率上得到高质量的合成语音。

1.3 语音信号压缩的基本原理
在数字通信中,语音信号被编码为二进制数字序列,通过信道传输或存储,在经过解码
后恢复为可懂的语音。

将语音信号编码为二进制数字序列后再经传输或储存有其独特的优点。

例如,可摆脱传输或存储中噪声的干扰。

模拟传输信道的噪声总是要使语音信号发生畸变,而数字通信只要有足够的通信站,就能排除所有噪声的影响;另一方面,磁带录音机存储模拟信号时要受磁带噪声和其他噪声的影响,而采用计算机存储数字语音信号时,惟一的失真来自模数转换前的低通滤波。

另外,数字编码的信号还便于处理和加密、再生与转发,也可与其他信号复用一个信道,设备便于集成等。

最简单的语音编码方法是对其直接进行模/数变换;只要其取样率足够高,量化每个样本的比特数足够大,那么就能保证解码恢复的语音信号有非常好的音质,而且也不会丢失有用信息。

可是对语音信号直接进行数字化其所需数码率太高,比如普通电话通信中采用8KHZ 取样率,如用12bit进行量化,则数码率为96kbit/s,这样大的数码率即使对很大容量的传输信道也是难以承受的。

而语音信号用PCM编码后,数码率为64kbit/s,不进行压缩很难用调制解调器在电话线路上传输,所以必须进行压缩编码。

对语音进行编压缩码的基本依据有两个。

一是,从产生的物理机理和语音结构的性质来看,语音信号中存在较大的冗余度。

从信息保持的角度讲,只有当信源本身具有冗余度,才能对其进行压缩。

语音压缩实质上就是识别语音中的冗余度并设法去除掉它们。

冗余度最主要部分可以分别从时域或频域来考虑,归纳起来有以下几个方面:1,语音信号样本间的相关性很强,即其短时谱不平坦。

2,浊音语音段具有准周期性。

3,声道的形状及其变化比较慢。

4,传输码值的概率分布是非均匀的。

语音编码的第二个依据是利用人类听觉的某些特性。

人耳听不到或感知不灵敏的语音分量可视为冗余(这种冗余可看作为主观上的冗余),所以可以利用人耳感知模型,去除掉人耳感觉不灵敏的语音分量,而重构后的语音质量不明显下降。

总之,利用冗余度或者是听觉上的制约,可以压缩表示语音信号的必要信息,从而可降低传输速率或存储容量
脉冲编码的基本框图:
1.4 语音压缩编码性能的评价指标
语音编码的根本目标就是在尽可能低的编码速率条件下,重建得到尽可能高的语音合成质量,同时还应尽量减小编码延时和算法复杂度,因此编码效率、编码语音质量评价、编解码延时以及算法的复杂度就成了评价一个语音编码算法性能的基本指标。

编码速率直接反应了语音编码对语音信息的压缩程度。

编码速率可以用“比特/秒”来度量,它代表总的编码速率。

现在大部分编码标准都是固定速率编码,其范围为0.8-64kbit/s。

其中,保密电话的编码速率最低,其原因是它的通信信道带宽限定在4.8kbit/s一下。

数字蜂窝移动电话和卫星电话编码器的编码速率为3.3-13kbit/s,它使数字蜂窝系统的容量可以达到模拟系统的多倍。

编码语音质量评价分为主观评价和客观评价。

主观评价方法是基于一组测听者对原始语
音与合成语音进行对比试听,然后根据某种事先规定好的尺度标准来对失真语音划分等级的。

主要反映的是测听者主观上对语音质量或者可懂度的一种感知。

客观评价算法在理想情况下需要在没有原始语音下对语音进行评价。

需要结合不同的处理过程的知识,包括底层处理和高层处理。

现有的评价方法局限于要知道原始的语音信号,并且多数只能模拟在底层的处理过程。

编解码延时一般用单次编解码所需的时间来表示,在实时语音通信系统中,语音编解码延时同线路传输延时的作用一样,对系统的通信质量有很大影响。

过长的语音延时会使通信双方产生交谈困难,而且会产生明显的回声而干扰人的正常思维。

对于公用电话网,编解码延时通常要求不超过5-10ms,而对于移动蜂窝通信系统,允许最大延时不超过100ms,算法复杂度主要影响到语音编解码器的硬件实现,它决定了硬件实现的复杂度、体积、功率和成本等。

对一些复杂的语音编码算法,一般编码算法的复杂度与语音质量有密切关系。

再同样速率的情况下,复杂一些的算法将会获得更好一些的语音质量。

同时,算法的复杂度与硬件实时实现也有密切关系。

二、G.721编码及算法实现
2.1自适应差分脉冲编码调制ADPCM
ADPCM将脉冲编码调制、差值调制和自适应技术三者结合起来,进一步利用语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化,在32kbit/s速率上能够给出网络等级语音质量,从而符合进入公共网的要求。

图是G.721算法的框图,其中虚线部分是解码器框图。

由图中可以看出,编码器中嵌入一个解码器,使得编码器的自适应修正完全取决于信号的反馈值。

这个反馈值与解码器的输出是一致的,所以后续的差值采样就补偿了量化误差,从而避免了量化误差的积累。

图2-1 G.721编码器原理框图
2.2 G.721各部分算法介绍
(1)、求采样值s(k)和其估计值s e (k)之差
d()()()e k s k s k =- (2.2.1) (2)自适应量化d(k)并编码输出I(k)
2I()log ()()k d k y k =- (2.2.2)
其中,I(k)还含有以为符号。

表 给出了I(k)的编码值。

y(k)是量化阶矩自适应因子,它由调整短时能量变化较快的语音信号的y u (k)和调整数据类慢变信号的y l (k)两部分,经速度调整因子a l (k)加权平均而成
()()(1)[1()](1)l u l y k a k y k a k y k =•-+-- 01l a ≤≤ (2.2.3)
对快变信号,()l a k 趋于1,而对慢变信号()l a k 趋于0。

(3)阶矩自适应因子
55()(12)()2[()]
u y k y k I k ω--=-+称快速非锁定标度因子,它的取值范围在
1.06()10u y k ≤≤ 区间,对应的的线性域 1.0610min max 2
2.085,21024∆==∆==。

55()(12)()2[()]u y k y k I k ω--=-+ (2.2.4)
[()]I k ω的取值如表所示
表2-2
[()]I k ω的取值
为适应语音预测差值信号中的基音引起的能量突变,[()]I k ω的高端取值都很大。

对于带内数据,信号短时能量基本上是平稳的,阶矩自适应采用
66()(12)(1)2()l l u y k y k y k --=--+ (2.2.5)
式中,()l y k 称为锁定标度因子。

(4)速度控制
()l a k 是速度控制因子,它是通过I(n)的长时平均幅度值()ml d k 与短时平均幅度值()ms d k 相差求出的。

它反应了预测余量信号的变化率。

函数F[I(k)]的取值如下表
表2-3 F[I(k)]的取值 当余量信号短时能量平稳时,I(k)的统计特性随时间变化很小,()ml d k 与()ms d k 相差不大。

而当余量信号短时能量起伏较大时,他们出现差值。

利用这一特性先计算中间参数
()p a k :
433
4
(12)(1)2,|d (k)-d (k)|2d (k)()(12)(1),p ms ml ml p a k a k a k ----⎧--+≥⎪=⎨--⎪⎩
当其他情况 (2.2.6) 显然,当I()k 幅度变化较大时()2p a k →,而差别较小时,()0p a k →。

条件()3y k <表明输入信号很小,处于轻音段或噪声段,这是也有()2p a k →,以便使量化器处于快速自适应状态来等待输入信号的突然变化。

量化器速度控制因子()l a k 通过对()p a k 限幅得到
1(1)1()(1)(1)1p l p
p a k a k a k a k -≥⎧
=⎨
--<⎩当,当 (2.2.7) 这样,量化器从快速自适应向慢速自适应转变有一个延迟。

对于带内调幅数据,这种延
迟效应可以防止自适应速度过早变慢,从而避免脉冲沿产生太大的畸变。

(5)自适应逆量化器输出
()()q d ()2y k I k k += (2.2.8)
(6)自适应预测
预测器采用6阶零点,二阶极点的模型。

预测信号为
2
1()(1)()()e i r ez i s n a n s n i s n ==--+∑ (2.2.9)
6
1
()(1)()ez j q j s n b n d n j ==--∑ (2.2.10)
重建信号为
()()()r e q s n s n d n =+ (2.2.11)
极点、零点预测器系数分别是i a 和j b 。

其调整方式为
87()(12)(1)2sgn[()]sgn[()]j j b n b n dq n dq n j --=--+•- (2.2.12)
此式隐含差|()|2j b n ≤,为保证算法稳定,二阶极点预测器系数限制如下
2|()|0.75;a n ≤412|()|1()2a n a n -≤-- (2.2.13)
它们的调整方式为
8811()(12)(1)32sgn[()]sgn[(1)]a n a n p n p n --=--+••-
2.2.14)
7722()(12)(1)2sgn[()]{sgn[(2)][(1)]sgn[(1)]}a n a n p n p n f a n p n --=--+•---•-(2.2.15)
式中 ()()()ez p n dq n s n =+
11111
1
42()2sgn[]1
2
a a f a a a ≤
⎧=⎨
⎩>当当 (2.2.16)
(7)单频和瞬变调整
当ADPCM 编码器遇到频移键控信号(FSK )或其他窄带瞬变信号时,需要将系统从慢速自适应状态强制性地调整到快速自适应状态。

为此,引入单频信号判定条件d t 和窄带信号瞬变判据r t :
1,()0.71875
0,d a n t <-⎧=⎨
⎩若其他 (2.2.17) ()
r 1,t d ()|24.20,
yl n d q n t ⎧>=⎨
⎩(n)=1同时|其他 (2.2.18)
当t d (n)=1时,认为出现了单频信号或频率瞬变。

这时强制将量化器处于快速自适应状态。

当r ()1t n =时,还需将()i a n 和()j b n 同时置零。

采用这些措施后,G.721 ADPCM 可以传递4.8kbit/s 的FSK 信号。

同时p a 的判定也由下式决定
4334(12)(1)2,d ()()2()y(n)<3t (n)=1()1,()1(12)(1)p ms ml ml d p r p a n n d n d n a n t n a n ----⎧--+-≥⎪==⎨⎪--⎩
若或或其他(2.2.19)
当ADPCM 与PCM 之间发生换码级联时,需要在ADPCM 内部进行PCM 级联同步调整。

方法是在解码端将重建信号()r s n 重新编码成ADPCM 码()dx I n 并与输入的I(n)比较,根据差值调整重建()r s n 的电平级别。

经过同步调整过程,ADPCM 可以有效地防止同步级联误差累积
三、仿真结果
图 3-1 解码前后语音信号波形
图3-2 自适应预测前后波形
0500100015002000
250030003500400045005000
样点数原始信号幅度
原始语音信号
0500100015002000
250030003500400045005000
样点数
解码输出信号幅度
解码输出信号
050010001500
2000250030003500400045005000
-1
-0.500.51
样点数
原始信号幅度
原始语音信号
0500100015002000
250030003500400045005000
-2
-1012
样点数
自适应预测信号幅度
自适应预测语音信号
图3-3 预测误差图
图3-4 语音信号编码图
0500100015002000
250030003500400045005000
0.20.40.60.811.21.4
1.6
1.8样点数
采样值与估计值误差
预测信号误差图
0500100015002000250030003500400045005000
-2
-1.5-1-0.500.511.5
2
图3-5 自适应逆量化后输出波形
四、分析与总结
通过图3-1原始语音信号经过ADPCM 的波形,可以看出信号经过编解码后,还是可以较好的恢复出来,虽然局部有些地方没能完全恢复。

图3-2是算法中对自适应预测信号和原始语音信号做出的对比,从图中可以看出,自适应预测的波形有一些失真,幅度更加平坦。

图3-3是对原始语音信号的采样值与其估计值之差。

总体来讲绝对误差偏大了一些,而这也正好和图3-2吻合。

图3-4是对语音信号编码后的图形,由于样点数过多,导致点数密集而使下部分几乎连成一片,但通过其峰值只有几个离散值还是可以较明显的看出是编码信号。

图3-5是自适应逆量化后的输出波形,相比图3-4,此图更为杂乱些。

报告的难点在于对标准算法的分析和理解基础上,对标准算法中描述的各个子功能框图的算法实现。

因为报告的实现程序,仅仅用于对标准算法的理解与研究,在具体的实际运用中,根据需要的不同,可能无法做到普遍通用,还需要对算法进行更多的研究。

0500100015002000
250030003500400045005000
-2.5
-2-1.5-1-0.50
0.511.5
2样点数
幅度
自适应逆量化器输出
五、仿真程序
%主程序
clc
clear all;
coe=[1,0,1,0,0,0,0,0,0,0,0];
coe1=[0,0,0];
coe2=[0,0,0,0,0,0,0,0,0,0];
coe3=[0];
Dqk=zeros(1,7);
fid=fopen('zy7.txt','rt');
a=fscanf(fid,'%e\n');
fclose(fid);
fid=fopen('zy7.721.txt','wt');
zyp0=size(a,1);
for i=1:size(a,1)
Slk=a(i);
Yk_pre=coe2(1);
Sek_pre=coe2(2);
Ik_pre=coe2(3);
Ylk_pre_pre=coe2(4);
Srk_pre=coe2(5);
Srk_pre_pre=coe2(6);
a2=coe2(7);
Tdk_pre=coe2(8);
Trk_pre=coe2(9);
Num=coe2(10);
coe2(10)=coe(10)+1;
[Sek,coe]=Sek_com(Srk_pre,Srk_pre_pre,Dqk,coe);
zyp1(1,i)=(Sek);
Dk=Dk_com(Slk,Sek);
zyp2(1,i)=abs(Dk);
Yuk_pre=yu_result(Yk_pre,wi_result(abs(Ik_pre)));
if Yuk_pre<1.06
Yuk_pre=1.06;
elseif Yuk_pre>10.00
Yuk_pre=10.00;
end
Ylk_pre=yl_result(Ylk_pre_pre,Yuk_pre);
zyp3(1:i)=Ylk_pre;
Trk_pre=Trk_com(a2,Dqk(6),Ylk_pre);
zyp4(1:i)=Trk_pre;
Tdk_pre=Tdk_com(a2);
zyp5(1:i)=Tdk_pre;
[Alk,coe1]=Alk_com(Ik_pre,Yk_pre,coe1,Tdk_pre,Trk_pre);
if Alk<0.0
Alk=0.0;
elseif Alk>1.0;
Alk=1.0;
end
[Yk,coe3]=Yk_com(Ik_pre,Alk,Yk_pre,coe3);
Ik=Ik_com(Dk,Yk);
%
zyp6(1,i)=Ik;
Yk_pre=Yk;
Srk_pre_pre=Srk_pre;
Sek_pre=Sek;
Ylk_pre_pre=Ylk_pre;
Ik_pre=Ik;
coe2(1)=Yk;
coe2(6)=Srk_pre;
coe2(2)=Sek;
coe2(4)=Ylk_pre;
coe2(3)=Ik;
Dqk(1)=Dqk(2);
Dqk(2)=Dqk(3);
Dqk(3)=Dqk(4);
Dqk(4)=Dqk(5);
Dqk(5)=Dqk(6);
Dqk(6)=Dqk(7);
Dqk(7)=Dqk_com(Ik_pre,Yk_pre);
zyp7(1,i)=Dqk(7);
Srk_pre=Srk_com(Dqk(7),Sek_pre);
zyp8(1:i)=Srk_pre;
coe2(5)=Srk_pre;
fprintf(fid,'%f\n',coe2(5));
end
fid=fopen('zy7.721.txt','rt');
b=fscanf(fid,'%e\n');
%子程序
%采样值与其估值差值函数
function d=Dk_com(Slk,Sek)
Dk=Slk-Sek;
d=Dk;
%快速非锁定标度因子计算函数
function yu=yu_result(y_now,wi_now)
yu=(1-2^(-5))*y_now+2^(-5)*wi_now;
yu=yu;
%锁定标度因子计算函数
function yu=yu_result(y_now,wi_now)
yu=(1-2^(-5))*y_now+2^(-5)*wi_now;
yu=yu;
%单频信号判定子程序
function Tdk=Tdk_com(A2k)
if(A2k<-0.71875)%(A2k<-0.71875)
Tdk=1;
else Tdk=0;
end
Tdk=Tdk;
%窄带信号瞬变判定子函数
function Trk=Trk_com(A2k,Dqk,Ylk)
if((A2k<-0.71875)&(fabs(Dqk)>pow(24.2,Ylk)))
Trk=1;
else Trk=0;
end
Trk=Trk;
%自适应速度控制和自适应预测子函数
function[h,coel]=Alk_com(Ik_pre,Yk_pre,coel,Tdk_pre,Trk_pre)
Dmsk_p2=coel(1);
Dmlk_p2=coel(2);
Apk_pre2=coel(3);
Dmsk_p1=(1-2^(-5))*Dmsk_p2+2^(-5)*fi_result(abs(Ik_pre));
Dmlk_p1=(1-2^(-7))*Dmlk_p2+2^(-7)*fi_result(abs(Ik_pre));
coel(1)=Dmsk_p1;
coel(2)=Dmlk_p1;
if ((abs(Dmsk_p1-Dmlk_p1)>=2^(-3)*Dmlk_p1)|(Yk_pre<3)|(Tdk_pre==1)); %if ((abs(Dmsk_p1-Dmlk_p1)>=2^(-3)*Dmlk_pl)|(Yk_pre<3)|(Trk_pre==1)) Apk_prel=(1-2^(-4))*Apk_pre2+2^(-3);
elseif(Trk_pre==1) Apk_prel=1;
else Apk_prel=(1-2^(-4))*Apk_pre2;
end
coel(3)=Apk_prel;
end
六、参考文献
【1】李文元, 张毓忠. 数字音频压缩自适应变换编码算法的研究[J]. 信号处理, 1998(3):245-248.
【2】高红令, 崔文惠, 周辉. 自适应编码研究动态[C]// 中国航空学会信号与信息处理专业全国学术会议. 2003.
【3】房建, 左涛, 陈婷. 数字音频压缩编码技术及其应用[J]. 信息技术, 2004, 28(2):9-11.
【4】张雪峰, 张耀军, 潘赟. 数字音频压缩编码技术研究[J]. 电脑知识与技术:学术交流, 2007, 3(15):852-853.
【5】杨伟超. 数字音频压缩编码技术及其应用分析[J]. 科研, 2016(7):00124-00124.
【6】吴力勤. 基于ADPCM语音压缩编码算法的研究与实现[D]. 四川大学, 2006.。

相关文档
最新文档