麦克风阵列入门(一)

什么是麦克风阵列:

所谓麦克风阵列其实就是一个声音采集的系统,该系统使用多个麦克风采集来自于不同空间方向的声音。

为什么使用麦克风阵列:

麦克风按照指定要求排列后,加上相应的算法(排列+算法)就可以解决很多房间声学问题,比如声源定位、去混响、语音增强、盲源分离等。

【注】:在深入理解概念之前,我们先理解一下麦克风的知识

什么是麦克风的指向性(方向性):

麦克风的方向性是指麦克风可以接收到语音的方向。声音可以从不同的方向传达到麦克风,麦克风的前面/后面/侧面,麦克风将会根据自身的指向性来获取声音。

一个麦克风可以以很高的灵敏度接收来自于前方的声音,而不管后方和侧面的声音,另一个麦克风还可以接收来自于前面和后面的声音,而不管侧面的,有很多种组合。

什么是指向性麦克风:

所谓指向性麦克风是指麦克风要么接收来自于指定方向的声音,要么接收所有角度传来的声音,这取决于麦克风的自身指向属性。

常用的指向性麦克风:

  • 全向麦克风

有些麦克风接收来自于任何方向的声音,这种麦克风叫做全向麦克风( omnidirectional microphones)。不管说话的人在哪里对着麦克风说话,前后左右,从0°到360°,所有的这些声音都会以相同的灵敏度被拾取。

  • 单向麦克风

其他的一些麦克风是单向的( unidirectional),他们仅仅接收从指定方向来的声音。当人们对着单向麦克风说话时,要慎重选择对着麦克风的方向。我们必须要对着“接收方向”说话来获得更好的声音增益,任何不同于此方向的声音都会被削弱接收,这也就意味着增益很小。

  • 双向麦克风

另外一种麦克风叫做双向麦克风(bidirectional microphone),这种麦克风可以很好的接收来自于前向和后向的声音,但是两侧的声音增益很小。他在隔膜的相对两侧拾取具有相等灵敏度的声波,与隔膜成直角的指向null。

  • 心型麦克风

另外一种是心型麦克风( cardioid microphone),它可以接收来自于前方和两侧的声音,但是后面的声音的增益很小。事实上,他们名字来源于他们的声音拾取方向,非常的像一个心。

注意:这里没有任何一种麦克风可以说比别的怎么怎么好,不同种类的麦克风在不同的使用环境下有各自的优缺点。从上面看起来,全向麦克风比其他的要好,因为它可以接收来自于所有方向的声音而不是仅仅一个方向,但是试想如果在一个比较嘈杂的环境下,全向麦克风是一个比较low的选择,因为除了我们所需要的声音外,他还录了周围的噪音。在这种环境下,指向性(非全指向性麦克风)麦克风可能会更好,因为他在获取我们所需要方向的声音外,对其他方向的声音进行了压制,使得噪声的增益非常少。所以,这些麦克风的好坏取决于用的环境。

麦克风的排列及原理:

麦克风不同的排列对应不同的算法,那么最简单的排列就是线性排列了,也就是麦克风排列成一排。在远场(指说话人距离麦克风很远)的情况下,我们一般认为人说话的波形是平面波,如下:

那么每个麦克风接收到的信号在同一时刻都不会相同,因为有时延,你可能会问什么是时延,那么下面给出具体的统一线性麦克风阵列模型图:

这个模型具体参数此处不做讲解,很简单直白。那么从这里我们可以看出来,每个麦克风接收到的数据ym(k)与之前的麦克风接收到的数据之前存在延迟。其公式如下:

时间延迟如下(c是声速340m/s):

一般我们都是转化到频域去处理,所以将上述傅里叶变换后得到(别问我傅里叶变换是什么):

切记,这里都是原式子的傅里叶变换后的形式。

好了,理论模型推理到这里,那么开始看我们手头有什么数据,说白了,方程中有哪些参数我们是已知的,ym(k)是已知的,这就是我们的麦克风接收到的数据呀,术语观测数据。这时候不要脑袋一热就开始根据模型往回带数据,模型仅仅是为我们提供参考思路(即使想带回去也不行,vm根本就未知)。

得知观测数据的我们,需要从观测数据中抽离我们想要的内容,那么很自然的想到滤波器。我们称这种滤波器叫做:波束形成滤波器(因为它增强了我们想要的内容,削弱了我们不想要的内容,跟前面的指向性麦克风联系起来,是不是感觉世界很奇妙):

其中:

而这个得到的Z,就是我们所要求的。

问题到了这里变得很清晰,如何估计这个滤波器。波束增强有很多种算法,有很多种估计滤波器的方式,从简单到复杂,从效果差到效果好,各有不同。那么我们这里说一下基于我们上面模型的最简单的delay-and-sum(DS)滤波器,他的效果用一句话概括就是:我们仅仅把各个麦克风接收到的信号补偿他们的时延,然后求一个均值,没有考虑混响等实际场景可能发生的情况。那么,我们的Z如下:

从而我们用最简单的办法得到了我们所要的信号,其性能评估等后续说明。

音视频开发(33)----麦克风阵列入门(一)相关推荐

  1. C++音视频开发从放弃到入门(基于FFmpeg+OpenCV)

    前言 音视频开发一定要学C++吗?答案是肯定的.虽然其它语言也能搞音视频开发,甚至使用起来更简单,但"语言越高级,离真相就越远",当你的功能需求日益增多,程序的性能需求越来越迫切, ...

  2. 音视频开发5. ZLMediaKit库入门使用 编译安装

    音视频开发5. ZLMediaKit库入门使用 编译安装 一. ZLMediaKit 库简介 二.编译 三.生成物 1. MedisServer 2. SDK (c语言) 3. 测试程序 4. 问题处 ...

  3. C++音视频开发核心知识,小白入门必看基础知识

    经常收到一些网友的来信或者留言,反馈如下这样的困惑: "我是一名应届毕业生,该如何快速地成长起来" "我只懂 C/C++,是学 Android 开发有前途,还是 iOS ...

  4. Android 音视频开发入门指南

    最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...

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

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

  6. 从开发小白到入职抖音音视频开发岗位技术总结

    1.职业发展的迷茫 前几天发了一篇关于音视频开发学习录总结,文章链接:https://blog.csdn.net/Linuxhus/article/details/112705431 收到一些网友的来 ...

  7. 做音视频开发,你读对书了吗?(内有福利)

    相比于易学难精的很多技术,音视频开发可以说是难入门.更难精通了,尤其是那些查无可查的bug想想都头痛,就算是从业十多年的老兵或许都还有很多棘手的案例,"音视频开发--从入门到弃坑" ...

  8. 都2021了作为一名Android开发者,还不学音视频开发?我劝你早点认清现实!

    缘起 最近经常遇到一些同学问我如何学习音视频,怎样才能快速上手?还有一些对音视频不了解的同学问我该不该学习音视频?作为一名音视频行业的10年Android老兵,我有一些思考分享给大家,希望能对你有所帮 ...

  9. 音视频开发(38)---麦克风阵列仿真环境的搭建

    麦克风阵列仿真环境的搭建 1. 引言   之前,我在语音增强一文中,提到了有关麦克风阵列语音增强的介绍,当然,麦克风阵列能做的东西远远不只是在语音降噪上的应用,它还可以用来做声源定位.声源估计.波束形 ...

最新文章

  1. 谢文睿:西瓜书 + 南瓜书 吃瓜系列 7. 支持向量机
  2. php 抽象类 继承,PHP 抽象类继承抽象类时的注意点
  3. 7-3 旅游规划 (25 分)(C语言实现)
  4. 读者诉苦:Redis 宕机,数据丢了,老板要辞退我
  5. Java JDBC c3p0
  6. stm32f407 spi3 mosi没有输出_正点原子STM32F407探索者开发板资料连载第56章 USB 读卡器实验
  7. 强化学习 RL - DQN - 智能体Agent
  8. 深入分析MVC中通过IOC实现Controller依赖注入的原理
  9. 引擎提示Alias HeroDB跟游戏引擎启动异常怎么解决?
  10. 最新手机语音助手的调研
  11. 私有云服务器同步盘的定义及优势详解!
  12. Traffic Shifting
  13. 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
  14. 开关电源变换器稳态原理分析(电感伏秒平衡及电容电荷平衡)
  15. 我们会有我们的天长地久
  16. “漏洞百出”的智能音箱,为何能“发大财”?
  17. 《百年中国文学史》狂人日记
  18. 纯HTML也能访问数据库
  19. Bursuite暴力破解实践
  20. 教你如何使用Google进行搜索

热门文章

  1. 条件锁pthread_cond_t
  2. 嵌入式Linux系统编程学习之三十一线程的属性
  3. mysql服务无法启动进程意外终止_mysql服务无法启动 1067 错误,进程意外终止
  4. android int 首位值_Android中数值的精确计算
  5. html里面textfield属性,StyleableTextField的CSS属性htmlText
  6. 关于HashMap初始化容量问题
  7. macOS Docker 上安装、启动 MySQL
  8. 1.4.3 编写自己的模块和包
  9. 2017.10.23学习知识总结回顾及编写新网页
  10. SSL证书检查吊销状态