2014-10-07 2 views
1

meassure 음압 레벨의 안드로이드 앱을 개발하고 싶습니다만 시간 가중치를 구현하는 방법을 잘 모르겠습니다. 내 알고리즘으로 작동하는 순간 은 다음과 같습니다 오디오의SPL 미터에서 시간 가중치를 구현하는 방법은 무엇입니까?

  1. 기록이 20ms (8000Hz @ 160 개 샘플)
  2. 계산 RMS
  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 
} 

나는 소리 수준 측정기의 등급이 빠름, 느림 또는 충동 시간에 가중 될 수 있음을 알고 있습니다. 하지만 어떻게 알고리즘 알고리즘에서이 시간 가중치를 구현할 것인지 잘 모르겠습니다.

Q : 시간 가중치는 측정 된 dB 값을 업데이트 한 후에 의미합니까?

Q : 빠른 가중 결과를 얻으려면 업데이트 간격을 125ms로 변경해야합니까, 아니면 완전히 잘못 되었습니까? 대부분의 악기로 지원

사운드 레벨 미터가 처음 만들어진

답변

0

에 대한

덕분에 디지털 기술은 쉽게 사용할 수없는 및 판독은 아날로그 디스플레이를 통해 사용자에게 제공되었다. 사운드 미터의 경우 이것은 눈금을 가로 질러 앞뒤로 움직이는 바늘이었습니다. 따라서이 시간의 가중치는 this comment에서 논의 된 "미터 탄도"를 제공합니다. 다른 제조사가 서로 다른 사양으로 생산하기 때문에 이러한 바늘로 주요 문제가 곧 나타났습니다. 소음이 일정 수준으로 유지되는 경우는 거의 없기 때문에 바늘은 항상 일정한 운동 상태에 있습니다. 길고 짧은 요구는 다른 속도로 반응하여 동일한 양의 사운드로 다른 결과를 만들어냅니다.

시간 가중치 (Time Weightings)로 알려진 일련의 표준이 만들어졌습니다. 이 가중치는 바늘이 움직여야하는 속도를 나타냅니다. 이것은 서로 다른 측정기가이 가중치에 맞게 조정되어 서로 비교할만한 측정을 할 수있게합니다.

마찬가지로, 빠르거나 느린 시간 가중치는 시간 상수 $ \ τ = RC $를 갖는 등가 로우 패스 필터에 (디지털 도메인에서) 해당합니다. 어떻게 저역 통과 필터가 필요한지 설명하고 here에 대해 설명합니다.

관련 문제