我问自己如何从 1 到 -1 之间的样本值计算 dBFS(dB 满量程)?
一般来说?
我问自己如何从 1 到 -1 之间的样本值计算 dBFS(dB 满量程)?
一般来说?
对于 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
类似的单位 dBov 是相对于功率比定义的(因此它也是 RMS 测量),因此满量程直流或方波为 0 dBov,因此计算为:
value_dBov = 20*log10(rms(signal))
(此 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。由于满量程正弦波的RMS是,1/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)