在音频通话和视频会议中,音频自动增益控制AGC模块的主要作用:

  • • 稳定音频信号的输出电平。无论麦克风采集信号的强弱(如用户离麦克风远近程度不同),尽可能保证音频采集模块的输出音量保持相对一致,不会偏大造成消波,也不会偏小导致听不清楚。
  • • 动态适应音量采集的变化环境。即可以应对环境中噪音变化、设备差异(如不同麦克风灵敏度)、用户说话习惯差异,动态自动调整语音信号的强度,使得其输出保持在一个合适的水平。

在常见的消费类电子产品的音频编解码器Audio Codec的处理链路之中,AGC模块一般工作中经过ADC转换之后的数字域处理环节,通过DSP算法来实现动态调整语音信号数据增益的功能,这样的处理方式灵活性更好,并且可以与其他DSP算法如降噪、AEC等协同优化。当然,一些低端的Audio Codec(例如TLV320AIC3101)内部缺少丰富的数字音频处理功能,那么AGC模块也可以直接在模拟域对PGA的增益进行调节来实现自动增益控制的效果。如下图是TLV310AIC3101的AGC处理链路。

另外,我们只有在音频信号的输入链路的处理中,也就是对麦克风采集语音信号的处理中,才会用到AGC动态调整增益来实现语音信号强度基本保持一致的效果;在音频信号的输出链路,也就是对扬声器播放语音信号的处理链路之中,一般是不需要AGC的,此时对于输出语音信号的大小通常由用户手动设置或系统音量管理,无需自动增益。

1. AGC音频处理链路与VAD模块

一般而言,从麦克风采集到的声音信号中,除了真正的我们想要保留的本地端语音信号以外,不可避免地还会包含有一定的噪声、双向对接状态下的回声等,而AGC既然是通过调整音频采样数据的增益来维持音量的稳定性,那么其要稳定的对象势必是尽可能去除了噪声和回声的本地端语音信号,这就是在音频3A链路中,应该把AGC放在AEC和ANS之后进行处理的原因所在,因为我们要进行音量自动增益控制的对象并不包含回声和噪声。

以上的噪声和回声分别在ANS和AEC环节处理后,在AGC自动增益控制的处理流程中,还包含一个VAD(语音活动检测)模块用于决定何时启动音频采样数据的增益调整。VAD模块的主要目标就是对麦克风连续采集的语音信号区分为语音段与非语音段(如静默或背景噪声),只在语音段才会激活AGC对音频数据的增益进行动态控制,非语音段抑制增益调整或维持固定增益,防止放大噪声,避免AGC的动态增益调整对非语音信号产生负面影响。

VAD模块对于语音段和非语音段的判决,以音频帧为单位,对音频帧内音频采样数据的均方根能量进行统计,与VAD模块维护的动态本地噪声的能量进行比较,若当前帧能量高于动态噪声本底+固定偏移(如+3dB),可判定为语音段候选,再结合状态机控制机制(如连续多帧高于阈值判定为语音段,连续多帧低于阈值判定为非语音段),给出语音段和非语音段的最终判决。

2. AGC的处理流程

2.1. 音频采样数据的预处理

如上所述,AGC工作在Audio Codec的数字域,也就是对麦克风采集信号经过ADC以及其他音频处理模块处理后的数字采样序列中执行自动增益处理的流程。在该环节,首先对连续的音频采样数据进行切片处理,把连续的音频数据切分为固定采样数量的音频帧,后续的AGC处理是以音频帧为单位。

在AGC的分帧处理上,一般会采用50%重叠的方式进行处理,即当前音频帧的前50%采样与上一个音频帧的后50%采样相同,以平滑音频帧的边界效应,避免两个连续的音频帧增益不同造成的突变。

2.2. VAD检测

如上所述,VAD模块通过比较当前音频的帧能量与噪声本底的能量,判断当前音频帧处于语音段还是非语音段。

AGC的流程中一般仅在语音段触发AGC增益调整。

2.3. 自动增益的计算阶段

自动增益的计算阶段要依赖于AGC模块的几个提前预设值:

  • • 目标电平,也就是对于AGC模块的调整而言,期望AGC模块的输出能够达到的目标音量水平。
  • • 时间常数,表示增益调整的时间参数,用于控制增益调节的平滑度,避免声音音量忽大忽小。

在计算增益时,对当前音频帧的能量和目标电平进行比较,当当前帧能量高于目标电平时,应适当减小增益以避免音频采样数据叠加增益后过载;而如果当前帧能量低于目标电平,则增大增益提高音量的幅度。

针对信号的动态范围比较小(信号幅度的差异不大)的应用场景,一般就可以简单的选择线性增益调整模式:即根据当前音频帧的能量与目标电平的差异确定一个增益的大小,对所有的音频采样进行相同的增益调整。

而针对复杂信号环境(如突发噪声、多频段干扰),则需采用非线性增益的调整策略:

  • • 动态范围压缩(DRC)。DRC是一种通过非线性增益调整信号动态范围的技术,不仅可以用于语音信号的处理,也广泛应用于通信系统和智能设备领域中。DRC的工作大致依赖于三个参数:threshold_low、threshold_high和ratio。其工作逻辑大概为:当音频采样的幅度和能量低于threshold_low阈值的时候,DRC就会设置比较低的增益以抑制噪声;当音频采样的幅度和能量在threshold_low和threshold_high之间的时候,DRC按照前面计算出来的目标增益对该音频采样进行设置;而当音频采样的幅度和能量大于threshold_high时,就按照ratio的设置,对这个音频采样的增益进行适当压缩,以避免出现消顶的问题。
  • • 多频段增益控制。首先通过FFT运算执行频带分割,把信号分为低频、中频、高频子带;然后对每个子带单独计算并调整增益,这样可以避免整体调整所导致的频谱失衡问题,整个处理方式有点类似于EQ的工作流程了,对于不同频段设置不同的增益,或者抑制,或者增强。

此外,自动增益计算和调整的时间常数则主要包含两种类型的时间参数,用于实现增益和调整后语音幅度的平滑和自然变化:

  • • 启动时间(Attack Time):当音频信号的幅度突增时,快速降低增益(典型值20~100ms),防止出现瞬时过载的问题。
  • • 释放时间(Release Time):当信号幅度减弱时,则缓慢恢复增益(典型值100~2000ms)。

2.4. 增益的应用阶段及其后处理

AGC处理的最后阶段,就是把计算阶段所计算出来的增益应用到当前音频帧的所有采样数据上。根据前一阶段采用线性或者非线性的增益计算策略,针对性的对音频采样设置一致或者不一致的增益。

此外,经过以上AGC处理以后的音频采样序列数据,还需要限制其幅值(如-1dBFS),防止DAC或扬声器过载;以及与前面阶段的AEC、ANS等音频处理模块反馈联动,实现对音频数据的稳定控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917271.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917271.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917271.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端打包apk包

我用的是HBuilder工具,可视化更便捷,目前我这操作的apk包是不需要上架的,所以跟实际需要上架的可能还有些出入 首先先新建个项目,选择5App模式 把目前需要打包的内容上传到服务器,我们以嵌套的形式进行打包,找到index.…

Ansible提权sudo后执行报错

1.问题 配置了sudo提权信息后,执行ansible-play报错,报错信息如下:2.原因 sudo没有执行**/bin/sh的权限,而ansible脚本中依赖/bin/sh**,所以报错了: 查看日志sudo tail -f /var/log/secure3.解决方式 修改*…

.NET报表控件ActiveReports发布v19.0——正式兼容 .NET 9

ActiveReports 是一款专注于 .NET 和 .NET Core 平台的报表控件。通过拖拽式报表设计器,可以快速地设计 Excel表格、Word文档、图表、数据过滤、数据钻取、精准套打等类型报表,全面满足 WinForm、ASP.NET、ASP.NET MVC、WPF 平台中各种报表的开发需要。同…

SCI论文选词炼句

标准句子不能啰嗦;词不能有问题,得是SCI中经常出现的,符合上下文的。SCI论文中常出现的摸棱两可的词单词涵义例子Architecture指 整体系统设计方案,如网络层次结构、模块组合、激活函数选择等深度学习模型架构Structure更泛泛&…

Qt deleteLater 延迟删除原理

deleteLater 调用 事件发送 void QObject::deleteLater() {QCoreApplication::postEvent(this, new QDeferredDeleteEvent()); }首先该对象继承QObject调用deleteLater, 内部会发送删除事件QCoreApplication::postEvent(this, new QDeferredDeleteEvent()) 到事件循…

TypeScript SDK 升级:通过 Upload Relay 赋能更多应用

自 3 月主网上线以来,Walrus 开发者社区持续展现出强劲的发展势头: 当前 Walrus 已存储超 758 TB 数据,为数百个项目提供支持。在 2025 年 6 月举办的 Sui Overflow 黑客松上,Walrus 成为最受欢迎的数据层。该赛事共收到 599 个项…

C#线程同步(二)锁

目录 1.lock 2.Monitor 3.锁的其它要注意的问题 3.1同步对象的选择 3.2什么时候该上锁 3.3锁和原子性 3.4嵌套锁 3.5 死锁 3.6 性能 4.Mutex 5.Semaphore 1.lock 让我们先看一段代码: class ThreadUnsafe {static int _val1 1, _val2 1;static void G…

鸿蒙智能居家养老系统构思(续二)—— 适老化烹饪中心详细构思

一、背景在“写给华为鸿蒙智家 —— 智能居家养老系统构思”一文中,结合对居家养老的理解及个人体验,提出了基于鸿蒙OS实现居家养老系统的粗略构思。其中包含“吃得好”。当老人到了不能随性外出活动、只能在家消耗时光时,除了一些看看电视、…

高斯透镜公式(调整镜头与感光元件之间的距离时,使得不同距离的物体在感光元件上形成清晰的影像)

当使用定焦镜头时,仍然可以调整镜头与感光元件(或胶片)之间的距离时,使得不同距离的物体在感光元件上形成清晰的影像。对此可以用高斯透镜公式进行解释: 一、透镜成像的基本原理 在光学中,一个基本的公式是…

预过滤环境光贴图制作教程:第三阶段 - GGX 分布预过滤

核心目标 GGX 分布是 PBR 中模拟粗糙表面高光反射的主流模型,其核心是通过统计分布描述微表面的朝向概率。本阶段的目标是: 基于第一阶段生成的环境图集,预计算 6 个级别的 GGX 过滤结果(对应不同粗糙度); 使用蒙特卡洛采样(Monte Carlo Sampling)加速 GGX 卷积计算;…

Spring框架与AutoCAD结合应用

什么是AutoCAD? AutoCAD简介 AutoCAD是由美国Autodesk公司开发的计算机辅助设计(CAD)软件,广泛应用于建筑、工程、制造、产品设计等领域。它支持2D绘图和3D建模,提供精确的图形工具和自动化功能,帮助用户高效创建技术图纸和模型。 主要功能 2D绘图:提供直线、圆弧、多…

Java 学习笔记:常用类、String 与日期时间处理

作为一名名 Java 初学者,最近在学习过程中整理了一些关于常用类、String 类以及日期时间处理的知识点。这些内容是 Java 基础中的重点,也是日常编程练习中频繁用到的工具,掌握它们能让我们在写代码时更加得心应手。今天把这些笔记分享出来&am…

Android常用的adb和logcat命令

ADB ADB,即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对 Unix shell(可用来在模拟器或连接的设备上运行各种命令&…

重学JS-001 --- JavaScript算法与数据结构(一)JavaScript 基础知识

文章目录 变量 变量命名规则 变量命名 let vs const 变量使用范围 赋值 = 控制台输出 运算符 ++ -- == === !== 注释 转义字符 数据类型 7种 原始数据类型 1. string​​ 2. number​​ 3. ​​boolean​​ 4. null​​ 5. undefined​​ 6. ​​symbol​​(ES6 新增) 7. big…

MySQL数据闪回工具my2sql的使用

场景: 当你或者其它人员误操作数据库不小心删除或者更新了一批数据,但是是当时又没事先备份时,你可以 用这个 my2sql工具快速帮你找回数据。就是如此的丝滑。但是要注意的是只限于dml语句,所以我们在操作数据库前必需先备份哦&…

9.1无法恢复的错误与 panic!

无法恢复的错误与 panic! 有时你的代码中会发生严重问题,而你无能为力。在这些情况下,Rust 提供了 panic! 宏。实际上,有两种方式会导致 panic:一种是执行某个操作使代码产生 panic(例如访问数组越界)&…

分享低功耗单火线开关语音识别方案

在众多老旧建筑和常规家居环境里,单火线布线是主流方式。单火线语音识别芯片方案通过研发和应用特殊的单火线语音识别芯片,实现设备在单火线供电条件下稳定运行,并精准识别语音指令,为智能家居、智能照明等领域带来便捷的语音控制…

如何在Windows操作系统上通过conda 安装 MDAnalysis

MDAnalysis 是一个开源的 Python 库,旨在提供一个高效且灵活的方式来分析和处理分子动力学(MD)模拟数据。它可以从不同的文件格式中读取模拟轨迹和结构数据,进行复杂的数据处理和分析,广泛应用于生物物理学、化学、材料科学等领域。 一、创建虚拟环境 为了能够顺利安装,减…

实用PDF演示解决方案

它打破了传统阅 读模式,让PDF文档也能像PPT一样流畅播放,特别适合汇报、讲解等展示场景。它是绿色单文件版,无需安装,双击红色图标即点即用。运行后第一件事,建议把界面语言切换成中文,操作更顺手。导入PDF…

VS Code中如何关闭Github Copilot

点击顶部搜索栏后面的Copilot图标,在下拉菜单中选择Hide Copilot。在弹出的提示框中,点击Hide Copilot按钮就可以了。