亚马逊Echo和Echo Dot智能音箱获得了成功,它已经使语音命令(通常称为语音UI或语音UI)出现在了新技术产品中。在每一部智能手机和平板电脑上,大多数新型汽车上,以及快速增长的音频产品中,都有这个功能。最终,大多数家用电器,音频和视频产品,甚至像健身跟踪器这样的可穿戴设备,最终也都会有语音命令功能。
“所需信号(用户的声音)与噪声(任何其他声音)的比率越好,语音UI系统越更可靠地工作。“
现在,数以百万计的语音UI产品已经出现,开始看到消费者对这些设备的预期——以及满足这些期望的挑战性。有限的成功以及更原始的语音命令产品表明,除了了解唤醒词,比如"Alexa"或者"OK Google",消费者不愿意适应这些产品可能对他们的其他要求,比如按下按钮叫醒设备,或直接进入远程控制。至少在家里,消费者期望一个语音UI产品来响应来自房间的指令,如果可能的话,甚至是来自不同房间的指令。无论房间的声学特性如何,不管产品放在房间的哪个位置,都期望可靠的声音识别,希望语音UI即使在中等噪音的环境噪声下也能工作。
虽然先进的语音识别系统依赖于基于互联网的计算能力,但语音UI系统的大部分性能取决于系统接收的语音信号质量。"garbage in, garbage out",同样适用于这些系统,就像它适用于任何其他技术一样。对噪音(任何其他声音)所需信号(用户的声音)的比例越好,语音UI系统就越可靠。
语音UI系统使用多个麦克风接收指令,声音识别系统的准确性很大程度上取决于这些阵列是否能够专注于用户的声音,以及拒绝不必要的刺激,如环境噪声或设备本身发出的声音。对于优化这些阵列和控制算法的大多数研究都是开发这些产品的公司密切关注的,这使得产品开发者较少。
让事情变得复杂的是对麦克风阵列设计的不熟悉。 虽然无数的工程师拥有扩音器设计和应用方面的专业知识,但在麦克风上经验要少得多——尽管大多数工程师的耳朵通常能够对扬声器的问题有一个粗略的概念,但是要评估麦克风的性能则要困难得多。 当一个阵列的麦克风数量成倍增加时,挑战就变得越来越复杂。 现在,工程师必须确定哪些类型的麦克风最适合阵列使用,使用的麦克风数量,以及放置的物理配置。
然后需要一个处理算法,使麦克阵列能够识别用户声音的方向,并在拒绝其他声音的同时专注于这个声音。许多这样的算法都是可用的,但所有的算法都必须优化,以适应麦克风的性能,阵列的大小和配置,以及安装外壳的声学效果。
语音UI中使用的麦克风
在语音UI产品中使用的几乎都是单音麦克风。MEMS(Micro Electrical Mechanical Systems)在设计语音UI产品的麦克风阵列中有许多优势:
小尺寸: MEMS通常每边不超过5毫米,因此可以在一个小的产品中安装多达7个麦克风。表面安装设计进一步减少了他们的痕迹。
低成本: 随着产品中麦克风数量的增加,成本成为一个重要的考虑因素。 MEMS集成电路往往是廉价的,它们也可以与具有PDM (脉冲数字调制)端口的处理器直接接口,而不需要昂贵的A/D转换器。
一致性: 麦克风阵列的可预测功能要求阵列中的多个指标匹配良好。由于 MEMS麦克风的制造采用了一个完全自动化的过程,就像用来制造IC一样,所以单元间的一致性通常是好的。
在语音UI产品中使用的大多数麦克风都是全向的,可以从各个方向接收声音。 由于麦克风阵列的方向性是通过一种算法而不是通过麦克固有的方向性来构建的,所以使用全向麦克可以让算法在处理各种麦克风信号时在拾取波束的方式上具有完全的灵活性。
全向麦克的另一个好处是,它们比定向麦克风更能满足频率响应。这种特性降低了算法的处理负载,因此,在产品组装中的方向不再是问题。在可用的MEMS 麦克风选择中,麦克风阵列设计师可以从敏感性、噪声、频率响应匹配以及数字和模拟输出等一系列功能和特性中进行选择。
语音UI算法的组件
语音UI产品中的算法实际上是几种算法的集合,每个算法都有一个特定的功能,可以帮助麦克风阵列专注于用户的声音,忽略不需要的声音。下面是语音UI中通常算法的简要描述。
触发/唤醒词
语音UI系统使用一个指定的唤醒词,如"Alexa"或者"OK Google"——用户使用这个单词来激活语音UI设备。这个唤醒词会有挑战的,因为设备必须立即在设备上使用自己的算法进行识别,而使用互联网资源会造成太多的延迟。设备必须在某种程度上保持活跃,因为它必须不断地监听唤醒词。
#p#分页标题#e#选择一个合适的唤醒词,对操作语音UI设备至关重要。唤醒词必须足够复杂,以便在麦克风输出处产生一个独特的波形,该算法可以很容易地区分出正常的语音,否则成功识别的百分比可能低得令人无法接受。唤醒词不能是通常使用的单词或短语,否则误唤醒的频率可能高得令人无法接受。它也不应该太长,因为越长的短语,用户就越有可能认为这个设备很糟糕。通常,用三到五个音节的唤醒词是最好的选择。
在评估唤醒词算法的性能时,需要考虑两个主要因素。首先,当没有唤醒时,算法多久会指示一个唤醒? 这被测量为每小时误唤醒。其次,算法在背景噪声的存在下能否正确地检测到唤醒词?这是以识别率来衡量的。
大多数唤醒算法都有不同的尺寸。 小型的算法可以减少内存和CPU处理,但会有多一些的错误; 大型算法需要更多的资源,但是犯错更少。模型也是可调整的,允许产品设计师使他们更严格(更少的误唤醒但较难唤醒)或者更宽松(更多的误唤醒但更容易唤醒)。大多数产品设计师选择更加严格的调整,因为当用户在发布命令时往往会接受偶尔重复自己的话,但他们对误唤醒却不那么宽容。
"选择一个合适的唤醒词以纳入算法,是唤醒词识别的关键,从而操作语音UI设备。"
假唤醒是通过播放数小时的口语内容并计算误唤醒的频率来衡量的。在这个测试中,不同的模型大小在性能上的差异变得很明显。图1比较了用于不同调优的小型、中型和大型唤醒词模型的性能。 在这种情况下,每小时不超过一次的错误触发是一个合理的目标。 这个小模型只能通过图左边两个最严格的调整来实现这一点。 中型和大型模型在更广泛的操作范围内实现这一目标。
图1: 用小型、中型和大型算法模型测试每小时误唤醒,左边更严格,右边更宽松
在测量噪声唤醒算法的性能时,研究表明,在环境噪音的存在下,决定唤醒识别率的主要因素是在麦克风上测量的信噪比(SNR)。"信号"表示人的声音对着麦克风的声音有多大,而"噪音"是背景噪音的水平。 在测试中,使用"babble"噪音来模拟家庭中典型的噪音和波形。 图2显示了三个模型大小的图形,所有模型已经调整到每小时不到两个错误的误唤醒。X轴代表 SNR,其较高的信噪比向右。 Y轴是识别的概率。 在大多数情况下,算法在1或2分贝内有相同的性能。
我们应该注意到,相对于大多数音频播放设备的SNR为80至120分贝,10分贝左右的信噪比似乎是不可接受的。 然而,在语音UI应用程序中,用户的声音通常只比周围噪音大几分贝,如下图所示,10到20分贝的 SNR 可以在语音UI应用程序中提供的结果。 因此,尽管在音频播放系统中同样的增长在主观上是不易察觉的,但SNR增加2分贝可以显著提高语音UI的性能,。
"... SNR 增加2分贝可以显著提高语音UI的性能,即使同样的增长在主观上在音频播放系统中是不明显的。"
图2: 触发单词检测作为 SNR 函数的性能。 三种不同模式测试,模型越大,性能越好。
DOA 波达方向
一旦唤醒词被识别,下一步就是确定用户声音的到达方向。 一旦确定了方向,DOA算法就会告诉beamformer算法把注意力集中在哪个方向。
DOA算法的核心功能是检查阵列中不同的麦克风发出信号的相位或时延关系,并利用这些信息确定哪一个麦克风首先接收声音。 然而,这个任务比看起来要复杂得多。 由于房间里的墙壁、地板、天花板和其他物体的反射,用户的声音也会从其他方向传来,而不仅仅是直接从用户的嘴里传来。 最初的声音是所有的 DOA确定所需要的,后来的反射必须被过滤掉。 为此,DOA 算法包括优先逻辑,它将较大声音的初始到达和较为安静的反射分开。这个功能通过电子方式消除了房间内的声音反射,如果仔细调整,这个算法甚至能够拒绝附近表面的反射,比如在一个智能音箱的后面有一堵墙。
通过对环境噪声水平的自动调整,增强了 DOA 算法的运算效果。该算法测量房间内的平均噪音水平,并且只有当输入的信号至少超过环境噪声一定的分贝时,才会重新计算用户的发声位置。 这样,系统就可以锁定一个特定的方向,而不会被相对较低的噪音分散注意力。
#p#分页标题#e#测量 DOA 算法的准确性,需要通过将麦克风阵列周围的8个扬声器均匀地分布在半径1米的圆上,以此来测量 DOA 算法的准确性。 所有8个扬声器都播放漫反射场背景噪音,而一个扬声器除了发出噪音之外还有唤醒词。声音水平固定在60 dBa, 测量的麦克风和漫反射场噪音的水平是不同的,如图3所示。
图3: 矩阵显示波达方向测试的结果。
行索引对应声音来自的实际方向; 列索引表示 DOA 算法返回的方向。
将矩阵压缩成一个数字,代表算法在特定噪音水平上的整体精确性。 在 DOA 算法中,根据它们与正确值的距离来权衡错误,因此使用的单数结果是某个 SNR 的度数误差。图4显示DOA算法在一个非常小的平均误差下运行良好。
图4: DOA 综合结果。
X轴代表了唤醒词的信噪比,Y轴是偏差误差。
DOA算法在大于0 dB的SNR上开始提供有效性能,SNR的精确性能在5dB以上。
AEC 回声消除
在一个集成了扬声器或汽车音响系统的语音UI设备中,干扰语音指令的一种噪音来源是扬声器本身,它可以播放声音反馈、音乐、收音机等等。 语音UI设备必须在麦克录音时减去扬声器发出的声音。
这看起来可能很简单,就像将扬声器的反相信号与来自麦克风的信号混合,稍加延迟,以弥补声音从扬声器传到麦克风所需的时间。 然而,这个过程仅仅是一个 AEC 算法的起点; 它不足以处理现实世界应用程序所带来的许多复杂问题。
第一个复杂因素是,扬声器、用于平衡扬声器的 DSP 和阵列中使用的麦克风可能被具体材料改变了波形。 幸运的是,可以将麦克的输入信号与原(dsp)输入信号进行比较,并计算出修正曲线。
然而,也受到声波反射的影响。 这些反射可能数以千计,在一个大的起居室里,他们可能在发言者发出直接声音后一秒钟内后到达麦克风。根据房间模式和房间家具的吸收效果,反射谱含量将不同于说话者直接声音的内容。 这些影响在每个环境中都会有所不同,而且随着人们和宠物在房间里走动,或者随着车内乘客数量的变化而改变。
为了从麦克风信号中减去足够多的声学回波以达到可接受的信噪比,AEC 算法必须在一定误差范围内寻找与材料相匹配的声音(以弥补声学引起的波形变化) ,并且在一个定义的时间窗口上对应于预期的混响时间。 由于阵列中的麦克风之间的距离,每个麦克风接收到一组略微不同的回声和来自扬声器的不同直接声音,所以实现最大的信噪比需要对每个麦克风进行单独的 AEC 处理。
回波消除器的性能通常由其"回波返回损耗增强"或 ERLE 来定义。 这是增益的减少,回波消除器能够减少在麦克风上的扬声器信号。 回波消除器一般可以取消至少25分贝,具有良好的性能,最好的可以取消超过30分贝。
AEC寻找反射的时间被称为"回声尾长" 回波尾长度越长,可以取消的反射越多,算法的性能就越好。 然而,更长的波尾需要更多的内存和CPU。图5显示了回波返回损失作为尾长的函数。 这种测量是在一个半消声室中进行的。可以看到,大部分都是通过200毫秒的尾长和较长的波尾来实现的。
图5: 回波消除器的性能作为尾长的函数。
测量是在一个半回声的声音室进行,表明200毫秒之后几乎没有改善。
半回声的房间是相当容易处理,但不代表真实世界的使用。 图6显示了回波消除器在逐渐增加的混响室中的性能。 现在对于更长声尾的需求是显而易见的,最大的反射空间可以从更长的回声尾中受益。
图5: 4个房间中的回声消除测试
当扬声器以线性方式执行时,AEC 算法的性能更好。 如果扬声器在很大的程度上表现出失真,那么将产生失真谐波,而 AEC 将不会认识到这些是原反射,因此不能取消它们。 扬声器的总谐波失真(或 THD)是其线性程度的度量。 THD 占信号水平的百分比越低,说话人的行为就越灵活。 由于 AEC 无法取消,扬声器的失真将出现在 AEC 的输出中。
#p#分页标题#e#例如,如果扬声器有1% 的 THD,那么失真组件将比信号水平低40分贝。 如果回波消除器有30 dB 的 ERLE,那么 THD 为1% 是可以接受的。 现在考虑一下10% 的 THD。 在这种情况下,失真组件是低于信号水平20分贝,这将会淹没 AEC。 3% 的 THD 将产生30分贝以下的失真,这仍然会影响 AEC。
重要的是要测量整个系统,包括扬声器和麦克风。 仅仅测量扬声器的声学输出是不够的,因为用于许多语音UI产品的外壳可以直接从扬声器传到麦克风上。 考虑下一页图7所示的图。 这个图表显示了用外部参考麦克风测量扬声器的 THD。 每一行代表一个不同的播放级别。 对于每一个回放级别,记录测量的 SPL 和在整个音频频谱的多个频率的 THD。 图上的圆形气泡表明,测量的 THD 只出现在 THD 高于3% 的水平。 扬声器的行为是线性的,只有在很大的程度时,才会在较大的扭曲。
图7: 利用外置麦克风测量扬声器失真情况。 扬声器是线性的,只有在高SPL时才会扭曲。
这种测量方法现在正在重复使用机载语音接收麦克风,它位于一个典型的带有语音UI的"智能扬声器"的外壳顶部。 在这种情况下,如图8所示,在500至800赫兹的范围内,与500至800赫兹的麦克风结合在一起,这是不可接受的; 必须重新设计,以增加刚度和更好的隔音效果。
图8: 用产品本身的麦克风测量同一个扬声器的畸变,声音会在500至800赫兹之间的失真。
Beamforming 成形
多麦克风阵列常用于语音UI系统的原因是,多个麦克风可以使阵列变得方向化ーー专注于来自特定方向的声音。 这个过程被称为成形过程。 它有助于隔离用户的声音,同时拒绝来自其他方向的声音,提高了 SNR。
例如,如果用户在麦克风阵列的一边,而另一边是空调,空调器的声音首先到达用户对面的麦克风,然后到达用户最近的麦克风。 算法使用这些时差来消除空调声音,同时保留用户的声音。
阵列中的麦克风越多,有效的波束形成效果就越好。一个有两个麦克风的阵列取消声音的能力有限,但是一个有多个麦克风的阵列可以抵消来自更多方向的声音。麦克风越少,性能就会随着视角的变化而变化——用户的声音和语音UI产品之间的角度变化而变化。
可以通过动态调整其性能优化 SNR 以形成波束算法。 可以收紧波束宽度,以便更好地关注用户的声音,更有效地拒绝来自其他方向的声音,但语音UI系统将需要评估和调整并确保波束集中在用户身上。 这种努力增加了对系统的需求,因此大多数波束维持一个相当宽的光束。 例如,一个典型的七麦克风阵列的波束宽度相对于DOA而言大约为60度。
图9显示了波束形成消除背景噪音的能力。 上面显示了一个麦克风的频谱。 底部的数字是一个7麦克风的输出。 水平条纹是与语音信号相关的和声,背景的橙色/红色是嘈杂的噪音。 理想的结果将是被黑暗区域所包围的条纹。 在前置波束的测量中,语音被保留下来,背景噪声减少了6到7分贝。这在语音识别方面提供了明显的改进。
图9: beamformer的实现来减少背景噪音, 暗段对应于较低的信号水平。
Noise Reduction减噪
虽然麦克风阵列系统使用方向拾取模式来过滤掉不想要的声音(比如噪音) ,但是有些不想要的声音还可以通过一种算法来减弱或消除,这种算法可以识别它们与所需信号分离的特性,然后去除不需要的声音。 一个减噪算法可以运行在一个单一的麦克风或一个阵列,可以帮助唤醒词识别和提高语音UI性能。 因此,减噪可以用于语音UI信号处理链的多个阶段。
声音命令是暂时的事件,而不是稳定的状态。 任何存在的或重复的声音,都可以从麦克风阵列发出的信号中被探测到并消除。 例如汽车的道路噪音,以及家庭中的洗碗机和暖通空调系统的噪音。 高于或低于人类声音频谱的声音也可以被过滤。
减噪算法已经被广泛使用了很多年,但是大多数都是针对手机应用而不是语音UI优化的。 它们倾向于强调对人类理解最重要的频谱,而不是电子频谱中最关键的声音分离和理解语音指令的系统。 大多数用于手机的降噪算法实际上降低了语音UI的性能。 简单地说,人类听到的东西和语音UI系统不同。
#p#分页标题#e#一个衡量降噪算法工作效果的方法是看看它在回波消除器的输出中提供了多少额外的dB信号。 图10显示了 DSP 在频域降噪算法的性能,减少了多达12dB 的残余回波。
图10: 减噪算法对 ERL 的影响。 曲线越高,衰减越大,效果越好。
声音质量的主观提高立即得到了认可,但是它能改善语音识别算法的性能吗? 这需要额外的测量来量化。 图11重现了图2中的那些曲线, 与原始内容相比,噪声减小使曲线向左移动了2分贝。 实验结果表明,该算法提高了语音识别的整体性能。
图11: 减噪算法对 ERL 的影响。 曲线越高,衰减越大,效果越好
这就是对语音UI系统基本原理的理解。 进一步,可以研究不同的麦克风阵列配置和不同的麦克风选择的影响。 在检查了这些效果之后,工程师和产品设计团队可以为产品获得更可靠的性能。
【本文来自51CTO专栏作者“老曹”的原创文章,作者微信公众号:喔家ArchiSelf,id:wrieless-com】
戳这里,看该作者更多好文
【编辑推荐】
王威:工业互联网驱动徐工制造转型升级的实践探究|V课堂第114期
当我们在讨论金融CTO能不能做银行行长的时候,我们到底是在讨论什么?
打造企业级移动测试云平台
编程新手如何快速提高开发能力?
写给 Android 开发的小程序 UI 布局指南(一)
下一篇:欠薪的公司,不要做任何犹豫!