Calculate decibels

后端 未结 3 413
轮回少年
轮回少年 2020-12-07 19:34

I\'m recording mic input using the XNA library (I don\'t think this is really technology specific, but it never hurts). Every time I get a sample I would like to calculate

3条回答
  •  温柔的废话
    2020-12-07 19:59

    When measuring the level of a sound signal, you should calculate the dB from the RMS value. In your sample you are looking at the absolute peak level. A single (peak) sample value determines your dB value, even when all other samples are exactly 0.

    try this:

    double sum = 0;
    for (var i = 0; i < _buffer.length; i = i + 2)
    {
        double sample = BitConverter.ToInt16(_buffer, i) / 32768.0;
        sum += (sample * sample);
    }
    double rms = Math.Sqrt(sum / (_buffer.length / 2));
    var decibel = 20 * Math.Log10(rms);
    

    For 'instantaneous' dB levels you would normally calculate the RMS over a segment of 20-50 ms. Note that the calculated dB value is relative to full-scale. For sound the dB value should be related to 20 uPa, and you will need to calibrate your signal to find the proper conversion from digital values to pressure values.

提交回复
热议问题