如何计算 dBFS?

信息处理 matlab 离散信号 声音 数据库文件系统
2021-12-23 05:12:02

我问自己如何从 1 到 -1 之间的样本值计算 dBFS(dB 满量程)?

一般来说?

4个回答

对于 1 到 -1 之间的值,这非常简单:

valueDBFS = 20*log10(abs(value))

如果您有另一个范围之间的值,例如 16 位,那么它是:

valueDBFS = 20*log10(abs(value)/32768)

(因为 16 位有符号的值介于 -32768 和 +32767 之间,例如 2^15=32768)

所以一般公式是:

valueDBFS = 20*log10(abs(value)/maxValue)

代码示例在 MATLAB 代码中给出。

所有标准都将 dBFS 定义为 RMS 测量值,相对于满量程正弦波的 RMS 电平,因此计算如下:

value_dBFS = 20*log10(rms(signal) * sqrt(2)) = 20*log10(rms(signal)) + 3.0103
  • 满量程正弦波为 0 dBFS
  • 满量程方波为 +3 dBFS

类似的单位 dBov 是相对于功率比定义的(因此它也是 RMS 测量),因此满量程直流或方波为 0 dBov,因此计算为:

value_dBov = 20*log10(rms(signal))
  • 满量程正弦波为 -3 dBov
  • 满量程方波为 0 dBov

(此 dBFS 定义明确设计为使满量程正弦波的 dBFS 值等于 0(因此,满量程方波的 dBFS 值为 +3 dBFS)。由于满量程正弦波的 RMS波1/sqrt(2),乘以确保公式对满量程正弦波的计算结果为 0 rms(signal):。sqrt(2)20*log10(rms(signal) * sqrt(2)) = 20*log10((1/sqrt(2)) * sqrt(2)) = 20*log10(1) = 0

相对于满量程正弦波的 RMS 电平,所以计算为:

value_dBFS = 20*log10(rms(signal) * sqrt(2)) = 20*log10(rms(signal)) + 3.0103

需要一些关于 ->value_dBFS = 20*log10(rms(signal) * sqrt(2)) 为什么在 sin 波中乘以sqrt(2).

请分享您的宝贵信息。

sqrt(2)由下式给出的 dBFS 定义中的原因

value_dBFS = 20*log10(rms(signal) * sqrt(2)) = 20*log10(rms(signal)) + 3.0103

是这个定义是明确设计的,使得满量程正弦波的 dBFS 值等于 0。由于满量程正弦波的RMS1/sqrt(2)乘以确保当是满量程正弦波时公式计算为 0海浪:rms(signal)sqrt(2)signal

20*log10(rms(signal) * sqrt(2)) = 20*log10((1/sqrt(2)) * sqrt(2))
                                = 20*log10(1)
                                = 0

在信号在范围内的更一般情况下[-v, v],相应的满量程正弦波将是标准正弦波乘以v该正弦波的 RMS 为v/sqrt(2),这意味着校正因子应为sqrt(2)/v

value_dBFS = 20*log10(rms(signal) * sqrt(2) / v)