概述

  在音频前端处理算法中,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. Load-balanced-online-OJ-system 负载均衡的OJ系统项目

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 本项目Github地址 - ...

  2. 配置PHP的运行环境

    一.wamp Wamp是Windows Apache Mysql PHP的缩写,即在windows下将Apache+PHP+Mysql集成的开发环境,操作简单一键安装,摆脱手动修改配置文件的繁琐. 图 ...

  3. 针对SpringBoot服务端返回的空对象和空数组问题

    返回的Json会自动过滤掉空指针的对象,但是若遇到非空指针的没有任何内容的对象,举例如下: public class Person { private String name; private Int ...

  4. React axios 使用 http-proxy-middleware 解决跨域问题小记

    壹 ❀ 引 在上篇bug分析的记录文中,提到axios可做到取消接口请求,所以想写一篇关于axios.CancelToken使用以及原理分析的文章(主要是自己好奇到底如何做到的取消).在准备工作阶段, ...

  5. 从零开始手写缓存框架(二)redis expire 过期原理及实现

    前言 我们在 从零手写 cache 框架(一)实现固定大小的缓存 中已经初步实现了我们的 cache. 本节,让我们来一起学习一下如何实现类似 redis 中的 expire 过期功能. 过期是一个非 ...

  6. 【Android】使用AIDL实现进程间通讯简单案例

    1 AIDL 简介 ​ AIDL(Android Interface Definition Language)是一种接口定义语言,用于生成可在 Android 设备上两个进程之间进行进程间通信(IPC ...

  7. Swoole从入门到入土(27)——协程[协程容器]

    这一章开始,我们要开始全方位讨论Swoole为我们提供的协程机制.在swoole中所有的协程必须在协程容器里面创建(Swoole\Coroutine\Scheduler),Swoole 程序启动的时候 ...

  8. 神经网络优化篇:详解深度学习框架(Deep Learning frameworks)

    深度学习框架 一小点作者内心os:24年春节已过完,从熟悉的地方又回到陌生的地方谋生,愿新的一年都得偿所愿,心想事成. 学到这会儿会发现,除非应用更复杂的模型,例如卷积神经网络,或者循环神经网络,或者 ...

  9. Ansible原理和安装

    目录 Ansible Ansible简介 Ansible的特性 Ansible的基本组件 Ansible安装(rhel8/rhel9) 1. rhel8安装 1.1 配置epel源 1.2 安装ans ...

  10. [WEB安全] XSS攻击防御 Vue

    一.概念 XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序. 这些恶意网页程序通常是JavaScript,但实际上也可以 ...