语音识别有近场和远场之分,且很多场景下都会用到麦克风阵列(micphone array)。所谓麦克风阵列是一组位于空间不同位置的麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的一种装置,采集到的信号包含了其空间位置信息。近场语音识别将声波看成球面波,它考虑各麦克风接收信号间的幅度差;远场语音识别将声波看成平面波,它忽略各麦克风接收信号间的幅度差,近似认为各接收信号之间是简单的时延关系。麦克风阵列可分为一维、二维和三维麦克风阵列。一维麦克风阵列,即线性麦克风阵列,各个麦克风位于同一条直线上,常见的为均匀线性阵列(Uniform Linear Array,ULA),如图1所示(以阵列有四个麦克风为例)。均匀线性阵列是最简单的阵列拓扑结构,其麦克风之间距离相等、相位及灵敏度一致。线性阵列只能得到信号的水平方向角信息。二维麦克风阵列,即平面麦克风阵列,各个麦克风分布在一个平面上。常见的为均匀圆阵,麦克风均匀的分布在圆周上,如图1所示(以阵列有四个麦克风为例)。平面阵列可以得到信号的方位角和俯仰角信息。三维麦克风阵列,即立体麦克风阵列,其阵元中心分布在立体空间中,常见的为球阵。由于三维麦克风阵列在消费电子产品中应用相对较少,本文不讨论。

图 1

麦克风阵列涉及到的技术包括去混响、声源定位、波速形成(beamforming)和单通道降噪等。混响是指声音信号遇到墙壁、天花板、地面等障碍物形成反射声,并和直达声相叠加的现象。去混响就是去除那些叠加的声音。声源定位是利用多通道语音信号来计算目标说话人的角度和距离从而实现对目标说话人的跟踪,严格的声源定位是指同时确定说话人的角度(包括方位角、俯仰角)和距离。在消费级的麦克风阵列中,通常关心的是声源到达的方向,也就是波达方向(Direction of Arrival,DOA)。波束形成是对信号进行空域滤波,将多个通道的语音数据变成一个波束(即一个通道)的目标声源,目标声源的信干噪比(SINR)得到提升。单通道降噪是抑制单个通道上的噪声。各个模块的关系如下框图2所示(以四通道为例):

图 2

从上图可以看出,先对每个通道上的语音数据做去混响,同时用每个通道上的语音数据做声源定位得到说话人的角度(方位角和俯仰角等),然后用去混响后的语音数据和算出的说话人的角度去做波束形成得到单通道的语音数据,最后对单通道的语音数据做降噪给后续模块使用。我在“远场关键词识别”项目中主要负责单通道降噪。后来由于人手不够,我又负责了波束形成的一种算法(有多种算法可以实现波束形成功能,不同的算法用在不同的应用场景中),即DSB(delay and sum beamforming)算法。本文就讲讲DSB的原理和实现。

波束形成对多通道语音信号进行合并处理,抑制非目标方向的干扰信号,增强目标方向的语音信号。它的输入是麦克风阵列采集的多通道语音信号,它的输出是增强后的单通道语音信号。示意如图3。

图 3

波束形成的算法一般可分为固定波束形成算法和自适应波束形成算法。固定波束形成算法典型的是DSB(Delay and Sum Beamforming),而自适应波束形成算法典型的是MVDR( (minimum variance distorionless response,最小方差无失真响应)。 DSB可以算是最简单的波束形成算法了,它主要分两步,一是各通道语音信号在时间上对齐,二是对各通道语音信号做加权求和,得到单通道语音信号。

先看各通道语音信号在时间上对齐。上文说远场中近似认为各麦克风接收到的声波之间是简单的时延关系,即各麦克风接收到的同一声波在时间上是有先后顺序的,示意如图4。

图 4

时间对齐就是使各个麦克风接收的来自目标方向的语音能够在时间上同步。该步需要事先知道到达时间差(TDOA, Time Difference Of Arrival),到达时间差可以根据声源定位算法里求出的方位角和俯仰角以及其他的参数求得。 先看均匀线性阵列时间延时的计算。它通常以最先接收到语音信号的麦克风为参考点。如图5所示,平面波被麦克风接收时与垂直于麦克风直线的方向的夹角为θ,显然麦克风1最先接收到声波,就以麦克风1为参考点,麦克风4最后接收到声波。设麦克风之间的距离为d,所以声波到麦克风2比麦克风1多走了l距离, l = dsinθ。又设光速为c,所以声波到达麦克风2比麦克风1延迟了l/c = dsinθ/c 秒。由于是均匀线阵,每个麦克风之间均延时了l/c秒。

图 5

再看均匀圆阵的时间延时的计算。图6是均匀圆阵模型:

图 6

在图6中,信号源映射到XY平面上与X轴的夹角为方位角,表示为α,信号源与Z轴的夹角为俯仰角,表示为θ。各个麦克风均匀的分布在圆周上,以圆心O为参考点计算延时。图7中M轴是信号源射入的方向映射到XY平面上,N轴与M轴垂直。

图 7

可知圆周上的麦克风A与其垂直于M轴的A',声波到达的时间一样。A'与圆心O同在M轴上,算A'与O点的延时同均匀线阵。对同一信号源,在N轴右下方的早于圆心O到,在N轴左上方的晚于圆心O到。先求得OA'之间的距离d,延时τ就可以得到了(计算同均匀线阵一样,τ = dsinθ/c, θ为信号源与Z轴的夹角,即俯仰角)。下面看d怎么求。在均匀圆阵上任何位置上计算d的方法都是一样的,数学表达式也是一样的。还是以上图中的A点为例,如图8。

图 8

A点映射到M轴上是点A’,d即为OA’的距离。设共有N个麦克风,A点处为第n个,A处的麦克风的方位角为α(方位角为信号源映射到XY平面上与X轴的夹角),∠AOX = 2*pi*n/N (X轴的方向为角度0), 令β = ∠AOA’= ∠AOX – α= 2*pi*n/N – α。所以OA’= OA*cosβ =  R*cos(2*pi*n/N– α),R表示圆阵的半径。所以延时τ = OA’*sinθ = R*cos(2*pi*n/N – α)sinθ/c。τ > 0表示相对于圆心O信号提前到,τ < 0表示相对于圆心O信号延时到。

各个通道的延时得到了,信号在时间上就可对齐了。设Sn(t)表示第n个通道得到的声音信号,那么S(t + τ)和S(t + τ)及S(t + τ)等表示做好时间对齐后的信号。信号对齐好后就可以做第二步,即加权求和,表达式如式1:

其中S(t)表示做完加权后的单通道数据,S(t + τ)表示各个通道时间对齐后的信号,γ表示权重,最简单的可以令每个权重值均相同,即γ = 1/N。

原理讲完了,是在时域下讲的。下面看怎么做软件实现,实现是在频域下做的。用到傅里叶变换的性质:令S(t)的傅里叶变换为S(ω),则S(t + τ)的傅里叶变换为S(ω)。时域单通道输出的表达式是式1,对其做傅里叶变换,得到频域单通道输出的表达式式2:

其中ω为一个具体的频点。得到S(ω)后再做反傅里叶变换,就是时域的值了。

因此DSB算法实现步骤如下:

1) 对时域的Sn(t)做傅里叶变换得到频域值Sn(ω)

2) 根据声源定位算法得到的方位角和俯仰角以及其他等得到延时τ

3) 根据τ得到导向矢量(steering vector)

4) 根据式2得到S(ω)

5) 做傅里叶反变换得到S(t)

麦克风阵列波束形成之DSB原理与实现相关推荐

  1. 基于麦克风阵列波束成形声源定位算法实现

    + hezkz17进数字音频答疑 麦克风阵列波束成形声源定位算法原理 麦克风阵列波束成形也是一种利用阵列中的多个传感器对信号进行采集和处理,从而实现对目标信号的增强或者抑制的信号处理技术.在声源定位中 ...

  2. Microphone Array Beamforming(麦克风阵列波束形成)

    最近研究麦克风阵列的波束形成算法,翻译了几篇国外的技术博客文章,贴出来与大家分享. 英语水平有限,难免有一些翻译错误,请轻拍. 原文地址:http://labbookpages.co.uk/audio ...

  3. 麦克风阵列波束基本概念理解

    波束形成 本质上是设计合适的滤波器,对于一类固定滤波器系数的阵列来说,无论输入信号或者噪声信号的统计特征如何,其滤波器系数固定不变,此类波束形成叫Fixed Beamforming,固定波束形成好比传 ...

  4. 菜鸡学习小结--麦克风阵列的波束成形论文(一)

    ROBUST STEERABLE DIFFERENTIAL BEAMFORMERS WITH NULL CONSTRAINTS FOR CONCENTRIC CIRCULAR MICROPHONE A ...

  5. 微信语音技术原理_智能语音技术中麦克风阵列的原理

    麦克风阵列(Microphone Array),从字面上,指的是麦克风的排列.也就是说由一定数目的声学传感器(一般是麦克风)组成,用来对声场的空间特性进行采样并处理的系统. 早在20世纪70.80年代 ...

  6. 麦克风阵列能干这么多事你知道吗?

    转载自: http://www.a-site.cn/article/128846.html 麦克风阵列(MicrophoneArray),从字面上,指的是麦克风的排列.也就是说由一定数目的声学传感器( ...

  7. 音视频开发(37)---麦克风阵列语音增强(二)

    麦克风阵列语音增强(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zhanglu_wind/article/details/81217093 ...

  8. 音视频开发(35)---麦克风阵列语音增强

    1. 引言   对于语音增强的研究,基本上可以划分成两大分支:单通道的语音增强算法和麦克风阵列的语音增强算法(也称为,多通道的语音增强算法).麦克风阵列的语音增强方法的优势在于考虑了声源的位置信息,可 ...

  9. 音视频开发( 34)---麦克风阵列原理二

    麦克风阵列原理二 1 麦克风阵列 麦克风阵列,是一组位于空间不同位置的全向麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的一种装置,采集到的信号包含了其空间位置信息.根据声源和 ...

最新文章

  1. token在浏览器和服务端接收和发送
  2. Python(8):模块内置变量
  3. java网络编程与分布式计算_Java网络编程与分布式计算
  4. 传感器绕着世界坐标系旋转产生的疑惑
  5. 通过[AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]html页面调用cs的方法
  6. 【数据结构笔记25】判断Code[]是否为Huffman Codes,或是否为WPL最小编码
  7. golang orm对比
  8. No package ‘gtksourceview-4‘ found
  9. php访问属性两种方式,使用PHP访问对象的属性
  10. 暴走恭亲王:Jed McCaleb才是中本聪大魔王?
  11. 入侵检测——WebCrack
  12. javascript开发植物大战僵尸网页版游戏源代码下载
  13. java 使用xml生成word_java 根据word xml模板生成word
  14. excel按分数分等级
  15. html实现学生成绩等级划分,【小学生成绩等级】_小学生成绩等级评价制度
  16. 【计算机网络】网络层——IPv6/IP组播/移动IP
  17. 计算机一级ppt演示文稿第5套,PPT | 操作题第 13 套
  18. 互联网快讯:粉笔科技双核驱动实现突围;猿辅导以科技助力教育提质增效;抖音升级谣言专项治理
  19. IV与PSI的理解--深入浅出
  20. USB OTG模式及切换

热门文章

  1. 为什么要背诵新概念英语?
  2. cosface:large margin cosine loss for deep face recognition
  3. 为什么要配置hosts来本地测试?
  4. Jpress的基本使用
  5. JavaMail 使用POP3/SMTP服务发送QQ邮件
  6. 如何提升电脑开机速度?
  7. 教师招聘计算机面试说课稿,教师招聘面试常见问题_ _信息技术说课稿.doc
  8. 计算机的配件知识,最基本的入门知识:电脑由哪些部件组成?
  9. 关于linux python3.7版本 No module named ‘_ssl‘报错
  10. Excel:单元格提取数字,并求和