+50dB/-50dB 是什么概念.

+50dB/-50dB 是什么概念.

在阅读ffmpeg 代码时遇到的一个概念. 声音降低-50dB 为静音.
对于S16格式的音频, 音量最大值是7fff = 32767

-50dB 是什么概念呢? 它是一个比值
先把分贝化成贝尔, 声音要除以20, 故 -50dB/20 = -2.5贝尔.
这个比值是以10为底,贝尔为幂, 故数值为10的-2.5次方,为1/316=0.003

同样,+50dB就是10^2.5=316

有一个口算方法, 对于功率, 3db就是一倍, 对于电压,6db算一倍, 声压也是6db算一倍.
它们分别对应着10log(10)N 和 20log(10)N

因为10的0.3次幂为一倍.
50dB=48dB+2dB = (6*8)dB+2dB > 2倍的8次幂 = 256倍.
就是说48db 是 256倍
      54db 是 512倍
50db  又比48多了2db 实际是316倍

ffmpeg中计算倍数实际上是采用了2的N次幂来计算的. 来一段代码吧,留个纪念.

将'dB'换算成数值就是计算10的多少次幂. 下面是相关代码
 

d_out = ff_exp10(db_in / 20);  //10的n次幂由下面函数定义
static av_always_inline double ff_exp10(double x)
{
    return exp2(M_LOG2_10 * x);   // 2的n次幂为库函数
}
#define M_LOG2_10      3.32192809488736234787  /* log_2 10 */

10的多少次幂是用2的多少次幂来计算的
2的3.32次方就是10

分贝的神秘性解除了, 我们还是考虑通常意义下10log 功率的计算方法. 记住下面几个常数.

0分贝就是它自己. 10的0次方=1

1分贝: 10^0.1 = 1.26      //1分贝多出的0.26比3分之1小,比4分之一(0.25)略大.

2分贝 10^0.2 = 1.58    //2分贝多出0.58比3分之2小,比二分之一(0.5)略大

3分贝 10^0.3 = 2.00  //3 分贝就会多出1倍了.

原来分贝就是考察我指数运算来了!

你可能感兴趣的:(ffmpeg,dB,分贝)