Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dBFS calculation issue, perhaps. #2

Open
scott-lc opened this issue Jan 18, 2023 · 0 comments
Open

dBFS calculation issue, perhaps. #2

scott-lc opened this issue Jan 18, 2023 · 0 comments

Comments

@scott-lc
Copy link

It has been decades since I was in a signal processing class, so I am certainly not a subject matter expert. As such, I am opening this issue more out of curiosity as to your opinion on the specification.

Referring to your dBFS calculation here, I see this computation used in a myriad of other projects:

dbfs_value = 20 * Math.log10(rms(signal))

However, you do not "offset" the dBFS calculation by +3dB as described here:

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

The explanation for the offset given here seems fairly compelling:

The reason for the sqrt(2) is that the definition of dBFS is explicitly designed such that the dBFS value of a full-scale sine wave equals 0. Since the RMS of the full-scale sine wave is 1/sqrt(2), multiplying rms(signal) by sqrt(2) ensures that the formula evaluates to 0 when signal is a full-scale sine wave.

There even seems to be some confusion about this in the industry, listing a few DAWs that differ on their calculation of 0 dBFS.

Searching through GitHub, I did find one project that uses this 3dB normalization factor:

// Normalised RMS - this value is normalised to a 997 Hz Sine Wave at 0dbFS
// More info: https://en.wikipedia.org/wiki/DBFS
const normalisationFactor = 3.01
const RMSPowerDecibels =
  20 * Math.log10(Math.sqrt(sumOfSquares / waveFormValue.length)) + normalisationFactor

I would appreciate hearing your thoughts on this. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant