Простой подход может заключаться в том, чтобы инвертировать журнал в значения, выполнить среднее значение, как обычно, и затем применить журнал к результату. Это может быть более эффективный способ выполнения этой операции, но если производительность не критична, вы можете попробовать ее.
Я не могу попробовать этот код, поэтому, если что-то пойдет не так, не стесняйтесь говорить что-нибудь! Любое предложение приветствуется.
РЕДАКТИРОВАТЬ: забыл заново сделать журнал в конце, просто добавил его
// These values are in decibels
const samples = [40, 50, 55, 80, 45];
//Undo the log. Be careful if base 10 is not the one you are using!
samples.forEach(function(element, index, array){
array[index] = Math.pow(10, element);
});
document.getElementById('samples').innerText = JSON.stringify(samples);
let total = 0;
samples.forEach(value => {
total = total + value;
});
const average = Math.log10(total / samples.length);
document.getElementById('avg').innerText = JSON.stringify(average);
<div>
Decibel samples:
<span id="samples"></span>
</div>
<div>
Average:
<span id="avg"></span>
</div>