波束形成算法学习笔记

  • Broadside 结构
    • 特点
    • 空间响应(频率变化)
    • 频率响应(角度变化)
  • Endfire结构
    • 特点
    • 空间响应(频率变化)
    • 空间响应(延迟变化)
    • 频率响应(角度变化)
  • 总结

麦克风阵列算法有两大类,一类是波束形成算法,另一类是盲源分离算法,两者互有优劣,先记录波束形成算法的笔记。系列博客先介绍两种常见麦克风阵列结构,然后分别介绍固定波束形成(fixed beamforming, data-independent) 和自适应波束形成(adaptive beamforming, data-dependent)。
本篇博客只介绍Broadside和Endfire两种结构,其特点和应用场景。

Broadside 结构

Broadside结构是一种常见的麦克风阵列结构,麦克风之间间距为ddd,目标语音方向和麦克风之间的连线呈垂直关系,如下图所示。

特点

  • Broadside结构的优点是处理简单,只需要将两路麦克风信号相加即可。
  • 缺点也很明显,只能衰减两边的信号,对称角度的空间响应是相同的。
  • Broadside适合用于有期望信号只来自正前方,干扰来自两侧的场景。
  • Broadside设计时只有一个变量,即麦克风间距ddd。算法上可扩展为delay sum和filter sum,会增加延迟或者滤波器参数。

空间响应(频率变化)

  • 两个麦克风的场景,间距d=75mmd=75mmd=75mm ,在90°和270°方向的衰减最厉害。
  • 衰减程度与频率相关,最大的衰减出现在1/2波长处。对于7.5cm麦克风间距,最大衰减频率为
    343m/sec÷(0.075m×2)≈2.3kHz343 m/sec ÷ (0.075 m × 2) ≈ 2.3 kHz343m/sec÷(0.075m×2)≈2.3kHz
  • 高于这个频率后,信号将发生空间混叠,在其他方向也会出现零点。下图中,3kHz的信号出现了四个零点。
  • 减小麦克风间距,可以提高发生空间混叠的信号频率,但是会减少低频信号的衰减,指向性不好。

频率响应(角度变化)

  • 0°方向的频响是平坦的,两路麦克风拾取到这个方向信号是相同的,仅仅相加而已。
  • 90°方向可以找到2.3kHz位置的零点FnullF_{null}Fnull​。
  • 0°和90°是两个极限:0°,低频没有衰减,FnullF_{null}Fnull​ 为无穷大;90°,低频衰减最大,FnullF_{null}Fnull​ 为最小。

Endfire结构

Endfire是一种常见的麦克风阵列结构,麦克风之间间距为ddd,目标语音方向和麦克风之间的连线呈平行关系,目标语音先到达一个麦克风再到达另一个,如下图所示。

特点

  • Endfire结构稍微复杂一些,先收到目标语音的麦克风信号与另一路麦克风延迟z−nz^{-n}z−n后的信号反向相加。
  • Endfire的优点是能有足够的衰减,具体的衰减与延迟z−nz^{-n}z−n相关。
  • Endfire的设计有两个变量,麦克风间距ddd和信号延迟τ\tauτ
  • Endfire适合用于有期望信号只来自端射方向,其他方向都是干扰的场景。

空间响应(频率变化)

下图为两个麦克分组成的差分阵列,信号采样率48k,信号延迟3个采样值,麦克风间距为21mm。(21mm对应48kHz信号的三个采样值的时间。)

  • 根据上述条件可以计算0°方向,到达零点的频率 FnullF_{null}Fnull​
    Fnull=343m/sec÷(0.021m×2)≈8.2kHzF_{null} = 343 m/sec ÷ (0.021 m × 2) ≈ 8.2 kHzFnull​=343m/sec÷(0.021m×2)≈8.2kHz
  • 从下图可以看出,频率小于 FnullF_{null}Fnull​时,都会在180°方向形成零点,得到一个心形响应。
  • 一旦频率超过 FnullF_{null}Fnull​,发生频谱混叠,在多个方向出现零点。

空间响应(延迟变化)

固定麦克风间距ddd,相应的延迟τA=d/c\tau_A=d/cτA​=d/c ,调整延迟τ\tauτ。可以分别得到下面三种空间响应。

  • 延迟τ=τA\tau=\tau_Aτ=τA​,得到cardioid(心形响应),如上图所示。
  • 延迟τ=τA\tau=\tau_Aτ=τA​,得到hypercardioid(超心形响应)。
  • 延迟τ=0\tau=0τ=0,得到dipole。即没有延迟直接相减,这样垂直方向上的信号衰减得最厉害,与broadside刚好相反。

频率响应(角度变化)

下图为两个麦克分组成的差分阵列,信号采样率48k,信号延迟3个采样值,麦克风间距为21mm。对应上图中的心形响应。

  • 计算0°方向,幅频响应平坦时的频率 FflatF_{flat}Fflat​
    Fflat1=343m/sec÷(0.021m×(4/1))≈4.1kHzF_{flat1} = 343 m/sec ÷ (0.021 m × (4/1)) ≈ 4.1 kHzFflat1​=343m/sec÷(0.021m×(4/1))≈4.1kHz
    Fflat2=343m/sec÷(0.021m×(4/3))≈12.3kHzF_{flat2} = 343 m/sec ÷ (0.021 m × (4/3)) ≈ 12.3 kHzFflat2​=343m/sec÷(0.021m×(4/3))≈12.3kHz

  • Fflat1F_{flat1}Fflat1​时幅频响应平坦,然后迅速衰减,直到FnullF_{null}Fnull​,然后迅速上升,直到Fflat2F_{flat2}Fflat2​时再次到到平坦的幅频响应。

  • 差分阵列无法获得平坦的频率响应,而是一个类似高通的效果。

  • 一阶差分阵列在 FnullF_{null}Fnull​之前,幅频响应有一个6dB/octave的上升。

  • 0°和180°是两个极限:0°,低频衰减最少,FnullF_{null}Fnull​ 为最小;180°,低频衰减最大,FnullF_{null}Fnull​ 为无穷大。

总结

结构 优点 缺点
Broadside summing 1. 实现简单
2. 结构简单
1. 非期望方向衰减较少
2. 为防止混叠间距较小
Endfire differential 1. 非期望方向衰减更多
2. 更小的尺寸
1.实现复杂,需要延迟
2.低频幅度衰减
3.需要更深的阵列结构

波束形成算法学习笔记之一(Endfire,broadside)相关推荐

  1. 盲源分离算法学习笔记

    盲源分离算法学习笔记 优缺点(Pros & Cons) 优点 缺点 麦克风阵列算法有两大类,一类是波束形成算法,另一类是盲源分离算法,两者互有优劣.本篇博客先通过比较盲源分离和波束形成来说明盲 ...

  2. 大顶堆删除最大值_算法学习笔记(47): 二叉堆

    堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小).当根节点保存堆中最大值时,称为大根堆:反之,则称为小根堆. 二叉堆(Binary Heap)是最简单.常用的堆,是一 ...

  3. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  4. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  5. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  6. 算法学习笔记:对指定金额计算最少钞票数

    算法学习笔记:对指定金额计算最少钞票数 一.引出问题 财务人员给员工发工资时经常遇到这样一个问题,即根据每个人的工资额(以元作为单位)计算出各种面值的钞票的张数,且要求总张数最少.例如,某职工工资为3 ...

  7. matlab中x从0到5不含0,关于MATLAB的数学建模算法学习笔记

    关于MATLAB的数学建模算法学习笔记 目录 线性规划中应用: (3) 非线性规划: (3) 指派问题;投资问题:(0-1问题) (3) 1)应用fmincon命令语句 (3) 2)应用指令函数:bi ...

  8. 机器学习篇01:在线学习的支持向量机算法学习笔记

    在线学习的支持向量机算法学习笔记 oisvm算法实现说明 oisvm算法实现说明 % 本程序是用于实现基于在线学习的调制信号识别的程序 % % % 第一步:调制信号的生成 % 首先是7个信号:2ASK ...

  9. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

最新文章

  1. Linux脚本关联,shell数组和关联数组
  2. 组合数学--约瑟夫环问题 Josephus
  3. Android状态选择器用法总结
  4. STM32F103定时器输入捕获功能
  5. 【网络流24题】魔术球
  6. Seeds超像素分割
  7. amd cpu排行_目前cpu排行榜(2020cpu性能排名对比)
  8. 医疗管理系统-图形报表、POI报表
  9. swft入门学习-第二天
  10. matlab rloess,R语言利用loess如何去除某个变量对数据的影响详解
  11. 浅谈JAVA设计模式之——责任链模式(COR)
  12. 0017加速UV检测的一种算法
  13. 大数据挖掘-伤寒论和金匮要略(COVID-19用药启示录)
  14. 用textpad使abaqus(inp).fortran,python 代码语法加量
  15. [附源码]Python计算机毕业设计服装销售商城系统
  16. 【调剂】黑龙江大学电子工程学院王国涛副教授课题组招收2022级硕士研究生
  17. SQL:SEARCH DEPTH FIRST和 SEARCH BREADTH FIRST
  18. 【笔记】SQL 6-2
  19. 又一波网红餐饮店惨死,餐饮+新零售或将产生新格局
  20. 2014cad运行要计算机内,win7系统2014cad出现致命错误的解决方法

热门文章

  1. Java顺序表 实现扑克牌游戏简单 (梭哈 / 斗牛)
  2. 局域网内共享打印机的几种方式
  3. Labview2018视频教程(共51节)
  4. 数据分析报告,就该这么写!超详细攻略奉上
  5. 解决Virtualbox安装系统界面显示不全问题
  6. 这款Python视频剪辑神器,牛逼!
  7. 2_linux-常用命令-实例
  8. Sony WH-1000XM3降级到2.00
  9. 学习CALCULATE函数(六)丨帕累托之累计求和
  10. 2021辽宁省大学生程序设计竞赛(C、D、E、F、G、L)