Say I have an impulse response...

enter image description here

(an envelope of the actual IR obtained using the Hilbert transform)

... question: how do I calculate the surrounding noise level? Visually this looks to be ~ -54 dB w.r.t. the peak.

But before you say something like "just average the surrounding parts" (ok maybe with better technical terminology), I would actually like to determine the noise level programmatically, in order to deal with wider peaks, like...

enter image description here

Just arbitrarily taking some noise samples could accidentally include part of the peak and obviously invalidate the result.

My hunch: set a threshold as the minimum number of samples above some level X such that this level can be considered to be noisy. This could work well in the first case - as you increase X to above ~ -54 dB the number of samples above suddenly drops by a significant amount.

This approach may not work so well in the second case as the decay range consists of more samples (the increase may not be so significant). I could extend the sampling time... but I can only hold my breath for so long when recording.

  • $\begingroup$ Are you considering acoustic room impulse responses? They are often analyzed via an energy decay curve $EDC(t)=\int_{t}^\infty h^2(\tau) d\tau$. $\endgroup$
    – Brian
    Aug 14 '15 at 19:54
  • $\begingroup$ do you mean the Schroeder integration method? I would like to find the start of the main peak as well $\endgroup$ Aug 14 '15 at 21:30
  • $\begingroup$ Yes, that is the one. This equation is typically flat in the beginning, followed by a big jump due to the main peak and ends with a linear slope ( in log domain) due to exponential decay. Maybe you can fit these parts automaticaly and then find the noise floor etc? $\endgroup$
    – Brian
    Aug 14 '15 at 23:11
  • $\begingroup$ It's not actually flat - if I integrate over the latter noise part then the curve still has a slight gradient, with the added caveat that I lose some of the intensity range. I need ~45 dB of range to calculate RT30 $\endgroup$ Aug 15 '15 at 15:26
  • $\begingroup$ Why the Hilbert transform? That doesn't sound like a particularly good idea. $\endgroup$
    – Jazzmaniac
    May 22 '18 at 22:22

I can suggest you take a look at the supporting information for Dirac software, where they describe the process of INR (IR to Noise Ratio) calculation. The simplest approach is to estimate the noise level based on the beginning of the IR before the main peak. For that purpose, you can also do the tail of the Impulse response.

Yet another article supporting that estimation is by Lundeby et al.: "Uncertainties of Measurements in Room Acoustics". Their algorithm is an iterative procedure which tries to estimate the background noise level and the slope:

enter image description here

You could also try to verify that the noise floor doesn't have any distortions, by fitting the linear regression and making sure that the slope is as close to 0 as possible.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.