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 的曲线与测量麦克风的曲线进行对比,观察以下指标:
-
平坦度(Flatness): 在人声区间(300Hz - 8kHz),是否有超过3dB 的剧烈波动(麦克风的响应曲线在这一端是很平坦的,我们就是检测其他问题带来的干扰!)?
-
外壳增益/衰减: 是否有某个频率点突然凸起?(这通常是结构共振 ,需要用 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/文件夹下。 -
重新构建:重新编译固件,使新的均衡滤波器成为设备的默认设置。