进步
我是一名产品开发人员,对 DSP 的内部工作非常了解。我已经捕获了一个音频信号 - 一次 1024 个样本。我想知道的是波的幅度,以 dB 和 dBA 为单位。
D b
对于 dB,我创建了一个 10 深的循环缓冲区,每 100 毫秒记录一次数据,并平均过去 10 次读数的最大读数。因此,我的输出看起来不那么跳跃,并且更具人类可读性。为了获得幅度,我只需记录信号的最大值和最小值并取其差。
Q1:这是从样本中获取 dB 幅度的正确方法(或有效方法)吗?另一种方法是计算出运行平均值,然后进行平均 RMS 以获取信号中的能量。但我不认为这真的对应于最大音频声级?
分贝
对于 dBA,我使用平顶窗口对 512 个捕获的样本进行了窗口化,并对数据进行了 FFT。到目前为止一切看起来都很好。(我的资源有限,只能将 512 个样本放入我的 FFT)。
以 44.1 kHz 采样标准音频,有 512 个样本,我最终得到 256 个 86 Hz、172 Hz 等的可用频率区间……最高 22 kHz。到目前为止,任何更正,请跳入。
Q2:我如何解释这个 bin?代表从 0 Hz 到 80 Hz 的频带?还是 80 赫兹?由于下一步是将 A 加权应用于频率测量,因此我需要知道要使用的频率。
A 加权:我根据 bin 的值在代码中生成了一个 A 加权表。在这种情况下,86、172 的 256 个值 ... 最高 22 kHz。显然,重点是增加权重以补偿人类的频率响应——将 PSL 转换为 phons。
令我困惑的是,我看到一些公式表明,dBA 测量是通过从合适的低频(即 33.25 Hz)开始对每个八度音阶仅进行一次测量来完成的。然后,您创建一个包含 10 个条目的表,最高频率为 16 kHz,并将 A-Weighting 应用于这些条目。你基本上做一个反对数,平均,对数 10 个值,鲍勃是你的叔叔。
Q3:我有 256 个 bin,我想充分利用它们以提高准确性。上述方法表明,每个整个八度音程都包含等量的能量用于平均过程。在此基础上,如果我要对所有 256 个 bin 进行平均,结果将被严重(并且错误地)加权到我的采样集中的最高八度音阶,因为它包含一半的 bin!哪种方法是正确的?尽管我们喜欢以对数尺度查看频率,但能量不是线性分布在频域中是否有某种神奇的原因。
接受的答案和其他详细信息
我接受了@ZR Han 的回答,因为它简洁地提供了解决所述问题所需的信息,巧妙地回避了我最初在问题中做出的错误假设中的误导。
使用提供的公式,时域方法可以完美运行,以 dB 为单位得出答案。我想补充一点,二阶 IIR 级联 3 次,系数取自 jenshee.dk/signalprocessing/aweighting.pdf 也可以完美运行。我已经使用不同频率的信号发生器(我知道的老派)对此进行了测试,并且该比率在 1 kHz 时恰好为 1,正如 A 加权所预期的那样。问题解决了。