2015-11-19 5 views
-1

ИспользованиеКак конвертировать поплавок между -1,0 и +1,0 дБ (А) звукового давления?

WaveFileReader wfr = new WaveFileReader(file); 
float[] d = wfr.ReadNextSampleFrame(); 

Я получаю буев d. При повторении через d с использованием foreach (float s in d) я получаю float между -1.0 и +1.0. Как преобразовать их в dB (A) звукового давления?

EDIT: Я решил его с помощью double db = 20 * Math.Log10(Math.Abs(s));

+0

Какие значения вы ожидаете увидеть - какой диапазон и в каком формате? –

+0

@ B.ClayShannon Ожидаемые значения от -144.0 до 0. – Zurechtweiser

+0

дБ (А) звукового давления? –

ответ

-1

Там нет ответа на этот вопрос.

Уровень звукового давления может быть 0 для полной тишины (глубокое пространство или общий вакуум), но отрицательное значение просто не имеет смысла.

+1

Я предлагаю вам провести некоторое исследование по шкалам дБ. отрицательные значения являются законными. –

+1

Возможно, кроме того, чтобы давление воздуха в идеальном вакууме составляло * 0 Паскалей *, с другой стороны. – marko

+0

@PeterM Я предлагаю вам провести некоторое исследование звукового давления, о котором идет речь. – Gustav

1

Шкала dBA представляет собой меру относительного давления воздуха.

В этом контексте мы говорим о системе воспроизведения звука, которая берет сэмплы на своем входе и имеет некоторый тип устройства, что приводит к звукам звукового давления.

Предполагая, что система является linear system, будет единое значение коэффициента усиления для всей системы, и это будет зависеть от электрических и физических характеристик конструкции.

Output = Gain * input

Для вычисления звукового значения давления для любого заданного входа вам необходимо будет провести эксперимент по измерению давления на выходе системы при заданном значении входного.

Учитывая, что образец-значение становится выходным напряжением на выходе ЦАП, а также о том, что выходная мощность системы пропорциональна звуковое давление:

(1) V=IR и (2) P = IV, с небольшим количеством перегруппировки мы находим что P=V*V/R

Следовательно, мощность изменяется в зависимости от квадрата напряжения (или значения образца).

Значение децибела является относительным измерением:

Sdb = 10*log10(S/Sref)

Где Sref точки контрольного измерения.

Поскольку мы имеем отношение мощности между входом и выходом, мы получаем

Sdb = 10*log10(S*S/Sref) == 20*log10(S/Sref)

Теперь, дБ также происходит с частотой взвешенной шкалы, так что вам нужно будет применить фильтр описан here к образцы для действительно точных значений.