2015-01-14 3 views
2

Я хочу рассчитать дБ, используя NOVOCAINE, поэтому мой вопрос: могу ли я измерить децибелы, используя вычисление RMS. На самом деле я хочу микрофон iphone как входной сигнал и монитор окружающего шума. Я не могу взломать это. Пожалуйста помоги.Рассчитать дБ с помощью NOVOCAINE

Пожалуйста привести пример

+1

dB - это логарифмическое отношение мощности, а не амплитуда, поэтому ее необходимо учитывать. RMS - только амплитуда. – zaph

+1

Возможный дубликат [Как получить точный decibel leve с Cocoa?] (Http://stackoverflow.com/questions/1281494/how-to-obtain-accurate-decibel-leve-with-cocoa) – sbooth

ответ

1

В основном, это математика за дБ полной шкалы:

Math behind dB fullscale

где b является битовой глубиной, на прошивке b = 16. More on Wikipedia.

Это может быть реализовано таким образом, например следующим образом:

const float min = 20.0f*log10f(powf(2, 15)); // the "most silent" sample 

Novocaine *audioManager = [Novocaine audioManager]; 
[audioManager setInputBlock:^(float *newAudio, UInt32 numSamples, UInt32 numChannels) 
{ 
    float f = 0.0f; 
    for (int i = 0; i<numSamples; i++) 
    { 
      f += fabsf(newAudio[i]); // we are only interested in non-imaginary values 
    } 
    f /= numSamples; // kind of a poor averaging... 
    float value_dB = 20.0f*log10f(f) - min; // dB in full scale 
    NSLog(@"%f dB for %f", value_dB, f); // or do whatever you want to do... 
}]; 
[audioManager play]; 

Но вы должны думать о частоте дискретизации и напомним, что это дБ полной шкалы, не dB SPL или dB SIL.

+1

Это даст вам dBFS , а не dB SPL, что и есть. Невозможно рассчитать dB SPL без внешней калибровки. – sbooth

+0

Вы правы, но это решение - это то, что можно сделать без калибровки. –

Смежные вопросы