音视频开发(33)----麦克风阵列入门(一)
麦克风阵列入门(一)
什么是麦克风阵列:
所谓麦克风阵列其实就是一个声音采集的系统,该系统使用多个麦克风采集来自于不同空间方向的声音。
为什么使用麦克风阵列:
麦克风按照指定要求排列后,加上相应的算法(排列+算法)就可以解决很多房间声学问题,比如声源定位、去混响、语音增强、盲源分离等。
【注】:在深入理解概念之前,我们先理解一下麦克风的知识
什么是麦克风的指向性(方向性):
麦克风的方向性是指麦克风可以接收到语音的方向。声音可以从不同的方向传达到麦克风,麦克风的前面/后面/侧面,麦克风将会根据自身的指向性来获取声音。
一个麦克风可以以很高的灵敏度接收来自于前方的声音,而不管后方和侧面的声音,另一个麦克风还可以接收来自于前面和后面的声音,而不管侧面的,有很多种组合。
什么是指向性麦克风:
所谓指向性麦克风是指麦克风要么接收来自于指定方向的声音,要么接收所有角度传来的声音,这取决于麦克风的自身指向属性。
常用的指向性麦克风:
- 全向麦克风
有些麦克风接收来自于任何方向的声音,这种麦克风叫做全向麦克风( 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)----麦克风阵列入门(一)相关推荐
- C++音视频开发从放弃到入门(基于FFmpeg+OpenCV)
前言 音视频开发一定要学C++吗?答案是肯定的.虽然其它语言也能搞音视频开发,甚至使用起来更简单,但"语言越高级,离真相就越远",当你的功能需求日益增多,程序的性能需求越来越迫切, ...
- 音视频开发5. ZLMediaKit库入门使用 编译安装
音视频开发5. ZLMediaKit库入门使用 编译安装 一. ZLMediaKit 库简介 二.编译 三.生成物 1. MedisServer 2. SDK (c语言) 3. 测试程序 4. 问题处 ...
- C++音视频开发核心知识,小白入门必看基础知识
经常收到一些网友的来信或者留言,反馈如下这样的困惑: "我是一名应届毕业生,该如何快速地成长起来" "我只懂 C/C++,是学 Android 开发有前途,还是 iOS ...
- Android 音视频开发入门指南
最近收到很多网友通过邮件或者留言说想学习音视频开发,该如何入门,我今天专门写篇文章统一回复下吧. 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,希望我后面能挤出时间整 ...
- 音视频开发总结之二Android平台相关
一. 音视频采集流程 串联整个音视频录制流程,完成音视频的采集.编码.封包成 mp4 输出. 通过摄像头和麦克风获得实时的音视频数据: 播放流程: 获取流->解码->播放. 录制播放路程: ...
- 从开发小白到入职抖音音视频开发岗位技术总结
1.职业发展的迷茫 前几天发了一篇关于音视频开发学习录总结,文章链接:https://blog.csdn.net/Linuxhus/article/details/112705431 收到一些网友的来 ...
- 做音视频开发,你读对书了吗?(内有福利)
相比于易学难精的很多技术,音视频开发可以说是难入门.更难精通了,尤其是那些查无可查的bug想想都头痛,就算是从业十多年的老兵或许都还有很多棘手的案例,"音视频开发--从入门到弃坑" ...
- 都2021了作为一名Android开发者,还不学音视频开发?我劝你早点认清现实!
缘起 最近经常遇到一些同学问我如何学习音视频,怎样才能快速上手?还有一些对音视频不了解的同学问我该不该学习音视频?作为一名音视频行业的10年Android老兵,我有一些思考分享给大家,希望能对你有所帮 ...
- 音视频开发(38)---麦克风阵列仿真环境的搭建
麦克风阵列仿真环境的搭建 1. 引言 之前,我在语音增强一文中,提到了有关麦克风阵列语音增强的介绍,当然,麦克风阵列能做的东西远远不只是在语音降噪上的应用,它还可以用来做声源定位.声源估计.波束形 ...
最新文章
- 谢文睿:西瓜书 + 南瓜书 吃瓜系列 7. 支持向量机
- php 抽象类 继承,PHP 抽象类继承抽象类时的注意点
- 7-3 旅游规划 (25 分)(C语言实现)
- 读者诉苦:Redis 宕机,数据丢了,老板要辞退我
- Java JDBC c3p0
- stm32f407 spi3 mosi没有输出_正点原子STM32F407探索者开发板资料连载第56章 USB 读卡器实验
- 强化学习 RL - DQN - 智能体Agent
- 深入分析MVC中通过IOC实现Controller依赖注入的原理
- 引擎提示Alias HeroDB跟游戏引擎启动异常怎么解决?
- 最新手机语音助手的调研
- 私有云服务器同步盘的定义及优势详解!
- Traffic Shifting
- 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
- 开关电源变换器稳态原理分析(电感伏秒平衡及电容电荷平衡)
- 我们会有我们的天长地久
- “漏洞百出”的智能音箱,为何能“发大财”?
- 《百年中国文学史》狂人日记
- 纯HTML也能访问数据库
- Bursuite暴力破解实践
- 教你如何使用Google进行搜索
热门文章
- 条件锁pthread_cond_t
- 嵌入式Linux系统编程学习之三十一线程的属性
- mysql服务无法启动进程意外终止_mysql服务无法启动 1067 错误,进程意外终止
- android int 首位值_Android中数值的精确计算
- html里面textfield属性,StyleableTextField的CSS属性htmlText
- 关于HashMap初始化容量问题
- macOS Docker 上安装、启动 MySQL
- 1.4.3 编写自己的模块和包
- 2017.10.23学习知识总结回顾及编写新网页
- SSL证书检查吊销状态