| 麦克风采集时,界面上经常有个麦克风能量条,用来实时显示采集的音频能量大小。 而一般采集到的音频都是PCM格式,也就是说我们需要将PCM的赋值转换成 dB。 ################## 1. RMS:均方根(Root Mean Square)即:将N个项的平方和除以N后开平方的结果,即均方根的结果。 ################## 2. dB:分贝定义:为两个数值的对数比率,这两个数值分别是测量值和参考值(也称为基准值)。存在两种定义情况。 一种为功率之比: dB = 10lg(Wn/W0) 一种为幅值之比: dB = 10lg(Xn/X0)^2 = 20lg(Xn/X0) PS:下标为0的数值均为幅值和功率的参考值。 功率量的例子如:声功率(W),声强(W/m^2),电功率,电强等。 幅值量的例子如:声压(Pa),电压(V),加速度(m/s^2),温度等。 但有一点要注意对于场量的幅值应该是 RMS 值,如声压场。 因为分贝值完全依赖于测量值与参考值之比,因此,计算时选择合适的参考值尤为关键。 当测量结果相互比较时,这一点非常重要,选择的参考值不同,计算结果肯定不一样。 ################## 3. PCM的幅值转dBn个样本:x1、x2、...、xn ################## 4. dB转界面上麦克风能量条数值映射dB ——————————> power [-127,0] [0~31] (或 [0,100]) dB: 前面第3步计算出的响度 power: 能量条数值 power = A + B*dB (一把采用线性映射,且保证二者是正相关关系,即 dB越大,power就越大) dB取值范围一般限制为[-127,0],而能量条的取值范围是[0~31] (或 [0,100]) 因此需要一个映射关系将 dB 映射成 能量条数值 例如下面的映射关系: u32 DBtoPower(double dB){ if (dB > 0) { dB = 0; } else if (dB < -127) { dB = -127; } u32 dwRmsPower = static_cast<s32>(dB + 0.5); s32 dwPower = 42 - (dwRmsPower * 2 / 3); //此处的 42 和 2/3 就是映射参数 if(dwPower > 31) { dwPower = 31; } else if(dwPower < 0) { dwPower = 0; } return dwPower; } ################## 5. 如果采集声音过小,可以增加一个固定的线性增益来放大声音比如说,麦克风采集的声音过小,那么就增加一个固定的线性增益值 GaindB raw-dB = 20lg(Xn/X0) //原始采集样本的响度:raw-dB GaindB = 20lg(Gain) //用户设置的已知固定增益值:GaindB 根据上面两个公式,推导出: new-dB = GaindB + raw-dB = 20lg{(Gain*Xn)/X0} 所以我们只要将 采集样本的幅值 Xn 放大 Gain 倍,就能实现增益 GaindB 所以我们需要根据固定增益值 GaindB 计算出样本幅值放大倍数 Gain Gain = 10^( GaindB / 20 ) /** 固定增益处理(输入输出buf可以相同)(适用 S16_LE)* 参数1:增益值 dB * 参数2:样点数 * 参数3:输入buf * 参数4:输出buf * 返回值:错误码 */ int LinearGain(float GaindB, int FrameLen, short *InFrameData, short *OutFrameData) { int j; float Gain; float Data; GaindB = (GaindB < 0 ? 0 : (GaindB > 50? 50 : GaindB)); //限制设置的固定增益值范围[0,50] Gain = powf(10.0, (GaindB / 20.0)); //将固定增益GaindB 转换成样本幅值的放大倍数Gain for (j = 0; j < FrameLen; j++) { Data = InFrameData[j] * Gain; // 通过放大幅值来实现 固定线性增益 Data = (Data < -32767.5f ? -32768 : (Data > 32766.5f ? 32767 : Data)); OutFrameData[j] = (short)Data; } return 0; } |
音频能量计算:RMS和dB
麦克风采集时,界面上经常有个麦克风能量条,用来实时显示采集的音频能量大小。而一般采集到的音频数据都是PCM格式,也就是说我们需要将PCM的赋值转换成 dB。##################1. RMS:均方根(Root Mean Square) ......
这篇内容能帮你快速理解什么
通过更完整的主题说明和结构表达,帮助用户更快抓住重点,也让搜索系统更容易识别页面主题。
让访问者快速理解当前问题、可行方法以及下一步应该继续看案例、看服务还是直接沟通。
文章页不只是获取流量,也承担继续阅读、查看服务和发起咨询的承接作用。
继续了解这个主题前,你可能还关心这些问题
为什么这类主题适合写成文章?
因为很多用户会通过问题词、对比词和方案词进入网站,文章页越清楚,越容易覆盖更具体的需求。
为什么文章页不能只有正文?
仅有正文不利于继续浏览和转化,文章页还需要总结、问答、相关推荐与咨询入口来承接用户。
看完之后下一步可以做什么?
可以继续看同类文章、服务页与案例页,也可以直接沟通官网升级与搜索优化需求。
这篇文章能帮助我解决什么具体问题?
这篇文章围绕当前主题提供了详细的解决方案、操作步骤和注意事项,帮助你快速理解核心要点并应用到实际场景中。
如何判断这篇文章的内容是否权威可靠?
内容基于实际项目经验和技术实践编写,结合行业标准和最佳实践,同时提供案例数据和方法论支撑,确保专业性和可操作性。
这类内容对SEO和网站排名有什么帮助?
优质的长文内容和FAQ结构能够提升页面主题相关性、增加用户停留时间、降低跳出率,这些都有助于搜索引擎评估页面质量并提升排名表现。
AI搜索引擎会如何理解和引用这类内容?
AI搜索系统会提取文章的实体信息、观点结论和结构化问答,当用户提出相关问题时,可能会引用本文作为答案来源或参考依据。
如果我有更多相关问题可以咨询谁?
可以通过页面底部的联系方式直接咨询我们的专业团队,包括电话、QQ或在线表单,我们会根据你的具体情况提供针对性的建议和方案。
这篇文章和同类内容有什么不同之处?
本文不仅提供理论知识,还包含实战经验、避坑指南和可执行的行动建议,同时兼顾传统SEO和新兴的GEO生成式搜索优化视角。
多久需要更新一次这类内容以保持时效性?
建议每季度审查并更新一次关键数据和案例,如果涉及技术工具或算法变化则需要更频繁地维护,确保内容持续为用户提供准确价值。