前言

我们平时经常会说到声音是多少分贝,那么这个分贝是什么概念呢?如何计算音频文件的分贝呢?

1. 什么是分贝?

先看百度百科介绍:分贝(decibel )是一个计量单位, 量度两个相同单位之数量比例的计量单位, 主要用于度量声音强度,常用dB表示。

在工程应用中,通常有很多的定义方式,但是主要分为以下两类:

1.1 功率类

定义:两个同类功率量或可与功率类比的量之比值的常用对数乘以10等于1时的级差

公式:

N

d

B

=

10

lg

p

i

p

0

N

d

B

p

i

p

0

p

i

p

0

N_{dB}=10\lg\frac{pi}{p0}\\ N_{dB}-表示信号{pi}对信号{p0}的分贝值\\ {pi}、{p0}-对应为功率量的单位,如电流平方、电压平方、质点速度平方、声压平方

NdB=10lgp0piNdBpip0pip0

举个例子:

A

20

B

10

p

A

=

20

w

p

B

=

10

w

N

d

B

=

10

lg

p

A

p

B

=

10

lg

2

=

3

d

B

A

B

3

d

B

假设A的电功率为20瓦,B的电功率为10瓦\\ {p_A}=20w\\ {p_B}=10w\\ N_{dB}=10\lg\frac{p_A}{p_B}=10\lg2=3dB\\ 也就是说,A的电功率比B的电功率大3dB

A20B10pA=20wpB=10wNdB=10lgpBpA=10lg2=3dBAB3dB

1.2 电压类

定义:两个同类功率量或可与功率类比的量之比值的常用对数乘以10等于1时的级差

公式:

N

d

B

=

20

lg

p

i

p

0

N

d

B

p

i

p

0

p

i

p

0

N_{dB}=20\lg\frac{pi}{p0}\\ N_{dB}-表示信号{pi}对信号{p0}的分贝值\\ {pi}、{p0}-对应为电压类的单位,如电流、电压、质点速度、声压

NdB=20lgp0piNdBpip0pip0
举个例子:

A

20

B

10

p

A

=

20

V

p

B

=

10

V

N

d

B

=

10

lg

p

A

p

B

=

10

lg

2

=

3

d

B

A

B

3

d

B

假设A的电压为20伏特,B的电压为10伏特\\ {p_A}=20V\\ {p_B}=10V\\ N_{dB}=10\lg\frac{p_A}{p_B}=10\lg2=3dB\\ 也就是说,A的电压比B的电压大3dB

A20B10pA=20VpB=10VNdB=10lgpBpA=10lg2=3dBAB3dB

2. 什么是声音的分贝?

我们通常说话都会说大概是多少多少分贝的,比如经常会说,安静的轻声絮语为20-40dB左右,正常室内说话为40-60dB左右,那么声音的分贝是如何度量的呢?

在这里插入图片描述

这里就要提到一个概念,叫做声压级

声压定义为声波在某一点产生的逾量瞬时压强的均方根值

公式:

S

P

L

=

20

lg

p

e

p

r

e

f

S

P

p

e

p

r

e

f

2

×

1

0

5

P

a

SPL=20\lg\frac{p_e}{p_{ref}}\\ SP-声压级\\ {p_e}-待测声压有效值\\ {p_{ref}}-参考声压的有效值\\ 在空气中,参考声压的有效值为2\times10^{-5} Pa

SPL=20lgprefpeSPpepref2×105Pa
所以,如果我们知道说话声音对应的声压,然后基于以上公式就可以计算出它对应的声压级,也就是平常我们常说的这个声音对应的分贝数了。

3. 如何计算音频文件的分贝数或者声压级

在网上找到这样一个公式:

L

p

=

20

lg

p

r

m

s

p

r

e

f

p

r

m

s

R

M

S

p

r

e

f

Lp=20\lg\frac{p_{rms}}{p_{ref}}\\ {p_{rms}}-声音采样点振幅RMS数值\\ {p_{ref}}-声音振幅最大值\\

Lp=20lgprefprmsprmsRMSpref
举个例子来说明以下,如果我们的声音是16bits有符号数,那么每个采样点的数值大小应该在-32768-32767之间,也就是说振幅数值为65535,这个时候最大振幅对应的分贝是:20lg65535=96.32dB,也就是说,这个格式的动态范围为96dB。

考虑到我们平时的声音范围,所以16bits的位数基本上能够记录大部分音频的声音,实体唱片的CD格式也都是采用16bit的采样精度的。

在这里插入图片描述

从Audition的这个振幅统计,可知,振幅最大约为24117,如果带入上面公式计算的是20lg24117=87.68dB才对,但是它显示的确是-2.66dB,难道是公式错了吗?

音频在经过采样、量化后以数字信号的形式展现出来,那么根据采样值的大小就可以计算出实际的分贝数。

所以按照这个理论去分析,上图中显示的这段音频的分贝数或者声压级(振幅最大值)应该是87.68dB左右的。

那-2.66dB是什么意思呢?

r

m

s

p

r

m

s

=

24117

p

r

e

f

=

1

L

p

=

20

lg

p

r

m

s

p

r

e

f

=

87.68

d

B

p

r

e

f

=

2

16

=

32768

L

p

=

20

lg

p

r

m

s

p

r

e

f

=

2.66

d

B

按照这个音频文件,暂时不考虑rms,单独考虑峰值点的情况\\ 那么{p_{rms}}=24117,{p_{ref}}=1\\ 则Lp=20\lg\frac{p_{rms}}{p_{ref}}=87.68dB\\ 如果将{p_{ref}}=2^{16}=32768\\ 则Lp=20\lg\frac{p_{rms}}{p_{ref}}=-2.66dB

rmsprms=24117pref=1Lp=20lgprefprms=87.68dBpref=216=32768Lp=20lgprefprms=2.66dB
所以也就是说,当采用16bits的量化精度时,最大振幅需要设置为32768,同样的道理,当你采用32bits时,最大振幅需要设置为65536。

同样的道理,RMS振幅也可以计算出来。

4. Demo验证

写了一个小的demo,并计算了它的RMS值,计算结果如下:
在这里插入图片描述

Audition的计算结果如下:

在这里插入图片描述

关于具体计算的代码已经上传,如果有需要验证的话,可以直接下载即可。download配套代码
你们是怎么计算声音的分贝的呢?欢迎在评论区留言


版权声明:本文为weixin_43847179原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_43847179/article/details/113623618