当前位置: 首页 > news >正文

中科蓝汛AB580x高中低EQ增益调试分析

最近在看AB5800平台的代码,功能是通过电阻器来调整高中低频率增益,开始进入正题。

主要文件: app/modules/audio/bsp_eq.c

截取的代码段如下:

bass_treb_loud_param_t msc_bass_treb_loud_param; struct eq_coef_t msc_bass = { .param0 = CAL_FIX(0.0261732112), //BASS:300Hz(alpha) .param1 = CAL_FIX(0.9992290362), //BASS:300Hz(cos_w0) }; #if MUSIC_EFFECT_BASS_TREB_LOUD_EN struct eq_coef_t msc_loud = { .param0 = CAL_FIX(0.0696856441), //LOUD:800Hz(alpha) .param1 = CAL_FIX(0.9945218951), //LOUD:800Hz(cos_w0) }; #endif struct eq_coef_t msc_treb = { .param0 = CAL_FIX(0.2551222950), //TREB:3000Hz(alpha) .param1 = CAL_FIX(0.9238795283), //TREB:3000Hz(cos_w0) }; void bsp_bass_treble_init(void) { memset(&msc_bass_treb_loud_param, 0, sizeof(bass_treb_loud_param_t)); msc_bass.coef = (u32*)bsp_music_bass_eq_coef_get(); //初始化band0参数的数组 msc_treb.coef = (u32*)bsp_music_treb_eq_coef_get(); //初始化band1参数的数组 #if MUSIC_EFFECT_BASS_TREB_LOUD_EN msc_loud.coef = (u32*)bsp_music_loud_eq_coef_get(); eq_coef_cal(&msc_loud,0); #endif bass_treble_coef_cal(&msc_bass, 0, 0); bass_treble_coef_cal(&msc_treb, 0, 1); music_bass_treble_enable(1); print_r32(msc_bass.coef,5); print_r32(msc_treb.coef,5); }
struct eq_coef_t { u32 param0; //频点参数,由工具计算 u32 param1; u32 *coef; //频段参数,由eq_coef_cal计算 };
struct eq_coef_t msc_bass = { .param0 = CAL_FIX(0.0261732112), //BASS:300Hz(alpha) .param1 = CAL_FIX(0.9992290362), //BASS:300Hz(cos_w0) };

我们主要探讨一下这个eq_coef_t结构体,由param0, param1, coef组成,接下来以300HZ为例解析这两个参数是怎么生成的;

一. 结论

这两个参数是二阶搁架滤波器(2nd Order Shelving Filter)预先计算的中间变量

.param0 = CAL_FIX(0.0261732112) // 对应滤波器的 α 参数(与 Q 值和增益相关)) .param1 = CAL_FIX(0.9992290362) // 对应 cos(ω₀), 其中 ω₀ 是数字角频率(单位:弧度) CAL_FIX(x):将浮点数转换为定点数

二. 推导过程

Fc的推导:(从结果反推FS使用的是48000,并非44100,但相同文件里面tbl_coef数组用的就是44100) 1. 从cos(ω₀)反推数字角频率 ω₀ = arccos(0.9992290362)->0.0392699弧度 2. 数字角频率推导模拟频率 ω₀ = 2πf₀(目标频率) / Fs(采样率) 得出: f₀(目标频率) = ω₀ * Fs(采样率) / 2π 即: f₀ = 0.0392699 × 48000 / (2×3.1415926535) 所以得出: f₀ ≈ 300HZ Q值的推导: 1. α = sin(ω₀) / (2Q) 带入推导FC中得到的弧度0.0392699 sin(ω₀) = sin(0.0392699) ≈ 0.0392688 得 Q = sin(ω₀) / (2α) = 0.0392688 / (2×0.0261732112) ≈ 0.75

据此我们得出Fc = 300Hz Q = 0.75, 计算结果如下:

三. 如何生成这两个系数

MATLAB CODE: clear;clc; f0 = 800; % FC频率, 你需要频率 Fs = 48000; % 采样率 Q = 0.75; % Q值 w0 = 2*pi*f0/Fs; cos_w0 = cos(w0); alpha = sin(w0)/(2*Q); fprintf('.param0 = CAL_FIX(%.10f), // %.0fHz(alpha)\n',alpha,f0); fprintf('.param1 = CAL_FIX(%.10f), // %.0fHz(cos_w0)\n',cos_w0,f0);

效果图如下:

http://www.jsqmd.com/news/892068/

相关文章:

  • 从SQLyog连接失败到MySQL 8.0身份认证机制深度解析
  • 哈尔滨卖翡翠还在踩坑?7家实测帮你锁定靠谱渠道 - 奢侈品回收测评
  • 图卷积与流形学习增强的宽学习系统在高光谱图像分类中的应用
  • 三菱A系列老旧PLC通过以太网桥接器实现MES系统无缝对接与数据互通
  • 2026年八大高口碑美容预约小程序推荐榜单,解锁便捷美容新体验
  • 基于FPGA可重构架构的HEVC分数像素插值近似计算硬件加速设计
  • 西门子TIA Portal V18保姆级安装教程:从注册账号到激活授权,一次搞定所有坑
  • python pip ValueError: Invalid IPv6 URL
  • Wireshark蓝牙抓包
  • 3分钟掌握:如何在Blender中无缝处理3D打印文件
  • OpenClaw越火,企业软件老炮越吃香|爱分析访谈
  • Lovable直接操作软件如何让新手3秒完成专业级操作?揭秘隐藏的渐进式引导协议v3.2
  • Cadence OrCAD Capture 层次化电路设计实战:用NetGroup信号线束高效管理多路SPI/I2C
  • 跨境电商商品图成本居高不下?AI套图让单张成本降至0.8元
  • 1.4t6
  • kafka为什么分区不能那么多
  • 利用taotoken为ubuntu上的claude code提供稳定可靠的api后备支持
  • Linux 上生成 AppStoreInfo.plist,App Store 上架 iOS
  • 从平面Gerber到3D仿真模型:HFSS 3D Layout导入PCB文件的完整避坑与材料分配指南
  • 面试问项目的QPS是多少,该怎么回答
  • 胶囊网络与知识图谱融合:实现精准图像描述生成的工程实践
  • Laravel 中间件与装饰器模式的关系与区别?
  • 有效提升品牌AI搜索推荐率|2026支持试用的GEO服务商
  • 从摩尔定律到韬定律:华为给半导体产业的一份新答卷
  • 深圳除甲醛服务第三方调研报告:基于行业标准与实测数据的客观分析 - 环保除醛知识库
  • iPhone17首次降价就杀疯了!销量直逼3000万台
  • 2026年5月北京钻石回收店推荐:正规靠谱商家指南与收的顶实测 - 奢侈品回收测评
  • t-SNE非线性降维结合深度学习提升高光谱图像分类精度
  • 微AI设备模型压缩与硬件加速实战:从量化剪枝到边缘部署
  • 2026年河源紫金4家正规奢侈品回收机构盘点 - 小仙贝贝