• 语音专题第一讲,麦克风阵列的语音信号处理技术


    https://blog.csdn.net/ffmpeg4976/article/details/52397000

    转载自地平线机器人大讲堂,主讲人徐荣强。

    2011年11月毕业于英国爱丁堡大学通信与信号处理专业,曾任诺基亚,联想,微软高级音频工程师。现在Horizon-Robotics负责语音相关硬件系统设计,涉及远场高灵敏度麦克风阵列设计,高精度音频硬件编解码器评估验证,远场语音前处理算法的评估验证,涉及声源定位,波束形成,盲信号分离,回声抑制及平稳降噪等相关技术算法。

    前言

    随着人工智能与人们的生活越来越近,语音技术的发展也备受关注。传统的近场语音已经无法满足人们的需求,人们希望可以在更远的距离,更复杂的环境中语音控制智能设备。因此,阵列技术成为远场语音技术的核心。

    阵列麦克风对人工智能的意义:

    1. 空间选择性:通过电扫阵列等空间定位技术可以获取声源的有效位置,智能设备在获取精准的声源位置信息,让我们的语音更加智能,通过算法获取高品质的语音信号质量。
    2. 麦克风阵列可以自动检测声源位置,跟踪说话人,同时可以获取多声源和跟踪移动声源的优势,无论你走到任何位置,智能设备都会对你的位置方向进行语音增强。
    3. 阵列麦克风增加了空域处理,对多信号空时频三维的处理弥补单信号在噪声抑制,回声抑制,混响抑制,声源定位,语音分离方面的不足,让我们的智能设备在复杂的环境中都可以获取高质量的语音信号,提供更好的智能语音体验。

    麦克风阵列技术的技术难点:

    传统的阵列信号处理技术直接应用到麦克风阵列处理系统中往往效果不理想,其原因在于麦克风阵列处理有不同的处理特点:

    1. 阵列模型的建立
      麦克风主要应用处理语音信号,拾音范围有限,且多用于近场模型,使得常规的阵列处理方法如雷达,声呐等平面波远场模型不再适用,在近场模型中,需要更加精准的球面波,需要考虑传播路径不同引起的幅度衰减不同。

    2. 宽带信号处理
      通常的阵列信号处理多为窄带,即不同阵元在接受时延与相位差主要体现在载波频率,而语音信号未经过调制也没有载波,且高低频之比较大,不同阵元的相位延时与声源本身的特性关系很大—频率密切相关,使得传统的阵列信号处理方法不再完全适用。

    3. 非平稳信号处理
      传统阵列处理中,多为平稳信号,而麦克风阵列的处理信号多是非平稳信号,或者短时平稳信号,因此麦克风阵列一般对信号做短时频域处理,每个频域均对应一个相位差,将宽带信号在频域上分成多个子带,每个子带做窄带处理,再合并成宽带谱。

    4. 混响
      声音传播受空间影响较大,由于空间反射,衍射,麦克风收到的信号除了直达信号以外,还有多径信号叠加,使得信号被干扰,即为混响。在室内环境中,受房间边界或者障碍物衍射,反射导致声音延续,极大程度的影响语音的可懂度。

    声源定位

    声源定位技术在人工智能领域应用广泛,利用麦克风阵列来形成空间笛卡尔坐标系,根据不同的线性阵列,平面阵列和空间阵列,来确定声源在空间中的位置。智能设备首先可以对声源的位置做进一步的语音增强,当智能设备获取你的位置信息可以结合其他的传感器进行进一步的智能体验,比如机器人会听到你的呼唤走到你的身边,视频设备会聚焦锁定说话人等等。了解声源定位技术之前,我们需要了解近场模型和远场模型。

    近场模型和远场模型

    这里写图片描述

    通常麦克风阵列的距离为1~3m,阵列处于近场模型,麦克风阵列接受的是球面波而不是平面波,声波在传播的过程中会发生衰减,而衰减因子与传播的距离成正比,因此声波从声源到达阵元时候的幅度也各不相同。而远场模型中,声源到阵元的距离差相对较小,可以忽略。通常,我们定义2L²/λ为远近场临界值,L为阵列孔径,λ为声波波长,因此阵元接受信号不仅有相位延时还有幅度衰减。

    声源定位技术

    声源定位的方法包括波束形成,超分辨谱估计和TDOA,分别将声源和阵列之间的关系转变为空间波束,空间谱和到达时间差,并通过相应的信息进行定位。

    电扫阵列

    通过阵列形成的波束在空间扫描,根据不同角度的抑制不同来判断方向。通过控制各个阵元的加权系数来控制阵列的输出指向,进行扫描。当系统扫描到输出信号功率最大时所对应的波束方向就是认为是声源的DOA方向,从而可以声源定位。电扫阵列的方式存在一定的局限,仅仅适用于单一声源。若多声源在阵列方向图的同一主波束内,则无法区分。而这种定位精度和阵列宽度有关—在指定频率下,波束宽度和阵列孔径成反比,所以大孔径的麦克风阵列在很多场合的硬件上很难实现。

    超分辨谱估计

    如MUSIC,ESPRIT等,对其协方差矩阵(相关矩阵)进行特征分解,构造空间谱,关于方向的频谱,谱峰对应的方向即为声源方向。适合多个声源的情况,且声源的分辨率与阵列尺寸无关,突破了物理限制,因此成为超分辨谱方案。这类方法可以拓展到宽带处理,但是对误差十分敏感,如麦克风单体误差,通道误差,适合远场模型,矩阵运算量巨大。

    TDOA

    TDOA是先后估计声源到达不同麦克风的时延差,通过时延来计算距离差,再利用距离差和麦克风阵列的空间几何位置来确定声源的位置。分为TDOA估计和TDOA定位两步:
    1. TDOA估计
    常用的有广义互相关GCC,Generalized Cross Correlation和LMS自适应滤波

    广义互相关

    广义互相关

    基于TDOA的声源定位方法中,主要用GCC来进行延时估计。GCC计算方法简单,延时小,跟踪能力好,适用于实时的应用中,在中等嘈杂强度和低混响噪声情况下性能较好,在嘈杂非稳态噪声环境下定位精度会下降。

    LMS自适应滤波

    这里写图片描述

    在收敛的状态下给出TDOA的估值,不需要噪声和信号的先验信息,但是对混响较为敏感。该方法将两个麦克风信号作为目标信号和输入信号,用输入信号去逼近目标信号,通过调整滤波器系数得到TDOA。
    2. TDOA定位
    这里写图片描述

    TDOA估值进行声源定位,三颗麦克风阵列可以确定空间声源位置,增加麦克风会增高数据精度。定位的方法有MLE最大似然估计,最小方差,球形差值和线性相交等。TDOA相对来讲应用广泛,定位精度高,且计算量最小,实时性好,可用于实时跟踪,在目前大部分的智能定位产品中均采用TDOA技术做为定位技术。

    波束形成:

    波束形成可分为常规的波束形成CBF,Conventional Beam Forming和自适应波束形成ABF,Adaptive Beam Forming。CBF是最简单的非自适应波束形成,对各个麦克风的输出进行加权求和得到波束,在CBF中,各个通道的权值是固定的,作用是抑制阵列方向图的旁瓣电平,以滤除旁瓣区域的干扰和噪声。ABF在CBF的基础之上,对干扰和噪声进行空域自适应滤波。ABF中,采用不同的滤波器得到不同的算法,即不同通道的幅度加权值是根据某种最优准则进行调整和优化。如LMS,LS,最大SNR,LCMV(线性约束最小方差,linearly constrained Minimum Variance)。采用LCMV准则得到的是MVDR波束形成器(最小方差无畸变响应,Minimum Variance Distortionless Response)。LCMV的准则是在保证方向图主瓣增益保持不变的情况下,使阵列的输出功率最小,表明阵列输出的干扰加噪声功率最小,也可以理解为是最大SINR准则,从而能最大可能的接收信号和抑制噪声和干扰。

    CBF-传统的波束形成

    这里写图片描述

    延时求和的波束形成方法用于语音增强,对麦克风的接收信号进行延时,补偿声源到每个麦克风的时间差,使得各路输出信号在某一个方向同相,使得该方向的入射信号得到最大的增益,使得主波束内有最大输出功率的方向。形成了空域滤波,使得阵列具有方向选择性。

    CBF + Adaptive Filter 增强型波束形成

    这里写图片描述

    结合Weiner滤波来改善语音增强的效果,带噪语音经过Weiner滤波得到基于LMS准则的纯净语音信号。而滤波器系数可以不断更新迭代,与传统的CBF相比,可以更有效的去除非稳态噪声。

    ABF-自适应波束形成

    这里写图片描述

    GSLC是一种基于ANC主动噪声对消的方法,带噪信号同时通过主通道和辅助通道,而辅助通道的阻塞矩阵将语音信号滤除,得到仅包含多通道噪声的参考信号、各通道根据噪声信号得到一个最优信号估计,得到纯净语音信号估计。

    阵列技术的未来发展

    麦克风阵列技术相对于单麦克风系统有很多优点,已成为语音增强及语音信号处理的重要部分。语音增强和声源定位已经成为阵列技术中不可缺少的部分,在视频会议,智能机器人,助听器,智能家电,通信,智能玩具,车载领域都需要声源定位和语音增强。各种信号处理技术,阵列信号处理技术都陆续结合到麦克风阵列的语音处理系统当中,并逐渐得到算法改进和进一步的广泛应用。在复杂的噪声环境,混响环境,声学环境下,强大的硬件处理能力也使得复杂算法实时处理语音增强成为了可能。在未来,语音和图像的紧密结合会成为人工智能领域的新的突破口,在人工智能的风口浪尖,是谁能将语音识别,语音理解,阵列信号处理,远场语音,图像识别,人脸识别,虹膜识别,声纹识别的技术巧妙并有机的结合在一起,并将技术的本质和与人为本的宗旨完美的结合,让我们拭目以待。

  • 相关阅读:
    C++——string转char[]
    Ackerman的非递归算法(未解决)
    单链表——递归求最大整数、节点个数、平均值
    队列——以数组Q[m]存放循环队列元素,设置一个标志tag,以tag=0和tag=1来区别在头指针和尾指针相等时,队列为空或满
    队列——假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意:不设头指针), * 试编写相应的置空队列、判断队列是否为空、入队和出队等算法。
    栈——判断回文
    栈——表达式求值
    栈——匹配()[]
    栈——十进制转八进制
    动态获取导航栏
  • 原文地址:https://www.cnblogs.com/focus-z/p/12078578.html
Copyright © 2020-2023  润新知