如何计算音频 dB 级别?

Posted

技术标签:

【中文标题】如何计算音频 dB 级别?【英文标题】:How can I calculate audio dB level? 【发布时间】:2011-01-27 14:16:03 【问题描述】:

我想用电脑的麦克风计算房间的噪音水平。我将噪音录制为音频文件,但如何计算噪音分贝级别?

我不知道如何开始!

【问题讨论】:

您可能需要指定您正在使用的硬件、A-D/声卡、麦克风、操作系统等。 您希望将这个计算出的噪音水平用于什么目的? 您需要指定“dB (SPL)”。 “dB”本身没有任何意义。 en.wikipedia.org/wiki/Decibel 【参考方案1】:

您无法轻松测量绝对 dB SPL,因为您的麦克风和模拟硬件未经校准。您可能能够对特定硬件设置进行近似校准,但您需要对您计划支持的每个不同的麦克风和硬件设置重复此操作。

如果您确实有某种可以使用的 SPL 参考源,那么它会变得更容易:

使用您的参考源以已知 dB SPL 生成音调 - 对此进行测量 测量环境噪声 计算噪音水平 = 20 * log10 (V_noise / V_ref) + dB_ref

当然,这假设您的麦克风和音频硬件的频率响应相当平坦,并且您只需要一个平坦(未加权)的噪声系数。如果您想要加权(例如 A 权重)噪声系数,则必须进行更多处理。

【讨论】:

要计算A-weight数字,相关的权重是dB_ref吗?假设V_noise / V_ref 是10hz 的幅度,那么dB_ref 会是-70.4吗? 加权调整只是在每个感兴趣的频率上应用的额外 dB 校正。因此,您将计算“平坦”dB SPL 频谱,然后应用 A 加权校正。【参考方案2】:

你不能。 dB 是 相对 单位,IOW 是用于比较 两个 测量值的单位。您只能说测量 A 比测量 B 大 x dB,但在您的情况下,您只有 一个 测量。因此,根本无法计算 dB 电平。

【讨论】:

通常当我们谈论测量声级时,我们使用 dB SPL,即相对于 20 µPa (rms) 的声压级。【参考方案3】:

您确实需要参考硬件(即参考麦克风)来计算噪音水平(dB SPL 或声压级)。 Radio Shack 卖的一件事是 50 美元的分贝声压级计。如果你在做科学计算,我不会用它。但是,如果目标是大致了解给定环境中声压的加权测量(dBA 或 dBC),那么它可能会很有用。作为一名音响工程师,我一直使用我的来查看我在混音时产生的音量。它通常精确到 2 dB 以内。

这就是我的答案。剩下的就是仅供参考。

Jorg 认为 dB SPL 是一个相对测量值是正确的。所有分贝测量值都是。但是您暗示了 0 dB SPL 或 20 微帕斯卡的参考值,科学上认为这是人耳可以检测到的最安静的声音(尽管可以理解,一个人实际上能听到的声音很难确定)。根据***,这是关于 10 英尺外飞蚊的声音 (http://en.wikipedia.org/wiki/Decibel)。

假设您不了解分贝,我认为 Jorg 只是想超越您。他显然没有给你一个实际的答案。 :-)

很少使用未加权测量(dB,而不是 dBA 或 dBC),因为人耳无法检测到大多数声压。在给定的办公环境中,通常有 80-100 dB SPL(声压级)。为了让您确切了解没有听到多少,在美国,职业法规将给定 8 小时工作班次的噪声暴露限制为 80 dBA(80 dBA 大约是您的普通市中心街道-很难,但并非不可能谈论)。 85 dBA 是令人压抑的,而在 90 岁时,大多数人都在试图逃避。所以 80 dB 和 80 dBA 之间的差异非常显着 -- 80 dBA 难以谈论,而 80 dB 则相当平静。 :-)

那么什么是“A”权重? “A”加权补偿了我们无法感知低频声音和高频声音(我们听到 20 Hz 到 20,000 Hz)的事实。 很多我们的耳朵/大脑几乎忽略了低端隆隆声。此外,我们对某个中频(1000 Hz 到 4000 Hz)更敏感。大多数人同意这个频率范围包含语音辅音的声音(元音发生的频率要低得多)。想象一下只用元音说话。你什么都不懂。因此,人类能够进行交流(通常)的能力取决于听力灵敏度的 1kHz-5kHz 波动。有趣的是,这就是为什么大多数电话系统只传输 300 Hz 到 3000 Hz 的原因。确定这是理解另一端声音所需的最小响应。

但我认为这比你想知道的要多。希望能帮助到你。 :-)

【讨论】:

【参考方案4】:

如果您想要一个技术上准确或具有科学价值的答案,那么前面的所有答案都是正确的。但是,如果您只是想要比较响度的一般估计,例如如果您想要检查狗是否在吠叫或婴儿是否在哭泣,并且您想要以 dB 为单位指定阈值,那么这是一个相对简单的计算。

许多波形文件编辑器都有以分贝为单位的垂直刻度。没有校准或参考测量,只是一个简单的计算:

dB = 20 * log10(amplitude)

这种情况下的振幅表示为 0 到 1 之间的数字,其中 1 表示声音文件中的最大幅度。例如,如果你有一个 16 位的声音文件,振幅可以高达 32767。所以你只需将样本除以 32767。(我们使用绝对值,仅使用正数。)所以如果你有一个波峰在 14731,然后:

amplitude = 14731 / 32767
          = 0.44

dB = 20 * log10(0.44)
   = -7.13

但是有一些非常重要的事情需要考虑,特别是其他人给出的答案。

1) 正如 Jörg W Mittag 所说,dB 是一种相对测量值。由于我们没有校准和参考,因此此测量仅与自身相关。我的意思是,您将能够看到此时声音文件中的声音比该点响亮 3 dB,或者这个尖峰比背景响亮 5 分贝。但是你无法知道它在现实生活中的响度,而不是其他人所指的校准。

2) PaulR 和 user545125 也提到了这一点:因为您是根据录制的声音进行评估,所以您只是在麦克风所在的特定位置测量声音,偏向麦克风指向的方向,并且由硬件的频率响应过滤。在几英尺外,用人耳聆听的人会听到完全不同的声级和不同的频率。

3) 没有经过校准的硬件,您不能说声音是 60dB 或 89dB 或其他。该计算可以为您提供的只是声音文件中的峰值与同一声音文件中的其他峰值的比较。

如果这就是你想要的,那没关系,但如果你想做一些严肃的事情,比如确定工厂的噪音水平对工人来说是否安全,那就听听 Paul、user545125 和 Jörg 的话。

【讨论】:

我认为在你的情况下振幅应该是 14731 / 32768。 我试图理解这个答案。如果我使用其他值 -1 和 +1(或 -32767 和 + 32768)制作一个 44k 波形文件,我将有效地得到一个无声文件,因为我听不到 22k 方波,那么只看振幅文件告诉我声音有多大?同样,我可以只用 32768 填充文件,我会得到一个静默文件 负幅值呢?应该是20 * log10(Abs(amplitude)) @AhmedAbdelhameed 对于有符号整数,最小值 ≠ -最大值。因此,将 1 到最大值视为值/最大值,将 -1 到最小值视为值/最小值。无论哪种方式,结果都是积极的,所以你很好。仅对幅度进行 Abs 将使您对负幅度的结果略有偏差。而对于 minvalue 本身(如 -32768),您的结果将大于零。然而,零代表它可能是“最响亮的”。所以这没有任何意义。 @AhmedAbdelhameed 和 @gman - 实际上幅度意味着“变化范围” - en.wikipedia.org/wiki/Amplitude - 所以“逐点”没有意义 - 你需要一个块然后计算 log(max(chunk) - min(chunk))。跨度> 【参考方案5】:

我使用声级校准器。 它在 1 KHz 时产生 94 dB 或 114 dB 这是一个加权的频率 过滤器共享同一级别。 使用 114dB 的校准器,我调整麦克风增益以达到几乎满量程 输入只需观看基于声卡的虚拟示波器。 现在我知道 Vref @ 114dB。 我开发了一个简单的基于软件的 SPL 计 如果需要,可以提供。您也可以使用 REW。 你必须知道PC硬件几乎 达到 60 dB 的动态范围,因此校准 @114 dB 它的读数不会低于 54dB,至 如果你考虑到睡觉,那是相当高的 小于 35 dB A 是很好的。 在这种情况下,您可以校准为 94dB 然后你可以测量到 34dB 但是你又会碰到电脑和麦克风的自我噪音 你可以防止达到如此低的水平。 无论如何,一旦校准,测量为 114dB 和 94dB 应该读得很好。 注意:实验室标准活塞发声器校准器的工作频率为 250 Hz。

【讨论】:

【参考方案6】:

根据 Merchant 等人的说法。 (附录中的第 3.2 节:“测量声学栖息地”,生态学和进化方法,2015 年),您实际上可以使用制造商规范通过将校正项 S 减去相对(缩放到最大值)SPL 值来计算绝对的校准 SPL 值:

S = M + G + 20*log10(1/Vadc) + 20*log10(2^Nbit-1)

其中 M 是传感器(麦克风)的灵敏度,大约为 1 V/Pa。 G 是用户应用的增益。 Vadc 是零到峰值电压,由 rms ADC 电压乘以平方根 (2) 的转换因子得出。 Nbit 为位采样深度。

如果您的系统按其最大值缩放幅度,则最后一项是必要的。

使用声音校准器进行端到端校准,校正会更加准确。

请注意,上述公式取决于频率,但如果您的麦克风具有平坦的频率响应,您可以将其应用于更宽的频率范围。

【讨论】:

【参考方案7】:

简短的回答是:由于前面列出的所有原因,您不能用笔记本电脑或手机等进行声级测量,而且您的手机、笔记本电脑等使用压缩算法来确保一切记录在硬件能力范围内。因此,例如,如果您测量一个声音,然后通过 Head Artemis 或 LMS Test.Lab 等信号处理软件运行它,则无论真实水平如何,指示的声压级将始终在 80 dB(A) 附近。我可以通过使用手机或笔记本电脑的音频来了解噪声频谱,同时使用校准的声级计进行电平测量。有趣的是,Radio Shack 曾经销售用于语音输入和视频会议的麦克风,它在很宽的范围内具有非常平坦的频率响应,并且仅售 15 美元左右。

【讨论】:

【参考方案8】:

好吧!我使用了 RobertT 的方法,但它总是给我 Oveflow 异常,然后我使用:- int dB = -36 - (value * -1),异常消失了,我不知道它是否在告诉 dB 值,如果你知道使用下面给出的代码,请评论我是否是A dB值。

VB.NET:-

Dim dB As Integer = -36 - (9 * -1)

C#:-

int dB = -36 - (9 * -1)

【讨论】:

以上是关于如何计算音频 dB 级别?的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式设置 Windows 音频平衡级别?

在音频会议中查找当前发言人

Naudio - 计算音频电平上升到一个电平以上的次数

如何在 pcm 流 (c#) 中查找音频功率 (db)

用 dB 表示音乐音频样本? [复制]

音频:如何设置默认麦克风的电平?