一起调试XVF3800麦克风阵列(十六)

Output equalization(输出均衡EQ)

EQ(均衡器) 是一种音频处理设备或算法,用于调节音频信号中特定频率范围(Frequency Bands)的增益(Gain)。其核心功能是通过对频率响应曲线进行补偿或修饰,达到平衡频段分布、改善音质或消除噪声的目的。

  • 增强(Boost): 提高某个频段的音量。

  • 衰减(Cut): 降低某个频段的音量。

普通的音量旋钮是一拉全拉,所有的声音(低音、人声、高音)一起变大。但 EQ 像是一排滑块,把声音拆解成了不同的部分:

  • 低频(Bass): 就像调节"重低音",决定了声音是否有力、厚实。

  • 中频(Mid): 这是人声所在的区域,决定了说话是否清晰、突出。

  • 高频(Treble): 决定了声音是否清脆、明亮。

XVF3800 的音频管道设计将均衡器(EQ)置于自动增益控制(AGC)之前,这种架构选择对于通过 **Microsoft Teams 或 Zoom 认证(最高标准的通话认证)**至关重要:

  • 线性补偿: EQ 首先修正由麦克风硬件、声学结构或外壳引起的物理缺陷(例如外壳共振导致的特定频段增益过高)。

  • 防止 AGC 误判: 如果不先通过 EQ 压低某些异常突出的频段,AGC 可能会根据这些"虚假"的高能频段误判信号强度,从而导致整体音量被错误地压低,造成语音听感不自然。

  • 确保合规性: Teams 和 Zoom 对频响曲线(Frequency Response Mask)有严格限制。在频域内进行校准可以实现更高的精度。

  • 外壳增益: 声音在进入外壳孔径时可能产生类似笛子的共鸣效应。

  • 高频衰减: 如果麦克风安装在较深的小孔后,高频响应通常会下降。

  • XVF3800 的解决方案: 通过配置 XVF3800 的可编程滤波器,开发者可以应用逆向补偿曲线,将偏离标准的响应"拉回"到规范定义的阴影区域(Mask)内。

激活我们部署的conda环境:

复制代码
conda activate xmos

运行EQ的调节UI界面

复制代码
python3 /home/raspberry/XVF3800-Software_v3_2_1-3/sources/xvf_tools.py ploteq

出现如图下面UI界面:

下图显示了一个更精细的调整,点击Export可以导出一个二进制文件

导出为eq.bin保存任意文件夹(默认我们先保存到home目录,这里的EQ是随意调整的,仅仅是为了演示如何修改EQ的过程!!),将eq改名为 eq_filter_override.bin放置到sources/app_xvf3800/eq_filter_gen/eq_filter_bin/ 会在编译工程的时候,优先使用这个eq文件。

这里我们还可以将eq文件的参数读取到UI界面中

读取xvf3800的固件中的eq

复制代码
xvf_host --use i2c --get-eq-filter eq.bin

打开EQ的界面

复制代码
python3 /home/raspberry/XVF3800-Software_v3_2_1-3/sources/xvf_tools.py ploteq

点击 Import即可观察

这里我们发现官方的默认固件是没有使用EQ的效果的!!整个频率都是0dB上面!!

在这里官方并没有给出什么时候需要EQ,EQ怎么调整?这里我认为是这样的:

正常的麦克风响应应该是这样的(任何麦克风(哪怕是昂贵的测量麦克风)在物理制造上都不可能做到完美的"全频段平直"。 ):所以需要EQ先进行补偿!

下图是我经常使用的一款楼氏的麦克风型号为 SPH0641LM4H-1

  • 我们可以看到在 100Hz 到 8kHz 这一段,蓝色的原始曲线基本都保持在两条绿线之间。

  • 潜在风险: 如果 Teams/Zoom 的认证规范在 10kHz 之后要求更严格(通常通话只要求到 8kHz),那么该麦克风末端的高频翘起可能需要通过 XVF3800 的 EQ 进行压低(Cut)。

下图是一个测试麦克风的补偿曲线,也正应对的我们的EQ的作用!!

补偿完理想的麦克风状态应该是一条平坦的曲线,对每一个频率的响应应该是一样的(至少都是很接近的)!!

所以我们需要得到一个接近理想的响应曲线,去补偿抵消掉任何外界带来的干扰!!

第一步:建立基准(Reference Line)

先用一个专业的测量麦克风如 miniDSP UMIK-1 或 B&K 麦克风,经过校准的!!上面的两个图片就是对应补偿参数和补偿后的曲线 )放在 XVF3800 麦克风同样的位置,测量出扬声器的频响曲线。这作为你的**"零点"参考。**

第二步:测量 XVF3800 的原始输出

保持扬声器位置不动,换上你的 XVF3800 设备,记录它采集到的频率响应曲线,必须禁用 XVF3800 的所有其他处理算法(如降噪 NS、回声消除 AEC、AGC),只读取经过 EQ(此时 EQ 增益设为 0)后的原始数字化流。。

第三步:对比分析(这就是决定是否加 EQ 的时刻)

将 XVF3800 的曲线与测量麦克风的曲线进行对比,观察以下指标:

  1. 平坦度(Flatness): 在人声区间(300Hz - 8kHz),是否有超过3dB 的剧烈波动(麦克风的响应曲线在这一端是很平坦的,我们就是检测其他问题带来的干扰!)?

  2. 外壳增益/衰减: 是否有某个频率点突然凸起?(这通常是结构共振 ,需要用 1/3 八度带 EQ 压低)。高频部分(4kHz 以上)是否像滑梯一样迅速下降?(这通常是麦克风孔径太小,需要用 EQ 补偿提升)。

如果测量结果显示... 你的 EQ 动作 推荐分辨率
低频(<200Hz)能量过强 衰减(Cut),防止由于桌面震动导致的"轰鸣声"。 八度音程带
在 1kHz - 3kHz 有窄范围突起 降低(Cut),这是塑料外壳常见的共振点。 1/3 八度音程带
5kHz 以上平缓下降 增强(Boost),补偿由于外壳遮挡造成的高频损失。 八度音程带
曲线超出 Teams 认证红线 像素级修正,直到曲线完全进入"绿色通道"。 1/3 八度音程带

第四步:使用脚本生成 EQ 系数

利用官方提供的 Python 工具进行可视化调整。

  • 启动工具:运行 python3 xvf_tools.py ploteq 打开图形界面。

  • 选择分辨率:为了符合 Teams/Zoom 的严苛规范,建议选择 "1/3 八度音程带"(22 段均衡器),以便进行精细修补。

  • 手动校准:根据对比结果,在界面上点击调整。例如,若您的麦克风在 10kHz 处高出了 9dB,则在对应的 EQ 点拉低 9dB。

第五步:导出与设备测试

将生成的参数写入硬件并验证效果。

  • 导出文件:点击 GUI 右下角的 "Export" 生成 eq.bin 文件。

  • 实时写入:使用命令 --set-eq-filter 参数 将二进制文件写入设备。

  • 重新测量:再次测量输出,确认此时的频响曲线是否已修正并完全落在 Teams/Zoom 的 绿色限框(Mask) 范围内。

第六步:固化到生产固件

将验证成功的 EQ 参数永久集成到产品中。

  • 覆盖默认值:将 eq.bin 重命名为 eq_filter_override.bin

  • 放置路径:复制到 sources/app_xvf3800/eq_filter_gen/eq_filter_bin/ 文件夹下。

  • 重新构建:重新编译固件,使新的均衡滤波器成为设备的默认设置

相关推荐
人工智能AI技术2 小时前
安卓AI智能体开发实战:基于AndroidGen-GLM搭建手机端超级助理,支持离线运行
人工智能
Hello_Embed2 小时前
串口面向对象封装实例
笔记·stm32·单片机·学习·操作系统
指掀涛澜天下惊2 小时前
概率论 - 贝叶斯定理
人工智能·机器学习·概率论·贝叶斯定理·贝叶斯公式
CCPC不拿奖不改名2 小时前
“Token→整数索引” 的完整实现步骤
人工智能·python·rnn·神经网络·自然语言处理·token·josn
deephub2 小时前
多智能体强化学习(MARL)核心概念与算法概览
人工智能·机器学习·强化学习·多智能体
张小凡vip2 小时前
数据挖掘(五) -----JupyterHub 使用gitlab的账号体系进行认证
人工智能·数据挖掘·gitlab
安庆平.Я2 小时前
STM32——MPU(内存保护)
stm32·单片机·嵌入式硬件·mpu
vx_bisheyuange2 小时前
基于SpringBoot的知识竞赛系统
大数据·前端·人工智能·spring boot·毕业设计
Ryan老房2 小时前
从LabelImg到TjMakeBot-标注工具的进化史
人工智能·yolo·目标检测·计算机视觉·ai