Speex手册(二)——Speex介绍和编解码器描述1

1  Speex介绍

        Speex编解码器(http://www.speex.org/)的存在是因为需要一款开源且免软件专利使用费的语音编解码器,这是任何开源软件可用的必要条件。本质上来说,Speex相对于语音正如Vorbis(注:免费音乐格式)相对于音频/音乐。不像许多其他语音编解码器,Speex不是为移动电话而设计,而是为分封网络(packet network)和网络电话(VoIP)而设计的。所以当然支持基于文件的压缩。

        Speex设计灵活,支持多种不同的语音质量和比特率。对高质量语音的支持也就意味着Speex不仅能编码窄带语音(电话语音质量,8kHz采样率),也能编码宽带语音(16kHz采样率)。

        为VoIP而不是移动电话而设计意味着Speex对丢失的数据包鲁棒,但对损坏的数据包不鲁棒。这基于在VoIP中数据包要么完整到达要么不能到达这一假设的。因为Speex针对于多种设备,所以它复杂性适度(可调节)并且占用较少内存。

        考虑这些设计目标,我们选用CELP作为编码技术。其中一个主要原因是CELP很早就被证明在低比特率(如4.8kbps的DoD CELP)和高比特率(如16kbps的G.728)都能稳定可靠工作。

1.1  获取帮助

        正如许多开源项目一样,有许多方法可以获取Speex的帮助,包括:

            1)此文档

            2)Speex网站(http://www.speex.org/)上的其他文档

            3)邮件列表:在speex-dev@xiph.org上于Speex相关主题的讨论(不仅仅针对开发者)

            4)IRC:在irc.freenode.net上的主频道是#speex。注意由于时间的不同,可能需要一些时间联系某人,所以请耐心等待。

            5)私下给作者邮箱jean-marc.valin@usherbrooke.ca发邮件,但仅限于你不想被公开讨论的私人的或精妙的主题。

        在寻求帮助之前(邮件列表或IRC),请最好先阅读本手册(好吧,如果你看到这了,那么这是一个好迹象)。在邮件中讨论已经在手册中具体说明的问题一般是很不礼貌的。另一方面,如果是询问在手册中没有说清楚的问题则是很好地(鼓励)。本手册没有包含Speex的方方面面,所以鼓励每个人问问题,发评论,要求增加的新特性,或简单的让我们知道Speex是如何被使用的。

        再说些附加的关于邮件列表的指引。在你向列表中报告Speex中的bug之前,强烈建议(如果可能)先测试下这些bug在使用speexenc和speexdec命令行工具(见第四章)下是否可复现。基于第三方代码(3rd party code)发布的bug不仅难发现,而且经常是由于与Speex无关的错误引起的。

1.2  关于此文档

        此文档分为如下几章。第二章描述不同的Speex特征并定义此文档中使用的许多术语,第四章描述Speex提供的标准命令行工具,第五章包括用libspeex API编程的具体说明,第七章有Speex相关的信息和标准。

        最后三章描述Speex中所使用的算法。阅读这部分需要信号处理相关知识,但对于仅仅使用Speex则不需要。这部分是为那些对于想了解Speex如何工作或想基于Speex研究的人而准备。第八章解释了CELP后的一般思想,第九和第十章是Speex的一些特性。

2  编解码器描述

        这张具体描述Speex和它的特征。

2.1 概念

        在介绍Speex特征之前,先介绍在语音编码中的一些概念,帮助读者更好地理解手册的剩余部分。尽管其中一些事语音/音频处理中的一般概念,但有些也是Speex中特有的。

        采样率

        采样率是每秒钟采集到的信号样本数,单位是Hertz(Hz)。如果采样率是Fs kHz,则所采样信号的最高频率为Fs/2 kHz(Fs/2被称为奈奎斯特频率)。这是信号处理中的一个基本性质,由采样定理描述。Speex为三种不同的采样率而设计:8kHz,16kHz和32kHz,分别对应窄带,宽带和超宽带。

        比特率

        在对语音信号编码时,比特率定义为单位时间内的比特数,单位是比特每秒(bps)或通常的千比特每秒(kbps)。注意千比特每秒(kbps)和千字节每秒(kBps)的区别。

        质量(可变)

        Speex是有损的编解码器,意味着压缩率以输入语音信号的保真度为代价。不像一些其他的语音编解码器,Speex可以控制质量和比特率之间的折中。Speex编码处理大多数时间由一个范围在0到10之间的质量参数控制。在不变比特率(CBR)中,质量参数是一个整数,在可变比特率(VBR)中,质量参数是一个浮点数。

        复杂度(可变)

        Speex允许编码器拥有可变的复杂度。这通过一个范围在1到10之间的整数控制搜索的执行来实现,类似于gzip和bzip2压缩工具的-1到-9选项。正常使用情况下,复杂度为1的噪声等级比复杂度为10的噪声等级高1到2个dB,但复杂度为10的CPU要求比复杂度为1的高5倍。实际应用中,最好的折中是复杂度2到4,但在编码非语音声音如DTMF声调时更高的复杂度经常被用到。

        可变比特率(VBR)

        可变比特率(VBR)允许编解码器自适应的根据待编码音频的“难度”动态地改变比特率。在Speex例子中,像元音和高能瞬态变化的声音需要高比特率以获得好的质量,但是摩擦音(如s,f)用低比特率就能充分编码。由于这一原因,VBR在相同的质量下能获得更低的比特率,或在不变比特率下获得更好的质量。除了这些优点,VBR有两个主要缺点:第一,在指定质量情况下,无法保证最终的平均比特率;第二,在一些如网络电话(VoIP)这样的实时应用中,依赖于最大比特率,这在通信信道中必须足够低。

        平均比特率(ABR)

        平均比特率解决了VBR中的第一个问题,它动态地调整VBR质量以获得指定的比特率。因为质量和比特率是实时调整的(开环的),ABR的全局质量比正好达到目标平均比特率的VBR编码质量稍微差些。

        声音活动检测(VAD)

        当被激活时,VAD检测待编码的音频是语音还是无声/背景噪声。VAD在VBR编码中默认激活,所以这一选项仅对非VBR编码有效。在这种情况下,Speex检测出非语言段并仅使用足够复现背景噪声的比特率进行编码,这叫“柔化噪音生成”(CNG)。

        断续传输(DTX)

        断续传输室VAD/VBR的附加操作,当背景噪声平稳时会完全停止传输。在基于文件的操作中,既然我们无法停止写文件,则对于平稳背景噪声帧仅用5比特(对应250bps)。

        知觉增强

        知觉增强是解码器的一部分,当被启用时,能减少编解码过程中产生的噪声或失真的知觉。在大多数情况下,知觉增强会带来声音客观上的偏离(如仅考虑SNR),但最后仍听起来更好(主管增强)。

        等待时间和算法延时

        每一个语音编解码器在传输中都会引入延时。对于Speex,延时等于帧长加上处理每一帧需要前几帧的数量。在窄带操作中(8kHz),延时为30ms;在宽带操作中(16kHz)延时为34ms,这不包括编解码帧时的CPU时间。

        


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值