2015-01-13 2 views
2

오디오 신호를 실시간으로 추적하는 프로그램이 있습니다. 처리 된 모든 샘플은 < -1, 1> 사이의 값을 읽을 수 있습니다.오디오 레벨 미터 만들기 - 신호 정규화

오디오 레벨 미터를 만들고 싶습니다 (나중에 표시합니다). 내가 이해 한대로 - 나는 그것을하기 위해 각 채널에서 실시간으로 오디오 신호를 dB로 변환 한 다음 각 채널에 dB 값을 막대의 그래픽 형태로 표시해야합니다.

나는 그것을하는 방법을 조금 잃어 버렸고 그것은 단순한 문제 여야한다. < -1, 1>에서 < 0,1> (정규식 ... [n-sample +1]/2)에서 정규화 한 다음 각 샘플에서 20 * log10을 계산하면됩니까?

답변

2

항상 양수와 음수가 변하기 때문에 신호를 직접 플롯 할 수 없습니다.

따라서 많은 샘플마다 신호의 강도를 평균화해야합니다.

44.1kHz에서 샘플링 중이라고 가정 할 때 4410 샘플을 선택하면 초당 10 회 디스플레이가 업데이트됩니다.

그래서 당신은 당신의 4410 개 샘플의 RMS를 계산 - RMS 값은 항상 양수 http://en.wikipedia.org/wiki/Root_mean_square

를 참조하십시오.

그런 다음 DB에이를 변환 할 수 있습니다

dBV로 =

이 최대 신호가 -1 +1 -1 +1 볼트에 해당하는 것으로 가정 20 × LOG10 (Vrms의). 그렇지 않으면 추가 조정이 필요할 것입니다.

+2

위의 수식의 결과는 1V의 신호에 대한 상대적 측정이므로 엄격하게 dBV가 아닙니다. 위의 식에서는 전체 스케일 편향 (이 경우 클립 점)에 상대적인 신호 전력을 계산합니다. 오디오 레벨 미터 (특히 디지털 오디오 포함)는 RMS가 아닌 최고 값을 표시하는 경우가 있습니다.이 경우 각 분석 창에 대해 'max (abs (X0) ... abs (Xn-1))'를 계산합니다. – marko

+0

그러면 어떻게 작동할까요? 예를 들어 마지막 4410 샘플에서 X = max (abs (X0) ... abs (Xn-1))를 계산하고 100ms마다 lvl 미터에 20 x log10 (X)를 표시 하시겠습니까? – F1sher