麦克风阵列技术-beaforming开源算法源码分析
概述
在音频前端处理算法中,beamforming算法是一个无法绕过的存在,随着AI技术的广泛发展,前端语音技术的需求也在呈现个性化的动态范围。作为一个深耕音频算法多年的老兵,发现站在巨人的肩膀上,才能做出对得起客户的产品。今天就分析一下一个开源的beamforming算法。

算法流程
步骤一:预处理
预处理内容:
A 加窗:为傅里叶变换做准备,防止频谱泄露。
B 傅里叶变换:通过傅里叶变换,获取每路麦克风的频域值大小.
C 求权重因子:获取每路麦克风的权重因子.
步骤二:beamforming流程
beamforming算法流程
A 加载加权过的频谱数据
B 计算不同麦克风之间的互相关系数
C 寻找音频方向源头: 计算每个麦克风的最大能量
D 复位最大值相关的延时系数.
E 计算人声可能范围的概率系数
步骤三:跟踪人声声源
跟踪算法效果:
A 滤波器滤波:预测滤波器先进行滤波.
B 计算每个麦克风的先验概率.
C 根据当前值计算概率
D 计算概率系数f的值.
E 计算并更新每个粒度的因子
F 添加或删除跟踪源
G 确认是否停止跟踪某个源
H 计算每个源的位置
L 对每个源进行重采样
步骤四:人声分离
降噪处理流程:
A 加载分离后的源
B 噪声统计
C 计算噪声泄露
D 计算拉姆达因子
E 噪声叠加
F 计算噪声总量
G 提取人声
H 增益因子应用
步骤四:后置滤波器
人声提取流程:
A 加载跟踪源
B 计算矩阵信息
C 计算每个帧信息
D 导出帧信息.

算法总结
总的来说,该算法还是比较新的,各项指标比较完善,并且代码水平写的比较高。笔者分析完成之后,真是受益很大。
参考文档
1 经典书籍:http://www.labbookpages.co.uk/audio/beamforming/delaySum.html
麦克风阵列技术-beaforming开源算法源码分析的更多相关文章
- mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 首先来总结一下 mahout算法源码分析之Collaborative Filtering with AL ...
- mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...
- mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...
- diff.js 列表对比算法 源码分析
diff.js列表对比算法 源码分析 npm上的代码可以查看 (https://www.npmjs.com/package/list-diff2) 源码如下: /** * * @param {Arra ...
- OpenCV人脸识别Eigen算法源码分析
1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...
- 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】
一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...
- OpenCV人脸识别LBPH算法源码分析
1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...
- mahout算法源码分析之Itembased Collaborative Filtering(二)RowSimilarityJob
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 本篇开始之前先来验证前篇blog的分析结果,编写下面的测试文件来进行对上篇三个job的输出进行读取: p ...
- Docker 基础技术之 Linux namespace 源码分析
上篇我们从进程 clone 的角度,结合代码简单分析了 Linux 提供的 6 种 namespace,本篇从源码上进一步分析 Linux namespace,让你对 Docker namespace ...
- Android开源框架源码分析:Okhttp
一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...
随机推荐
- 使用Miniconda安装R语言环境
使用Miniconda安装R语言 下载Miniconda3-latest-Linux-x86_64.sh 静默安装 sh Miniconda3-latest-Linux-x86_64.sh -b -p ...
- KB0001.修改DoraCloud管理系统的IP地址
KB0001.修改DoraCloud管理系统的IP地址 DoraCloud 管理系统是一个CentOS Linux的虚拟机.我们既可以通过DoraCloud后台管理系统修改它的IP地址,也可以通过Ce ...
- 从零开始的react入门教程(十),快速上手react-redux,相对于redux它究竟简化了什么?
壹 ❀ 引 在前面两篇文章中,我们介绍了redux与context部分概念与基本用法,这里我们做个简单复习. redux属于应用数据流框架,主要用于应用状态的管理,比如react中的state.其数据 ...
- NC53074 Forsaken喜欢独一无二的树
题目链接 题目 题目描述 众所周知,最小生成树是指使图中所有节点连通且边权和最小时的边权子集. 不过最小生成树太简单了,我们现在来思考一个稍微复杂一点的问题. 现在给定一个 \(n\) 个 ...
- WPF仿win10加载动画 可用于loading加载
直接上xaml 没有cs代码 (自己琢磨了好久感觉这样能接受) <UserControl x:Class="WpfApp1.Loading" xmlns="http ...
- Amlogic电视盒子红外遥控适配笔记
前一阵做了个安卓6的固件, 在R3300L和Q7上跑的, 其他问题没有, 但是有用户反映原来的遥控器用不了了, 于是检查了一下遥控器配置, 顺便学习一下此类设备的红外遥控机制. 为了方便测试还上淘宝买 ...
- 建立DNS隧道绕过校园网认证
建立DNS隧道绕过校园网认证 因为之前在本科的时候破解过校园网三次,主要就是利用其业务逻辑上的漏洞.53端口未过滤包.重放攻击的手段,然后就是一个博弈的过程,这三次加起来用了大概有一年的时间就被完全堵 ...
- Java Console类
用于从控制台设备读取字符信息,通常是文本和密码.尤其读取密码字符时是看不见的. 下面给出一个例子: import java.io.Console; /** * @author xusucheng * ...
- Detours 的使用
Detours 是一个用于在 ARM, ARM64, X86, X64 和 IA64 机器上拦截二进制函数的库. Detours 最常用来拦截应用程序中的 win32 api 调用,比如添加调试工具. ...
- virtualapp启动流程源码分析
virtualapp启动流程分析 1. 首先是启动本身,执行Vpp 的attachBaseContext @Override protected void attachBaseContext(Cont ...