概述

  在音频前端处理算法中,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开源算法源码分析的更多相关文章

  1. mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 首先来总结一下 mahout算法源码分析之Collaborative Filtering with AL ...

  2. mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...

  3. 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 这个算 ...

  4. diff.js 列表对比算法 源码分析

    diff.js列表对比算法 源码分析 npm上的代码可以查看 (https://www.npmjs.com/package/list-diff2) 源码如下: /** * * @param {Arra ...

  5. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  6. 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】

    一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...

  7. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  8. mahout算法源码分析之Itembased Collaborative Filtering(二)RowSimilarityJob

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 本篇开始之前先来验证前篇blog的分析结果,编写下面的测试文件来进行对上篇三个job的输出进行读取: p ...

  9. Docker 基础技术之 Linux namespace 源码分析

    上篇我们从进程 clone 的角度,结合代码简单分析了 Linux 提供的 6 种 namespace,本篇从源码上进一步分析 Linux namespace,让你对 Docker namespace ...

  10. Android开源框架源码分析:Okhttp

    一 请求与响应流程 1.1 请求的封装 1.2 请求的发送 1.3 请求的调度 二 拦截器 2.1 RetryAndFollowUpInterceptor 2.2 BridgeInterceptor ...

随机推荐

  1. LeetCode刷题日记 2020/08/18

    给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定的有序链表: [-10 ...

  2. Oracle-创建用户不带C##(Oracle 19c)

    由于oracle从12c开始引入了容器(PDB和CDB).租户的概念.直接连接sysdba用户创建新用户时,会默认在CDB中创建公有用户,用户名需要以"C##"或"c## ...

  3. NC51100 A Simple Problem with Integers

    题目链接 题目 题目描述 You have N integers, \(A_1, A_2, ... , A_N\) .You need to deal with two kinds of operat ...

  4. 存储过程分页以及参数拼接sql语句、C#调用存储过程

    1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入 System.Data.SqlClient.SqlParameter[] parameters = { new Sy ...

  5. NVME(学习笔记_杂谈)

    NVME 协议中一些概念的理解: 1.Namespace :可以将Namespace 理解为一片Logic Block的区域,一个Controller可以支持多个Namespace,每个Namespa ...

  6. 欧拉公式 Euler's Formula

    欧拉公式是数学中最重要的公式之一, 它涉及到了复数, 无理数, 三角函数, 简单优美 \(e^{i\theta} = cos(\theta) + isin(\theta)\) 欧拉公式代表的含义并不是 ...

  7. Java实现文件下载断点续传(一)

    参考文章:https://www.ibm.com/developerworks/cn/java/joy-down/ 1.原理介绍 想象一下我们下载一个10G的文件,当下载到9.99G的时候断网了... ...

  8. Flutter——安装依赖包时,出现Waiting for another flutter command to release the startup lock

    问题描述 运行 flutter packages get 时 出现 Waiting for another flutter command to release the startup lock 解决 ...

  9. pigz命令

    多线程的解压缩文件 语法格式:pigz 参数 文件名 常用参数 -- 显示压缩后的内容 -p 设置线程数 -b 设置文件数据块大小 -q 静默执行模式 -d 将压缩文件恢复为原始文件 -r 递归处理所 ...

  10. offline RL | 读读 Decision Transformer

    论文标题:Decision Transformer: Reinforcement Learning via Sequence Modeling,NeurIPS 2021,6 6 7 9 poster( ...