Ecox94 Ответов: 2

Как рассчитать средняя среднеквадратичная энергия образцы wav файл, который записывается в массив в Java


Я делаю диссертацию, которая включает в себя создание приложения, которое слушает фоновый шум и обнаруживает высокоэнергетический собачий лай.

Я использовал следующий код для хранения образцов wav-файла в буфере массива.



public static void main(String[] args) вызывает исключение IOException {
File file = новый файл("dogtest2.wav");

ByteArrayOutputStream out = новый ByteArrayOutputStream();
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));

инт читать;

байт бафф[];
buff = новый байт[1024];

while ((read = in.read(buff)) > 0)
{
из.write(buff, 0, read);
}
из.промывать();
byte[] audioBytes = out.toByteArray();
}
}



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

Что я уже пробовал:

Я постоянно исследовал это в интернете, и мой руководитель сказал мне, что мне нужно будет использовать СРЕДНЕКВАДРАТИЧНУЮ энергию для анализа звуковых кадров из волнового файла для получения средней энергии. До сих пор я не нашел ничего, что имело бы отношение к моей ситуации (насколько я могу судить ).


Любые указания о том, что я должен читать, или любые другие советы были бы очень признательны.

2 Ответов

Рейтинг:
2

enhzflep

Ну, вы просто сделаете это так же, как вы сделали бы это с любым другим языком. А именно, вы вычисляете квадрат величины каждой выборки, складываете эти квадраты все вместе, делите на количество выборок и затем берете квадратный корень из него.

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

function calcRMS(signal)
{
	var numSamples = signal.length;
	var total = 0;
	for (var cur=0; cur<numSamples; cur++)
	{
		total += signal[cur]*signal[cur];
	}
	var result = Math.sqrt(total / numSamples);
	return result;
}


Поскольку для того, чтобы притянуть микрофон-диаграмму к вам на микрометр, требуется та же энергия, что и для того, чтобы оттолкнуть ее от вас, необходима система, в которой выборка -0,5 вносит такой же вклад в вычисление энергии, как и выборка 0,5

Взяв квадрат каждого образца, мы исключаем отрицательный знак. Это позволяет нам вычислить одно и то же значение энергии независимо от того, в каком направлении отклоняется микрофон.
Например
-2*-2 = 4.
и
2*2 = 4


Рейтинг:
0

Gerry Schmitz

Воспроизведите файл через пару динамиков и измерьте напряжение и силу тока.

Измерительная выходная мощность усилителя[^]

https://itstillworks.com/determine-speaker-rms-12106808.html[^]