Я работаю над уникальным проектом по распознаванию речи, в котором я хотел бы напечатать значение уровня голоса в дБ SPL для улучшения приложения.В проекте используется Kinect, поэтому я должен собрать его с помощью Kinect SDK в c #.В эти дни я много читал о децибелах, но я не уверен, что правильно понял концепцию в целом.Здесь я пишу соответствующую часть кода, который я сейчас пытаюсь (скажите, если вам нужна информация об остальной части кода)
float energy = 0;
rms= 0;
for (int i = 0; i < audioBuffer.Length; i += 4)
{
float audioSample = BitConverter.ToSingle(audioBuffer, i);
rms+= audioSample * audioSample;
}
float minvalue_db = (float)(20.0 * Math.Log10(1 / Math.Pow(2, 16)));
float minvalue_byte=(float)((audioBuffer.Length/4)* Math.Pow(10, minvalue_db/10));
energy = (float)(20.0 * Math.Log10(rms/ minvalue_byte));
Console.WriteLine("Energia audio: {0} dB (SPL)\n", energy);
В этом коде я хочу выполнить преобразование изаудио хранится в байтах и уровень звукового давления в виде
среднеквадратичное значение: minvalue_byte = x: 20 мкПа -> x = (среднеквадратичное значение * 20 мкПа) / minvalue_byte
, а затем
энергия = 20 * log10 (x / 20µPA)
, что упрощенно равно
energy = 20 * log10 (rms / minvalue_byte)
Я просто хотел знать, если это делает какой-либосмысл для вас.Я прошу прощения за мой английский и, если я написал плохой вопрос, пожалуйста, прости меня, но я новичок здесь.Буду признателен за любые ответы, которые могут мне помочь.