本文主要介绍一些和音频相关,但是平时大家不甚理解的概念,这些概念在平时用到的各种软件中都是在普遍使用的,例如声学前端处理的各种技术。这些技术我司还是做得不错的,不过我们部门只是应用。这些技术单讲一个都是一个很大的话题,我既不是这方面的专家,具体算法非我擅长,详细描述也非本文目的,只是抛砖引玉的介绍,在项目中谈到这些话题的时候至少对相关概念是比较清楚的。

1 Audio Codec

1.1 概念

        Audio Codec,就是音频编解码器。

        在软件层面上的概念

        音频编解码器是一个执行算法的计算机程序,能压缩与解压缩数字音频数据到音频文件或流媒体音频编码格式。该算法的目的是保证质量的前提下使用最少的比特表示高保真音频信号。这可以有效地减少存储空间和传输已存储音频文件所需的带宽。大多数编解码器是实现为一个具有接口的库供一个或多个媒体播放器使用。

        在硬件层面上的概念

        音频编解码器指一个能编码模拟音频到数字音频和解码数字音频到模拟音频的独立设备。换种说法,它包含运行在同样时钟的模数转换器(ADC)和数模转换器(DAC)。这在声卡中被使用以支持音频输入和输出,如下图所示:

Android音频知识进阶-编程之家

1.2 Audio Codec 功能描述

        Audio Codec 提供录音和播放功能,录音时模拟信号从麦克风输入或是线入,经过模拟部分增益放大,再转换成数字信号,最后从 I2S 接口输出,实现录音功能,支持立体声录音;回放时,音频信号从 I2S 接口输入,再由 DAC 转换成模拟信号输出,支持立体声音乐播放。

        录音模式:

        录音模式时,原始音频模拟信号(麦克风或线入信号)从模拟输入端输入,经过可编程增益后到 ADC 进行转 换,再经过数字部分的滤波和音量控制,

        最终录音的数字信号数据从 I2S 接口输出,存入开辟的环形缓冲区,然后由CPU取走并存储,完成整个录音功能操作。

        播放模式:

        播放模式时,芯片利用DMA将内存中的音频信号数据取出,通过 I2S 接口送到 DAC 数字部分,经过数字部分的滤波和音量控制,再经过模拟部分的滤波,

        最后由 Lineout 端输出模拟音频信号,大致如图所示。

Android音频知识进阶-编程之家

2 声学前端处理技术

        直接采集上来的音频实际上是原始的声音,包含了环境噪声、回声、混响等各种干扰,在做语音识别等各种工作的时候会影响准确率,所以在真正保存下来或者后续传输的时候会进行声学前端处理,其主要的环节如下:

2.1 声学降噪

        现实生活中,语音信号一般都带有噪声,在进一步处理信号前(如语音识别,语音编码),往往要对信号进行降噪。这里简单介绍几种简单的降噪算法,例如自适应滤波器等。随着信噪比的减小,降噪方法处理的效果也随之变差,也经常使得语音丢字或者波形失真。如何在低信噪比情况下,达到不错的降噪效果,是一个值得探究的问题

        所以语音降噪主要研究如何利用信号处理技术消除信号中的强噪声干扰,从而提高输出信号的信噪比以提取出有用信号的技术。消除信号中噪声污染的通常方法是让受污染的信号通过一个能抑制噪声而让信号相对不变的滤波器,此滤波器从信号不可检测的噪声场中取得输入,将此输入加一滤波,抵消其中的原始噪声,从而达到提高信噪比的目的。这里我们从语音和噪音的特性开始介绍。

2.1.1语音的特性

        (1)语音是时变的、非平稳的随机过程

        人类发音系统生理结构的变化速度是有一定限度的,在一段时间内(10-30ms),人的声带和声道形状是相对稳定的,因而语音的短时谱具有相对稳定性,所以在语音分析中就可利用短时谱的这种平稳性。

        (2)语音可分为浊音和清音两大类

        浊音在时域上呈现出明显的周期性,在频域上有共振峰结构,而且能量大部分集中在较低频段内而清音段没有明显的时域和频域特征,类似于白噪声。在语音增强研究中,可利用浊音的周期性特征,采用梳状滤波器提取语音分量或者抑制非语音信号,而清音则难以与宽带噪声区分。

        (3)语音信号可以用统计分析特性来描述

        由于语音是非平稳的随机过程,所以长时间的时域统计特性在语音增强的研究中意义不大。语音的短时谱幅度的统计特性是时变的,只有当分析帧长趋于无穷大时,才能近似认为其具有高斯分布。高斯分布模型是根据中心极限定理得到的,将高斯模型应用于有限帧长只是一种近似的描述。在宽带噪声污染的语音增强中,可将这种假设作为分析的前提。

        (4)语音感知对语音增强研究有重要作用

        人耳对语音的感知主要是通过语音信号频谱分量幅度获得的,人耳对频率高低的感受近似与该频率的对数值成正比。共振峰对语音的感知十分重要,特别是第二共振峰比第一共振峰更加重要。

2.1.2 噪声的特性

        噪声来源于实际的应用环境,因而其特性变化无穷,噪声可以是加性的,也可以是非加性的。考虑到加性噪声更普遍且易于分析问题,并且对于部分非加性噪声,如乘积性噪声或卷积性噪声,可以通过同态变换而成为加性噪声,这里我们仅讨论加性噪声。

        加性噪声大致可分为周期性噪声、冲激噪声和宽带噪声:

        (1)周期性噪声

        周期性噪声的特点是有许多离散的窄谱峰,它往往来源于发动机等周期运转的机械,如或交流声会引起周期性噪声。周期性噪声引起的问题可以通过功率谱发现,并通过滤波或变换技术将其去掉。

        (2)冲激噪声

        冲激噪声表现为时域波形中突然出现的窄脉冲,它通常是放电的结果。消除这种噪声可根据带噪语音信号幅度的平均值确定闽值,当信号幅度超过这一阈值时判为冲激噪声,然后进行消除。

        (3)宽带噪声

        宽带噪声的来源很多,如热噪声、气流如风、呼吸噪声及各种随机噪声源等,量化噪声也可视为宽带噪声。由于宽带噪声与语音信号在时域和频域上完全重叠,因而消除它最为困难,这种噪声只有在语音间歇期才单独存在。对于平稳的宽带噪声,通常认为是白色高斯噪声不具有白色频谱的噪声,可以先进行白化处理。对于非平稳的宽带噪声,情况就更为复杂一些。

2.1.3带噪语音模型

        对于通常的的工厂噪声、人的噪音以及汽车噪声,一般符合如下的假设:噪声是加性的、局部平稳的、噪声与语音统计独立或不相关。

        带噪语音模型表达式如下

        y(n)=s(n)+d(n)

        其中s(n)表示纯净语音,d(n)表示噪声,y(n)表示带噪语音。带噪语音模型如图所示:

Android音频知识进阶-编程之家

        说到噪声是局部平稳,是指一段带噪语音中的噪声,具有和语音段开始前那段噪声相同的统计特性,且在整个语音段中保持不变。也就是说,可以根据语音开始前那段噪声来估计语音中所叠加的噪声统计特性。

2.1.4 几种传统的语音降噪方法

        这里列举几种语音降噪的方法并对其性能进行简单介绍如下:

2.1.4.1 频谱减法

        频谱减法是利用噪声的统计平稳性以及加性噪声与读音不相关的特点而提出的一种语音增强方法。这种方法没有使用参考噪声源,但它假设噪声是统计平稳的,即有语音期间噪声振幅谱的期望值与无语音间隙噪声的振幅谱的期望值相等。用无语音间隙测量计算得到的噪声频谱的估计值取代有语音期间噪声的频谱,与含噪语音频谱相减,得到语音频谱的估计值。当上述差值得到负的幅度值时,将其置零。

        频谱减法的主要思想是认为:含噪语音在噪声平均功率以上的部分就是语音功率,其余则认为是噪声功率。这种显然忽略了噪声和语音的随机特性。在含噪语音的功率谱中,噪声平均功率以上部分并非全是语音,其中肯定有不少加性噪声成分存在,其下部分则也必有语音成分存在。因此,这种方法对提高语音信噪比十分有限,而且还会引起语音的失真。特别是在低信噪比时,这种方法很难提高语音质量,更难提高语音可懂度。普减法的优点在于它的算法简单,并且可以较大幅度地提高信噪比,其缺点是增强后的语音中含有明显的音乐噪声,这是由频谱相减而产生的一种残留噪声,具有一定的节奏起伏感,故而被称为音乐噪声。

2.1.4.2 线性滤波法

        线性滤波法主要是利用了语音的产生模型。对于受加性稳态白噪声干扰的语音信号来说,语音的频谱又以根据语音的产生模型近似地用含噪语音来预测得到。而噪声频谱则用其期望值来近似。这样得到了语音和噪声近似的频谱后就可得到滤波器,由此滤波器可使语音得到增强。线性滤波法不仅用到了噪声的统计知识,还用到了部分语音知识,但显然这些知识都是一种近似的代替。因此这种方法对提高语音信噪比和可懂效果十分有限。特别是当信噪比较低时,对语音参数的预测误差明显增大,从而降噪效果就不明显,并且当噪声不是白噪声时,按照语音的产生模型就很难准确预测语音参数。因此有些情况下线性滤波方法就能难以应付。

2.1.4.3 小波变换法

        小波分析是一种时频分析,而传统的信号分析是建立在傅立叶变换的基础之上的。由于傅立叶分析使用的是一种全局的变换,因此无法表达信号时频局域性质,而这种性质恰恰是非平稳信号如语音信号最根本和最关键的性质。

        Mallat最早建立了多分辨率分析框架与小波分析的关系。小波变换能将信号在多个尺度上进行子波分解,各尺度上分解所得的子波变换系数代表原信号在不同分辨率上的信息。它具有多分辨率分析的特点,而且在时频域都具有表征信号局部特征的能力。它克服了短时傅立叶变换固定分辨率的缺点,在信号的高频部分,可以获得较好的时间分辨率,在信号的低频部分可以获得较高的频率分辨率,特别适用于像语音信号、地震信号等非平稳信号的处理。

        由于信号和随机噪声在不同尺度的特性关系,许多研究学者已利用这种特性进行信号的去噪处理,并取得较好的效果。但是,由于用子波系数去噪时,需要选择和确定一个用于取舍信号和噪声模极大值的阈值,而在实际应用中该阈值是较难选择确定的。另外,也有学者采用二进子波、子波包和带子波进行语音增强,但这些方法的频率划分是一种倍频程关系,与人耳所固有的对语音的频域感知特性不完全吻合。

2.1.4.4 子空间语音降噪法

        子空间语音降噪法将带噪语音信号投影到语音信号子空间和噪声子空间两个子空间,语音信号子空间中主要为语音信号,但还含有少量的噪声信号,噪声子空间只含有噪声信号,因此对纯净语音的估计可以不考虑噪声子空间中的分量,只保留语音信号子空间中的分量。

        在信号与噪声子空间分解算法中先对信号进行一些假设:语音信号与噪声都是零均值的随机过程;语音信号在短时内是平稳的;语音信号与噪声是正交的:噪声是一个随机的白噪声;所有的信号都是各态历经的,即可以用时间平均来代替统计平均。

        子空间法在低信噪比时效果要差一些,而在高信噪比时效果较好。同时还须注意的是,子空间法的计算量较大,所以实时性会稍差些。

2.1.4.5 自适应噪声抵消法

        就目前而言,带自适应滤波器的自适应噪声抵消法对含噪声语音的降噪效果较好。因为这种方法比其它方法多用了1个参考噪声作为辅助输入,从而获得了比较全面的关于噪声的信息,因而能得到更好的降噪效果。特别是在辅助 输入噪声与语音中的噪声完全相关的情况下,自适应噪声抵消法能完全排除噪声的随机性,彻底地抵消语音中的噪声成分,从而无论在信噪比SNR(Signal toNoise Ratio)方面还是在语音可懂度方面都能获得较大的提高。其工作原理实质上为以均方误差E[e2(n)]或方差e2(n)最小为准则,对噪声d(n)进行最优增 强语音的目的。随着理论性能研究的不断深入,应用日趋广泛。

2.2 回声消除

        回声产生的主要原因是扬声器播放的声音又再次录进麦克风里去,而这个现象在A,B双方开外放的通话下,就转化成一个问题,A说话,A的声音从B的扬声器放出,又从B的麦克风采集进来,从而又传回给A产生回声。

        回声消除算法在输入声音数据的时候,并不清楚什么声音是回声什么声音是本端人说话。回声和本端说话在声学特性上基本没有根本的区别,所以这个时候需要播放前的数据做参考信号Far-end input(或者叫 Ref input-参考输入),因为只有扬声器播放的声音回录才叫回声。根据前面说的,我们知道Ref 的输入并不等于麦克风采集的数据里面的Echo,我们把声音Ref-input的data从扬声器播放出到麦克风采集进来,中间经过的一系列过程称之为 echo path。那么回声消除的主要思想简单来说就是:

        得到了echo 的估计后,再利用维纳滤波或其他方式来消除麦克风数据中的回声部分。

        回声消除实际算法中会遇到一些挑战,例如:

        1) echo delay 问题:ref 信号和 麦克风采集的echo 存在一定delay,这个delay 一般是由于播放和采集的模块的缓存以及空间传播的时间造成的。所以通过Ref 信号来估计echo,首先Ref 数据本身不能错,不然回声消除算法效果不会好。 另外软件层的回声消除算法,还会因为系统或工程框架问题产生delay的跳变等问题;

        2) 实际使用空间的影响:在小的房间,空旷的会议室,楼道等等场景下,空间的混响本身就很重,这个时候产生回声也会有“长拖尾”的情况

        3)实际使用的的影响: 在手机包了手机壳挡住扬声器,放在振动的桌面上,一直摇动设备等一系列情况下都会产品不同的回声反馈。

2.3 音源定位

        “听声辨位”,人的双耳就是一个很好的例子。听觉是一种重要的感觉手段,尤其是在光线昏暗、视物不明和有 障碍物阻挡的情况下更是视觉的有益补充。由于耳朵具有特殊的生理结构,能够捕获声源到达双耳的相位差和声压差信息,通过复杂的信息处理,使得我们能够 准确地进行辨位,并估计出声源的距离。这是一个心理和生理感知的过程。仿生学在移动机器人领域得到了较多的应用,这些机器人模仿人的双耳,通过在相应位置放置一对麦克风,实现对声源的初步定位。由于模型和算法的准确度均不能与人耳相比,对于复杂声场下的定位效果并不理想。所以,现在更多的目光 投向了多麦克风阵列,通过利用冗余麦克风提供的有效信息,从信号处理的角度 解决定位问题。

        阵列的使用在我们现实生活中其实非常普遍,麦克风阵列较之单个麦克风有许多优点,其优越性表现在:

        1)麦克风阵列系统具有空间选择性,可以用“电子”瞄准的方式从声源位置处获取目标信号,并且抑制其它方向的于扰信号,其效果明显优于良 好瞄准的、高方向性的单麦克风。

        2)麦克风阵列系统能够应用于自动跟踪识别声源,当声源移动时,麦克风 阵列并不需要发生物理上的调整,只需系统改变其电子波束指向即可,减少了手工操作。

        3)麦克风阵列系统能够识别监控同时发生的多个声源,在一些多人会话等场合有重要应用。

        4)麦克风阵列系统可以用于近场测距,这是单麦克风无法实现的。

        基于上述的优点,麦克风阵列定位技术目前已经在多种场合得到广泛的应用。如视频电话会议中话者定向,控制摄像头指向说话者,并自动根据距离调焦;利用定位信息在混响环境中获取特定语音, 实现自动监控系统(室内防盗监控,交通监控)、语音助听器装置等。

        目前基于麦克风阵列的声源定位方法大致可以分为三类:

        1)基于可控波束形成的声源定位

        波束形成的基本思想是将各个阵元采集来的信号进行加权求和,通过调控权值使传感器阵列的输出信号功率最大。在传统的波束形成器Conventional

        2)基于高分辨率谱估计的声源定位

        高分辨率谱估计主要有自回归(AR)模型法、最大熵(ME)法、最小方差估计(MVE)法和特征分解(或子空间)法(如MUSIC(Schmidt,1986)2)法、 ESPRIT(Roy,1986)22法)等方法。

        3)基于到达时间差的声源定位算法

        这类方法一般分两个步骤进行。第一步,先进行时延估计Time Delay Estimation,TDE用于计算来自同一个声源的信号到达具有配对关系的两个麦克 风的时间差(Time Differences of Arrival,TDOA)。

2.4 AGC(Automatic Gain Control,自动增益补偿功能)

2.4.1 增益介绍

        Gain – 增益

        一个小的信号Level(电平)经过放大电路成为大的信号Level ,也就是说由小变大之间的差异就叫增益,也叫放大率,反过来的叫衰减率

        dB – 分贝/增益

        分贝是放大器的单位 — dB,放大器输出与输入的比值为放大倍数,单位“倍”,如10倍放大器,100倍放大器。

        当改用“分贝”做单位时,放大倍数就称之为增益,这是一个概念的两种称呼。

        通常,放大器在相串的情况下放大倍数是相乘的,dB数是相加的。

        比如说一部前级的平坦放大器,当输入信号电压为0.1V时,而输出电压为1V这种我们称之10倍放大器,也就是具有+20dB的放大能力,如果以0.1V的输入而能有10V 的输出时,称此放大器为百倍放大,也就是+40dB放大能力。如果我们将信号电平减少到百分之一时,就叫-40dB衰减。比方说,有一个20dB放大器后面又加一个20dB放大器然后又再加一个20dB放大器,这样看起来就是20dB+20dB+20dB=60dB,再看20dB=10倍,10倍x10倍x10倍=1000倍!

        下表是放大倍数和dB之间的关系及换算:

        放大倍数 1 2 3 4 5 6 7 8 9 10

        电压增益(dB) 0 6 10 12 14 16 17 18 19 20

        例如,60dB的电压增益比:60dB=20dB+20dB+20dB。1000倍=10×10×10。

        例如,50dB的电压增益比:50dB=20dB+20dB+10dB。300倍=10×10×3。

2.4.2 Boost Gain

        boost也是一种提高放大器增益的一种技术

        当有对语音的响度进行调整的需要时,就要做语音自动增益(AGC)算法处理,当你在跟远方的朋友进行 语音交流时,背后都有这个算法在默默的工作, 如大名鼎鼎的QQ聊天软件、做语音起家的YY等,语音聊天时都会用到这个算法。

        最简单的硬性增益处理是对所有音频采样乘上一个增益因子,它也等同于在频域每个频率都同时乘上这个 增益因子,但由于人的听觉对所有频率的感知不是线性的,是遵循等响度曲线的,导致这样处理后,听起来感觉有的频率加强了,有的频率削弱了,导致语言失真的放大。

        要让整个频段的频率听起来响度增益都是“相同”的,就必须在响度这个尺度下做 增益,而不是在频率域,即按照等响度曲线对语音的频率进行加权,不能采用一个固定的 增益因子进行加权。

        由些可见,语音的自动 增益处理可以大致分为两个部分:

        (1)响度增益因子的确定。

        (2)把响度 增益因子映射到等响度曲线上,确定最终各频率的 增益权重。

        最后要做的就是把各频率乘上最终的 增益权重,我们就可以得到最终增益后的语音了!

2.5 混响消除

        混响是日常生活中较为普遍的一种现象。混响是一对反射声的集合体,声源产生波阵面,由声源位置向外传播出去,再由房间各个墙面反射回的波在麦克风处叠加形成混响声。所以在很多声音采集场合中,当说话人与麦克风距离较远时,麦克风采集到的语音通常含有混响声。

        借用下面的两幅图示意了一个直达路径和反射路径的例子。由于各个反射路径到达麦克风的距离不同,以及各路径墙面吸收的声音能量不同,到达麦克风的每路信号具有不同的幅度和相位。因此,混响信号可看作是由声源信号经过多次衰减和延迟后叠加而成。

Android音频知识进阶-编程之家

 Android音频知识进阶-编程之家

        从时域的角度来看,混响的声压规律如下:

Android音频知识进阶-编程之家

        适量的混响可以使声音明朗,但混响过大会产生严重的负面影响。过大的混响声会严重影响语音的清晰度和可懂度,也会影响后续语音信号处理系统的性能,所以在某些情况下需要消除混响。

        语音混响消除技术可以分为许多类,从不同的角度可以划分出不同的类别。例如,按照麦克风数量,可以分为单麦克风混响消除技术和麦克风阵列混响消除技术;按照消除混响的影响,分为消除前期混响影响和消除后期混响影响的混响消除系统;按照混响消除过程中所使用的技术,分为逆滤波,均衡,建模,语音增强等混响消除方法;按照是否需要估计声道冲激响应将混响消除技术分为精确混响消除和非精确混响消除。

        下面介绍两种适用于单麦克风系统的混响消除算法:

        1)根据混响语音的特性,选择合适的统计混响模型,估计混响语音信号中混响部分的功率谱。统计混响模型需已知混响时间这一参数,比如说混响时间的盲估计算法,实现从混响语音中直接确定统计混响模型参数。

        2)根据确定的统计混响模型估计出后期混响功率谱,采用谱减法去除后期混响部分。研究混响语音在复倒谱域的特性,设计复倒谱域滤波器,实现残留的后期混响和部分前期混响的消除。

        3)研究自然语言的谐波特性,根据人耳听觉模型,提出一种基于自适应滤波方法的谱线增强技术,提高了语音的主观听觉感受。

3 语音AI

        语音AI相关现在已经大量使用了,最常使用的就是语音助手,在技术上国内的几家顶尖语音智能公司,例如科大讯飞、百度等,将语音相关的技术基于技术或者市场原因分为语音唤醒、短语音识别、非实时长语音识别、实时语音识别、语音合成等。

3.1 语音助手

        语音交流也是人与人之间最自然、最高效的交流方式,语音助手的目的也是达到人与机器之间的基于语音的高效交流。最有名的当属微软小冰和Siri,融合了语音唤醒和语音识别、语义理解、对话管理等自然语言处理能力,能够辅助人们的操控,例如科大讯飞的AIUI等。

Android音频知识进阶-编程之家

3.2 语音听写(短语音识别)

        语音听写,是基于自然语言处理,将自然语言音频转换为文本输出的技术;用于1分钟内的即时语音转文字技术,支持实时返回识别结果,达到一边上传音频一边获得识别文本的效果。

3.3 语音转写(非实时长语音识别)

        语音转写(Long Form ASR)基于深度全序列卷积神经网络,将长段音频(5小时以内)数据转换成文本数据,为信息处理和数据挖掘提供基础。

        转写的是已录制音频(非实时),

3.4 实时语音转写

        实时语音转写(Real-time ASR)基于深度全序列卷积神经网络框架,通过 WebSocket 协议,建立应用与语言转写核心引擎的长连接,开发者可实现将连续的音频流内容,实时识别返回对应的文字流内容。

3.5 语音唤醒

        语音唤醒(Voice Wakeuper)通过辨别输入的音频中特定的词语(如“讯飞语点”),返回被命中(唤醒)结果,应用通过回调的结果,进行下一步的处理,如点亮屏幕,或与用户进行语音交互等。唤醒资源中含有一个或多个资源,只要命中其中一个,即可唤醒

3.6 语音合成

        与语音听写相反,语音合成是将一段文字转换为语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。

3.7 声纹识别

        声纹识别(Voiceprint Recognition),是一项提取说话人声音特征和说话内容信息,自动核验说话人身份的技术。可以将说话人声纹信息与库中的已知用户声纹进行1:1比对验证和1:N的检索,当声纹匹配时即为验证/检索成功。