【技术揭秘】解决“鸡尾酒会问题”的利器-基于盲源分离的前端信号处理框架

简介: 盲源分离(Blind Source Separation, BSS)是解决“鸡尾酒会问题”的利器之一,其目的就是要将各个源信号,或后续问题中需要用到的某个或某些源信号从观测得到的混合信号中分离出来。所谓“盲源”,指的是源信号本身的波形、源信号的数目、信号源的位置等关于源信号的先验知识,以及观测点的位置、混合环境的信息等关于混合环境的先验知识未知,需要仅从观测信号中进行分离。
来源 阿里语音AI 公众号

设想在一个“鸡尾酒会”上,不同客人的说话声、脚步声、音乐声等各种声音混合在一起。对于宴会中的客人来说,即使处于嘈杂的环境中,他们也能够很轻松的理解同伴说话的内容,然而对于计算机来说,例如语音识别程序,却很难在这样一个有干扰的环境下将接收到的声音信号准确的识别成文字。但是,如果能用某种算法首先将各种声源所产生的声音信号从麦克风接收到的混合信号中分离开来,再选择所需的声源进行识别,由于消除了其它声源的干扰,所以语音识别的准确率将会显著提高。以上就是著名的“鸡尾酒会问题(The Cocktail Party Problem)”。在人们的日常生活中,类似于“鸡尾酒会问题”的例子还很多,这类问题有着共同的特点,即人们实际观测得到的是多个源信号混合而成的结果,而各个源信号事先却无法得知,但是在后续的处理中往往需要用到某个或某几个源信号。

盲源分离(Blind Source Separation, BSS)是解决“鸡尾酒会问题”的利器之一,其目的就是要将各个源信号,或后续问题中需要用到的某个或某些源信号从观测得到的混合信号中分离出来。所谓“盲源”,指的是源信号本身的波形、源信号的数目、信号源的位置等关于源信号的先验知识,以及观测点的位置、混合环境的信息等关于混合环境的先验知识未知,需要仅从观测信号中进行分离。

随着计算机、互联网、移动互联网、物联网的发展,人们所常用的智能设备也在从过去的电脑、手机,向着更多样化、小型化、可穿戴的方向发展。过去基于键盘鼠标、遥控器等单一的人机交互方式已经不能满足日益多样化的智能设备的需求。语音是人与人之间交互的最自然的方式,所以也必然会成为未来最有效的人机交互方式之一。

然而,在典型的远讲语音交互场景中,除了目标说话人的语音外,通常还存在设备回声、非目标说话人的语音、外界噪声干扰、房间混响等多种不利声学因素的影响。所以,需要一个音频前端(Front-End)来对智能设备采集到的原始音频信号进行增强,提高目标语音的信噪比,以达到提高语音唤醒成功率、识别准确率,提高人机语音交互效率的目的。远讲语音交互场景就是一种典型的“鸡尾酒会问题”,各种不利声学因素可以看作是“鸡尾酒会”上的各种噪声和干扰。所以,可以使用盲源分离技术对设备回声、干扰噪声、房间混响等分别进行处理,最后得到分离后的语音信号,达到语音增强的目的,而“盲源”的特性使得基于盲源分离技术的音频前端具有使用更加灵活,语音增强效果较好等优点。

image.png

使用盲源分离技术实现语音分离的基本原理如下图所示:假设环境中一共有两个声源,两个麦克风,若声源和麦克风的位置在一段时间内是相对稳定的,则两个麦克风在各个时刻观测得到的数据就可以看作是二维平面上的点x,点x由向量a1和a2经过某个尺度缩放并叠加而成。向量a1和a2叫做导向向量(Steering Vector),分别建模了两个源信号的传播路径信息,所以,x是两个声源混合后的结果。而分离的过程就相当于求向量b1和b2,使得b1和a2正交,而b2和a1正交,所以b1和b2分别和x做内积的话,由于正交性消掉了另一个声源的信息,从而实现了声源的分离。

image.png

在实际应用中,只有观测信号x是已知的,源信号和信道信息a1,a2都未知。为了能从有限的条件中求出b1与b2,必须对当前问题做进一步的假设和限定。其中最常用的一种假设即独立性假设:由于不同的源信号是不同的物理过程产生的,所以可以假设各个源之间是相互独立的。将各个源信号看成是相互独立的随机过程所产生的随机变量,根据概率论中的“中心极限定理”:多个相互独立的随机变量相互叠加,其结果越趋近于高斯分布。所以观测信号比源信号就更趋近于高斯分布,而分离的过程就是不断调整b1和b2,使得输出信号的非高斯性,以及各个输出分量的独立性达到最大的过程。这类与独立性为前提的方法也叫做独立成分分析(Independent Component Analysis, ICA),是最典型的盲源分离方法之一。使用盲源分离技术进行噪声抑制,最大的好处就在于其“盲源”的特性,即不需要对声源位置及麦克风阵列拓扑结构做过多的要求就可以实现对声源的分离,所以极大的拓宽了该技术的应用场景。

为了实现更好的人机/人人交互体验,智能设备上通常同时装有麦克风阵列和扬声器,设备既可以录音,也可以放音。所以,智能设备自己播放的声音将被其自身的麦克风采集到,即我们通常说的声学回声(Acoustic Echo),而回声消除(Acoustic Echo Cancellation, AEC)技术通常用于抑制回声,减小其对有用信号造成的影响。传统的回声消除算法,例如NLMS(Normalized Least Mean Square),其信号模型一般建立在单讲模型(即只有回声或将近端信号建模为高斯噪声的情形)之上,并结合梯度下降法在单讲段进行更新。对于双讲情况(即近端语音和回声同时出现),为了防止有用的近端语音被抑制,通常采用的方法是暂停滤波器更新或者减小迭代步长以放慢更新速度。

对于回声消除问题,如果将回声信号也看成是一种噪声的话,观测信号相当于是有用的近端语音与需要抑制的回声信号的混合,而近端语音和回声路径未知。所以,回声消除问题也满足盲源分离的信号模型,所以也可以用盲源分离的相关技术进行求解。与传统方法相比,基于盲源分离的回声消除方法其最大的优点就在于盲源分离模型本身就是一个双讲模型,在模型中对近端信号有着明确建模,所以该方法在双讲段,甚至持续双讲场景中也能具有较好的表现。另外,传统回声消除所使用的梯度下降法中,迭代步长是一个非常关键的参数,步长过大时收敛速度快,但是容易造成迭代发散或在最优点处振荡,而步长过小时迭代稳定,但收敛速度慢。在实际应用中很难使得算法稳定性和收敛速度都同时达到最优。而基于盲源分离的回声消除方法中没有迭代步长参数,同时保证了算法稳定性和收敛速度。去混响与回声消除技术非常类似,如果将延时后的麦克风信号看作是参考信号,则可以套用回声消除的框架来进行处理。

本文中所介绍的噪声抑制、回声消除、去混响技术统一到了基于盲源分离技术的理论框架中,并且在智能电视、投影仪、会议室智能面板等项目的音频前端系统中都用应用。典型设备端的音频系统如下图所示,其中主要分为前端和唤醒两个大模块。前端模块主要负责语音增强,该模块输出增强和分离后的多通道音频,而唤醒模块主要负责根据唤醒词判断是否有人在发起交互,并选择目标说话人的信号送给后续的语音识别。基于盲源分离技术的前端信号处理框架中,“盲源”的特性使得该技术在作为音频前端中的噪声抑制模块使用时具有对麦克风阵列结构和说话人位置限制较少的优点。而对于回声消除来说,该方法的好处在于其信号模型本身就属于双讲模型,所以对双讲场景,甚至是持续双讲场景具有对近端语音造成的失真较小,并且收敛速度快的优点。

image.png

智能语音产品官网链接:
https://ai.aliyun.com/nls

image.png

相关实践学习
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
19天前
|
JavaScript 前端开发 开发者
Vue.js 框架大揭秘:响应式系统、组件化与路由管理,震撼你的前端世界!
【8月更文挑战第27天】Vue.js是一款备受欢迎的前端JavaScript框架,以简洁、灵活和高效著称。本文将从三个方面深入探讨Vue.js:响应式系统、组件化及路由管理。响应式系统为Vue.js的核心特性,能自动追踪数据变动并更新视图。例如,通过简单示例代码展示其响应式特性:`{{ message }}`,当`message`值改变,页面随之自动更新。此外,Vue.js支持组件化设计,允许将复杂界面拆分为独立且可复用的组件,提高代码可维护性和扩展性。如创建一个包含标题与内容的简单组件,并在其他页面中重复利用。
40 3
|
8天前
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
46 3
|
21天前
|
前端开发 JavaScript 开发者
震惊!Web 前端 href 与 src 竟有如此差异,快来一探究竟,掌握热门技术核心要点
【8月更文挑战第26天】在Web前端开发中,`href`与`src`是两个常用属性,但其差异常被忽视。`href`(超文本引用)用于创建文档间的链接关系,如链接至外部网页或引入CSS文件;`src`(来源)则用于在文档内嵌入资源,如图片或JavaScript文件。两者在使用场景及加载机制上有所不同:`href`支持并行下载且不阻塞渲染,适合非关键资源加载;而`src`加载时会暂停页面渲染直至资源加载完成,适用于如图片和脚本这类对页面显示至关重要的资源。因此,正确理解并运用这两个属性对于保障网页性能和用户体验至关重要。
38 3
|
21天前
|
存储 移动开发 前端开发
HTML5时代来临,这些新特性你掌握了吗?一篇文章带你玩转Web前端技术潮流!
【8月更文挑战第26天】HTML5(简称H5)作为新一代Web标准,相比HTML4带来了诸多增强功能。
34 2
|
15天前
|
前端开发 Java Spring
Spring与Angular/React/Vue:当后端大佬遇上前端三杰,会擦出怎样的火花?一场技术的盛宴,你准备好了吗?
【8月更文挑战第31天】Spring框架与Angular、React、Vue等前端框架的集成是现代Web应用开发的核心。通过RESTful API、WebSocket及GraphQL等方式,Spring能与前端框架高效互动,提供快速且功能丰富的应用。RESTful API简单有效,适用于基本数据交互;WebSocket支持实时通信,适合聊天应用和数据监控;GraphQL则提供更精确的数据查询能力。开发者可根据需求选择合适的集成方式,提升用户体验和应用功能。
46 0
|
15天前
|
开发者 安全 UED
JSF事件监听器:解锁动态界面的秘密武器,你真的知道如何驾驭它吗?
【8月更文挑战第31天】在构建动态用户界面时,事件监听器是实现组件间通信和响应用户操作的关键机制。JavaServer Faces (JSF) 提供了完整的事件模型,通过自定义事件监听器扩展组件行为。本文详细介绍如何在 JSF 应用中创建和使用事件监听器,提升应用的交互性和响应能力。
13 0
|
15天前
|
大数据 数据处理 分布式计算
JSF 逆袭大数据江湖!看前端框架如何挑战数据处理极限?揭秘这场技术与勇气的较量!
【8月更文挑战第31天】在信息爆炸时代,大数据已成为企业和政府决策的关键。JavaServer Faces(JSF)作为标准的 Java Web 框架,如何与大数据技术结合,高效处理大规模数据集?本文探讨大数据的挑战与机遇,介绍 JSF 与 Hadoop、Apache Spark 等技术的融合,展示其实现高效数据存储和处理的潜力,并提供示例代码,助您构建强大的大数据系统。
25 0
|
15天前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
39 0
|
15天前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
25 0
|
15天前
|
前端开发 JavaScript 中间件
【前端状态管理之道】React Context与Redux大对决:从原理到实践全面解析状态管理框架的选择与比较,帮你找到最适合的解决方案!
【8月更文挑战第31天】本文通过电子商务网站的具体案例,详细比较了React Context与Redux两种状态管理方案的优缺点。React Context作为轻量级API,适合小规模应用和少量状态共享,实现简单快捷。Redux则适用于大型复杂应用,具备严格的状态管理规则和丰富的社区支持,但配置较为繁琐。文章提供了两种方案的具体实现代码,并从适用场景、维护成本及社区支持三方面进行对比分析,帮助开发者根据项目需求选择最佳方案。
8 0