Как реализовать взвешивание по времени в SPL Meter?

Я хотел бы разработать приложение для Android для измерения уровня звукового давления, но я не уверен, как реализовать взвешивание по времени. На данный момент мой алгоритм работает следующим образом:

  1. Запись 20 мс аудио (160 сэмплов при 8000 Гц)
  2. Вычислить среднеквадратичное значение
  3. Рассчитать SPL
  4. Обновите отображаемое значение и начните заново

Здесь вы можете увидеть основную часть алгоритма:

// The Google ASR input requirements state that audio input sensitivity
// should be set such that 90 dB SPL at 1000 Hz yields RMS of 2500 for
// 16-bit samples, i.e. 20 * log_10(2500 / mGain) = 90.

double Gain = 2500.0 / Math.pow(10.0, 90.0 / 20.0);


// This method is called every 20ms:
@Override
public void processAudioFrame(short[] audioFrame) {

  // Compute the RMS value.
  double rms = 0;
  for (int i = 0; i < audioFrame.length; i++) {
    rms += audioFrame[i]*audioFrame[i];
  }
  rms = Math.sqrt(rms/audioFrame.length);

  final double rmsdB = 20.0 * Math.log10(rms / Gain) + refSPL;
  // refSPL is obtained by calibration with a professional spl meter
}

Я знаю, что уровень шумомера может быть «Быстрый», «Медленный» или «Импульсный», взвешенный по времени. Но я не уверен, как и где реализовать это взвешивание по времени в моем алгоритме.

В: Означает ли взвешивание по времени, через какое время я обновлю измеренное значение дБ?

В: Должен ли я просто изменить интервал обновления на 125 мс, чтобы получить быстрый взвешенный результат, или я совершенно не прав?

Спасибо за поддержку


person sky-frog    schedule 07.10.2014    source источник


Ответы (1)


Когда измерители уровня звука были впервые созданы, как и в случае с большинством приборов, цифровая технология была недоступна, и показания представлялись пользователю через аналоговые дисплеи. В случае шумомеров это была стрелка, которая двигалась вперед и назад по шкале, чтобы дать показания. Таким образом, эти взвешивания по времени просто обеспечивают «баллистический метр», как описано в этот комментарий. Вскоре обнаружилась серьезная проблема с этими иглами из-за того, что разные производители производили их с разными спецификациями. Поскольку шум очень редко остается на постоянном уровне, стрелка всегда находилась в постоянном движении. Более длинные и короткие потребности реагируют с разной скоростью на одно и то же количество звука, давая разные результаты.

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

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

person Arnav Mendiratta    schedule 28.08.2017