2017-01-30 10 views
0

Поздравительные,Преобразовать диапазон децибел в диапазоне байтов

Я пытаюсь найти формулу для преобразования диапазона, где:

мин = -100 дБ и -30 дБ макс =

к:

min = 0 и max = 255

например: -60db =?

Кажется легким, но это заставляет мою голову вращаться.

+0

Чтобы уточнить, вы имеете в виду диапазон байтов и быть относительным db? Или вы хотите преобразовать его в множитель для сигнала (в линейном пространстве)? –

+0

Идея состоит в том, чтобы имитировать то, что делает API WebAudio с помощью getByteFrequencyData, которая возвращает массив байтов. https://webaudio.github.io/web-audio-api/#smoothing-over-time Похоже, что фактическое отношение db теряется в процессе, когда он дает только линейный множитель, как вы предлагаете. Эквивалентная функция в FMOD, которую я использую, возвращает линейные значения от 0 до 1, и я просто ищу, чтобы интерполировать результат на 0-255. – neosettler

+0

Вы можете уточнить свой вопрос, сообщив нам, что вы ожидаете от формулы для -60db. f (-60) =?. –

ответ

2

Предполагая, что вы имеете в виду результат, чтобы остаться в дБ, вы просите простой линейной интерполяции:

f(x) = ymin + (x - xmin)*(ymax - ymin)/(xmax - xmin) 

или в случае,

f(x) = 0 + (x + 100)*(255 - 0)/(-30 + 100) 
f(-60 db) = 145.714 

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

+0

Как бесстрашный поднял его, я думаю, что результат должен быть множителем вместо db. Чтобы подтвердить, я подключил линейную интерполяцию и, похоже, отключен от графика. Следует ли сначала преобразовать x из db в линейный? – neosettler

+0

@neosettler: Я прочитал документ, на который вы ссылались (https://webaudio.github.io/web-audio-api/#smoothing-over-time), и кажется довольно ясным, что все остается в единицах дБ, поэтому я верю линейная интерполяция здесь уместна. Более того, я подключил '-60' к формуле, и он возвращает 45.71, что находится в диапазоне 0 - 255. Таким образом, один из нас сбит с толку! :) –

+0

Спасибо за ваш вклад бесстрашный. Похоже, что в ваших формулах есть ошибка. Что касается этого сайта: http://www.ajdesigner.com/phpinterpolation/linear_interpolation_equation.php#ajscroll Оно должно быть: е (х) = Ymin + (х - Xmin) * (уты - Ymin)/(xmax - xmin) = 145.71428571429 – neosettler

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

  • Нет связанных вопросов^_^