麦克风阵列原理

2023-10-27

1 麦克风阵列

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

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

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

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

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

                                          

                                                           图1  近场模型和远场模型

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

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

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

                                       

                                                            图2  线性阵列拓扑结构

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

                

                                                            图3  平面阵列拓扑结构

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

                

                                                             图4  立体阵列拓扑结构

2  波束形成

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

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

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

        f(t)=[f(t0) f(t1)…f(tN-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) = etv(k)

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

其中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。加窗后的分数时延滤波器的时延精确程度与理想分数时延滤波器非常接近。


转自:http://blog.csdn.net/YJJat1989/article/details/21529349



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

麦克风阵列原理 的相关文章

  • Matplot pyplot绘制单图,多子图不同样式详解,这一篇就够了

    Matplot pyplot绘制单图 多子图不同样式详解 这一篇就够了 1 单图单线 2 单图多线不同样式 红色圆圈 蓝色实线 绿色三角等 2 1 4 支持的所有颜色及样式 3 使用关键字字符串绘图 data 可指定依赖值为 numpy r
  • 【BLE】蓝牙抓包器 Ellisys 使用说明

    BLE 蓝牙抓包器 Ellisys 使用说明 常用功能 设备过滤 抓包的类型 添加观察的项目 协议解析 连接过程 Connection Indication LLCP Feature Request Response LLCP Length
  • Java多线程通信-CountDownLatch(闭锁)

    一 CountDownLatch 闭锁 闭锁是一个同步工具类 它可以延迟线程的进度直到其到达终止状态 闭锁的作用相当于一扇门 在到达结束状态之前 这扇门是关闭的 并且不允许任何进程通过 当到达结束状态时 这扇门会打开并允许所有的线程通过 当
  • wangeditor3.0上传本地图片和本地视频至服务器

    1 效果 2 注意 我下载的3 0版本 3 组件 在components文件里创建一个wangEditoe vue文件
  • Java基于opencv实现图像数字识别(一)

    Java基于opencv实现图像数字识别 一 最近分到了一个任务 要做数字识别 我分配到的任务是把数字一个个的分开 当时一脸懵逼 直接百度java如何分割图片中的数字 然后就百度到了用BufferedImage这个类进行操作 尝试着做了一下
  • Vue生命周期和钩子函数详解

    Vue生命周期和钩子函数详解 Vue生命周期介绍 组件每个阶段它的内部构造是不一样的 所以一般特定的钩子做特定的事 比如Ajax获取数据就可以在mounted阶段 从Vue实例被创建开始到该实例最终被销毁的整个过程叫做VUE的生命周期 在这
  • A*算法学习笔记

    1 算法思路 1 Dijkstra算法与A 算法 1 Dijkstra算法 贪心策略 优先队列 集合S 已确定的顶点集合 初始只含源点s 集合T 尚未确定的顶点集合 算法反复从集合T中选择当前到源点s最近的顶点u 将u加入集合S 然后对所有
  • 使用myisamchk命令修复表 只能修复myisam表 速度块

    快速检查 myisamchk im var lib mysql db1 只检查没有正常关闭的表 myisamchk iFm var lib mysql db1 仅显示标的重要信息 myisamchk eis var lib mysql db
  • 【Markdown】Typora配置图片上传

    文章目录 0 前言 1 确定需求 2 开始配置 2 1 软件储备 2 2 插件安装 2 3 gitee配置 3 其他配置 3 1 获取SMMS token 参考链接 0 前言 对于喜欢写Markdown文档的人来说 Typora无疑是一个写
  • 30分钟学会如何使用Shiro

    http www cnblogs com learnhow p 5694876 html 一 架构 要学习如何使用Shiro必须先从它的架构谈起 作为一款安全框架Shiro的设计相当精妙 Shiro的应用不依赖任何容器 它也可以在JavaS
  • 宏定义详细知识点

    一 不带参数的宏定义 1 格式 define 宏名 字符串 例 define a 6 则a是宏名 凡是出现a的地方均用6替换 2 注意 宏替换是一种机械替换 不做语法检查 不是下一个语句 其后不加 define命令出现在函数的外面 有效范围
  • 框架中常见的设计模式有哪些学习总结第一篇

    框架中常见的设计模式有哪些 设计模式的作用 通过设计模式写代码 设计模式可以解耦 解耦只是一种思想 代码开发的时候 把代码分开便于维护和管理 运行的时候再合并起来运行 回顾软件设计原则 开闭原则 对扩展开放 对修改关闭 使用范围特变广 单一
  • c语言之实现fastcgi协议的代码完整实现

    FastCGI协议是在CGI协议的基础上发展出来的 如果想了解CGI协议 可以看我另一篇文章 动态web技术 二 CGI FastCGI程序本身监听某个socket然后等待来自web服务器的连接 而不是像CGI程序是由web服务器 fork
  • Android Studio 快速跳转到XML布局界面

    http www jianshu com p 8ca15b831b31 我们开发Android应用程序时 Activity或者Fragment会有一个相对应的布局 在Eclipse中或者一般的做法 我们会在Java代码中找到对应的代码 然后
  • jquery之ajax——全局事件引用方式以及各个事件(全局/局部)执行顺序

    jquery中各个事件执行顺序如下 1 ajaxStart 全局事件 2 beforeSend 局部事件 3 ajaxSend 全局事件 4 success 局部事件 5 ajaxSuccess 全局事件 6 error 局部事件 7 aj
  • Python画图示例(1) 一维数据集绘图

    Python画图示例 1 一维数据集绘图 Python画图示例 2 二维数据集绘图 Python画图示例 3 其他绘图样式 散点图 直方图等 Python画图示例 4 3D绘图 目录 1 用 Numpy ndarray 作为数据传入 ply
  • Trie 前缀树 字典树 简介+实现

    简介 最上面的是根结点 这棵树中存的单词是apple app all bat 如果IsWord为True 就说明从根节点连到这个结点的字母组成的是一个单词 使用前缀树查询的时候时间复杂度只和单词的长度相关 实现 import java ut

随机推荐

  • ctfshow-内部赛

    登录就有flag签退蓝瘦出题人不想跟你说话 jpg 登录就有flag 经过一番固定的注入尝试发现 1 长度限制为5 2 存在过滤且过滤的字符会有回显 能留下来的字符很少这里列出 gt lt 在排除一下 gt lt 可以只留等于号 逗号和点号
  • 多线程编程与互斥锁

    一 线程理论基础 在操作系统原理的术语中 线程是进程的一条执行路径 线程在Unix系统下 通常被称为轻量级的进程 线程虽然不是进程 但却可以看作是Unix进程的表亲 所有的线程都是在同一进程空间运行 这也意味着多条线程将共享该进程中的全部系
  • 浅谈前后端分离

    一 前端 前后端分离已成为互联网项目开发的业界标准使用方式 通过nginx tomcat的方式 也可以中间加一个nodejs 有效的进行解耦 并且前后端分离会为以后的大型分布式架构 弹性计算架构 微服务架构 多端化服务 多种客户端 例如 浏
  • ElasticSearch安装与整合

    1 wget https artifacts elastic co downloads elasticsearch elasticsearch 6 2 4 tar gz 下载es 环境要求 2 启动elasticsearch 使用 sh b
  • 1、图解Oracle Logminer配置使用

    LogMiner配置使用手册 1 Logminer简介 1 1 LogMiner介绍 Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具 使用该工具可以轻松获得Oracle 在线 归档日志文件中
  • PostgreSQL 备份与恢复

    http www wohedb com db html doc administrator guide adm 9 backup and restore htm www wohedb com 中文数据库 第九章 备份与恢复 PostgreS
  • LeetCode题目笔记——463. 岛屿的周长,/C++

    文章目录 题目描述 题目难度 简单 方法一 迭代 代码 方法二 深度优先遍历DFS 代码 总结 题目描述 给定一个 row x col 的二维网格地图 grid 其中 grid i j 1 表示陆地 grid i j 0 表示水域 网格中的
  • 通过jr-qrcode生成二维码并下载到客户端本地(Vue)

    生成二维码 首先生成二维码图片的地址 引入jr qrcode import jrQrcode from jr qrcode 生成二维码图片的地址 生成二维码地址 getQRCodeUrl spreadUrl const QRCodeUrl
  • 修改环境变量引起的bash 出错 解决方案

    来自 http www iteye com wiki blog 1244124 打开ubuntu 发现了 bash 的出错信息 如下 上网检索了一下 发现是环境变量有错误 找了多种方法 下面的方法是有效的一种 错误信息 Command le
  • C++函数

    C 函数 函数是一组一起执行一个任务的语句 与C程序类似 每个 C 程序都至少有一个函数 即主函数 main 通过函数 还可以把一个复杂任务分解成为若干个易于解决的小任务 充分体现结构化程序设计由粗到精 逐步细化的设计思想 即将任务合理划分
  • VR开发中的人物传送——Vive-Teleporter

    这是一个易于使用的传送系统 适用于VR开发和 Unity 游戏引擎 我这里用的PicoVR一体机 这是Unity 生成的 Navigation Mesh 作为玩家可以传送到的边界 因为这个过程是捎带Unity的工作 它是稳定的 可以在大多数
  • 服务器虚拟化 —— 集群服务器 —— 分布式 —— 云服务

    一 服务器虚拟化技术 是下面集群服务器 云服务的技术基石 将服务器的物理资源抽象成逻辑资源 让一台服务器变成几台甚至上百台 很少见啊 相互隔离的虚拟服务器 我们不再受限于物理上的界限 而是让CPU 内存 磁盘 I O等硬件变成可以动态管理的
  • 顺序表,你真的知道吗[SQL]

    好看的目录 前言 一 顺序表是什么 概念及结构 二 顺序表的实现 顺序表的缺点 几道练手题 总结 前言 线性表是n个具有相同特性的数据元素的有限序列 线性表是一种在实际中广泛使用的数据结构 常见的线性表 顺序表 链表 栈 队列 字符串 线性
  • 实现弧形切角两种方式

    1 css 的 radial gradient
  • springboot服务端接口外网远程调试,并实现HTTP服务监听 - 内网穿透

    文章目录 前言 1 本地环境搭建 1 1 环境参数 1 2 搭建springboot服务项目 2 内网穿透 2 1 安装配置cpolar内网穿透 2 1 1 windows系统 2 1 2 linux系统 2 2 创建隧道映射本地端口 2
  • C语言版通讯录操作系统

    通讯录操作系统 目录 通讯录操作系统 一 通讯录的简介 三 各部分代码实现 1 首先在主函数中编写项目的整体框架 2 优化菜单界面 menu函数 3 封装属性 4 创建通讯录的结构变量 在main函数中 5 函数声明 头文件中实现 6 函数
  • Effective C++学习笔记——宁以传引用替换传值

    目录 一 传值效率可能会很低 二 传值可能发生割裂问题 三 适用于传值的情况和注意事项 相关博客 C 引用知识归纳 一 传值效率可能会很低 我们假设有这样两个类 class Human public string name string s
  • ajax中包含哪些技术,AJAX是什么?都包含那些技术?

    AJAX全称为 Asynchronous JavaScript and XML 异步JavaScript和XML 是指一种创建交互式网页应用的网页开发技术 主要包含了以下几种技术 Ajax Asynchronous JavaScript X
  • Apinto 网关: Go语言实现 HTTP 转 gRPC

    gRPC 是由 Google 开发的一个高性能 通用的开源RPC框架 主要面向移动应用开发且基于 HTTP 2 协议标准而设计 同时支持大多数流行的编程语言 gRPC 基于 HTTP 2 协议传输 HTTP 2 相比 HTTP1 x有以下优
  • 麦克风阵列原理

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