麦克风阵列原理二

1 麦克风阵列

麦克风阵列,是一组位于空间不同位置的全向麦克风按一定的形状规则布置形成的阵列,是对空间传播声音信号进行空间采样的一种装置,采集到的信号包含了其空间位置信息。根据声源和麦克风阵列之间距离的远近,可将阵列分为近场模型和远场模型。根据麦克风阵列的拓扑结构,则可分为线性阵列、平面阵列、体阵列等。

(1) 近场模型和远场模型

声波是纵波,即媒质中质点沿传播方向运动的波。声波是一种振动波,声源发声振动后,声源四周的媒质跟着振动,声波随着媒质向四周扩散,所以是球面波。

根据声源和麦克风阵列距离的远近,可将声场模型分为两种:近场模型和远场模型。近场模型将声波看成球面波,它考虑麦克风阵元接收信号间的幅度差;远场模型则将声波看成平面波,它忽略各阵元接收信号间的幅度差,近似认为各接收信号之间是简单的时延关系。显然远场模型是对实际模型的简化,极大地简化了处理难度。一般语音增强方法就是基于远场模型。

近场模型和远场模型的划分没有绝对的标准,一般认为声源离麦克风阵列中心参考点的距离远大于信号波长时为远场;反之,则为近场。设均匀线性阵列相邻阵元之间的距离(又称阵列孔径)为d,声源最高频率语音的波长(即声源的最小波长)为λmin,如果声源到阵列中心的距离大于2d2/λmin,则为远场模型,否则为近场模型,如图1所示。

图1  近场模型和远场模型

(2) 麦克风阵列拓扑结构

按麦克风阵列的维数,可分为一维、二维和三维麦克风阵列。这里只讨论有一定形状规则的麦克风阵列。

一维麦克风阵列,即线性麦克风阵列,其阵元中心位于同一条直线上。根据相邻阵元间距是否相同,又可分为均匀线性阵列(Uniform Linear Array,ULA)和嵌套线性阵列,如图2所示。均匀线性阵列是最简单的阵列拓扑结构,其阵元之间距离相等、相位及灵敏度一直。嵌套线性阵列则可看成几组均匀线性阵列的叠加,是一类特殊的非均匀阵。线性阵列只能得到信号的水平方向角信息。

图2  线性阵列拓扑结构

二维麦克风阵列,即平面麦克风阵列,其阵元中心分布在一个平面上。根据阵列的几何形状可分为等边三角形阵、T型阵、均匀圆阵、均匀方阵、同轴圆阵、圆形或矩形面阵等,如图3所示。平面阵列可以得到信号的水平方位角和垂直方位角信息。

图3  平面阵列拓扑结构

三维麦克风阵列,即立体麦克风阵列,其阵元中心分布在立体空间中。根据阵列的立体形状可分为四面体阵、正方体阵、长方体阵、球型阵等,如图4所示。立体阵列可以得到信号的水平方位角、垂直方位角和声源与麦克风阵列参考点距离这三维信息。

图4  立体阵列拓扑结构

2  波束形成

波束形成,是对各阵元的输出进行时延或相位补偿、幅度加权处理,以形成指向特定方向的波束。

在远场模型中,假设输入是一个平面波。设传播方向为θ,时域频率(弧度)为ω,声音在介质中的传播速度为c,对于在一个局部均匀的介质里传播的平面波,定义波束k为

k = ωsinθ/c = 2sinθ/λ,其中λ是对应于频率ω的波长。由于信号到达不同的传感器的时间不同,则阵列接收到的信号可表示为

        f(t)=[f(t-τ0) f(t-τ1)…f(t-τN-1)]T=[exp(jω(t-kτ0)) exp(jω(t-kτ1))…exp(jω(t-kτN-1))]T

其中τn为第n个阵元接收到的信号相对于参考点的时延,N为阵元个数,T表示转置。

定义v(k) = [e-jωkτ0 e-jωkτ1 …e-jωkτN-1]T

矢量v包含了阵列的空间特征,称为阵列流行矢量。则f(t)可表示为f(t) = ejωtv(k)

阵列处理器对一个平面波的响应为y(t,k) =HT(ω) v(k)ejωt

其中H(ω)是滤波器系数向量的傅里叶变换。符号y(t,k)强调了输出和输入波数k的关系。时域上的相关性体现在输出是一个复指数,和输入平面波有相同的频率。在频域上式可表示为Y(ω,k) =HT(ω) v(k)

        注意此处ω对应单一的输入频率,所以是窄带的。阵列的空时处理关系完全可以由上式的右端描述,称为阵列的频率-波数响应函数。它描述了一个阵列对于时域频率为ω,波数为k的输入平面波的复增益。

阵列的波束方向图反映了平面波在一个局部均匀的介质中传播情况,它是用入射方向表示的频率-波数响应函数,可以写成B(ω:θ) = Y(ω,k)|k=sinθ。

        阵列的波束方向图是确定阵列性能的关键要素,其主要参数有3dB带宽,到第一零点的距离,第一旁瓣高度,旁瓣衰减速度等。其幅度的平方定义为功率方向图,是常用的一种阵列性能度量。

3 时延补偿

由于麦克风阵元空间位置的差异,各阵元接收到的信号存在时延,在对信号处理之前进行时延补偿,保证各阵元待处理数据的一致性,使阵列指向期望方向。

考虑最简单的均匀线性麦克风阵列,如图5所示。

图5  ULA时延

设麦克风阵列共用M个阵元,中心为参考点,阵元间距为d,信号入射角为θ,声音传播速度为c,则根据几何知识,第m(0≤m≤M-1)个阵元的时延为τm = (d/c) sinθ(m-(K-1)/2)。

麦克风采集的是数字信号,设采样周期为T,则对时域离散的信号来说,时延为D = τ/T。

通常D不是一个整数,而对离散信号来说,整数时延才有意义。对于非整数D,可以分解为整数部分和分数部分D = ⌊D⌋ + d,式中,⌊D⌋为D的向下取整,0≤d<1。对于非零的分数部分d,此时信号实际值介于两个相邻采样点之间,即分数延迟。在实际处理中,可对d四舍五入取整,然后加上⌊D⌋,得到近似整数时延,但这种方法处理的结果不够精确。

为了得到较为精确的处理结果,就必须设计分数时延滤波器,对采样信号进行精确的时延补偿。理想的分数时延滤波器的冲激响应可表示为hid(m) = sinc(m-D)。

由数字信号处理知识可知,上式是无限长、非因果不稳定的,在物理上不可实现。为了解决这一问题,在实际操作中,通常会对上式进行加窗,加窗后滤波器的冲激响应为

h(m)=(W(m-D)sinc(m-D), 0≤m≤M-1。加窗后的分数时延滤波器的时延精确程度与理想分数时延滤波器非常接近。

音视频开发( 34)---麦克风阵列原理二相关推荐

  1. 音视频开发系列-H264编码原理

    H264简介 来自百度百科的介绍: H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式. H.264是ITU-T以H.26x系列为名称命名的 ...

  2. 【Android音视频开发】音频编码原理

    文章变更表 文章版本号 变更内容 变更日期 备注 0.0.1 创建 2022/9/29 初版 0.0.2 补充编码原理和音频格式等内容 2022/9/30 1. 前言 在[Android音视频开发] ...

  3. Android IOS WebRTC 音视频开发总结

    Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下) RTC.Blacker 2016-09-13 11:18 阅读:132 评论:0   An ...

  4. 音视频开发——概述(含TUTK demo iOS)

    开发一款播放器,难不难,要怎么做?想必每个进入到音视频领域的新人都有这样的疑问. 如果仅仅是完成项目,可以说很简单.对于iOS开发人员,网上有不少的开源播放器,如kxmovie.ikjplayer,g ...

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

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

  6. 音视频开发总结之二Android平台相关

    一. 音视频采集流程 串联整个音视频录制流程,完成音视频的采集.编码.封包成 mp4 输出. 通过摄像头和麦克风获得实时的音视频数据: 播放流程: 获取流->解码->播放. 录制播放路程: ...

  7. 音视频开发(二):AudioRecord录制PCM音频

    目录 音频采集API AudioRecord和MediaRecorder介绍 PCM的介绍 AudioRecord的使用(构造.开始录制.停止录制.其他细节点) ffplay播放pcm pcm转为wa ...

  8. Android音视频开发-音频篇-音频的原理

    致知在格物,物格而后知至.所谓致知在格物者,言欲致吾之知,在即物而穷其理也 意思讲的是要探究事物的原理,从而获得智慧. 写代码也是如此,只有了解其中的原理,才能运用自如 所以我们要想学好Android ...

  9. 即时通讯音视频开发(二):视频编解码之数字视频介绍

    前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的. 系列文 ...

最新文章

  1. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现
  2. R语言ggplot2可视化绘制分组水平并行条形图(bar plot)并为条形图内添加标签
  3. Java线程详解(17)-原子量
  4. 神不知鬼不觉地置换 XP用户密码
  5. YII CRUD 例子
  6. 正能量,让网络空间释放更多善意
  7. vim tutor summary
  8. php配置email支持_使用PHPMailer实现PHP发邮件功能
  9. Kingsoft AntiVirus(金山毒霸) and av-comparatives organization
  10. springmvc错误java.lang.IllegalArgumentException
  11. maven如果正常配置不成功,就按照我的就可以配置成功了
  12. Java学习笔记四——运算符
  13. 银河麒麟系统怎么安装微软雅黑字体
  14. 读取金税盘、税控盘或税务Ukey基本信息
  15. 【Web后端架构】2022年10个最佳Web开发后端框架
  16. delphi oracle 三层,delphi+Oracle做的三层结构的干部管理系统
  17. python 输入一个整数,将该整数逆向输出
  18. SMBus Host controller not enabled
  19. Python wordcloud 如何修改云图字体颜色
  20. IIC-LED-AW9120--1原理准备(基于麒麟座)

热门文章

  1. 安装ceston8出现timeout_瓦罗兰特Valorant:显示逾时怎么办 瓦罗兰特time out解决
  2. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之设备树模型
  3. set get java_JAVA中关于set()和get()方法的理解及使用
  4. html自动播放auto,为移动而生的 HTML 属性autocapitalize和autocorrect
  5. 【LeetCode】剑指 Offer 20. 表示数值的字符串
  6. Mysql之查询优化器 EXPLAIN 详解
  7. 微信小程序|开发实战篇之十二---order页面
  8. GDB同步显示源代码——layout
  9. 2018-04-08Java编程夯实学习心得(2)
  10. SQL Server Profiler 常见问题总结