2017-09-24 12 views
3
  • 나는 간단한 파형을 플로팅하는 데 사용하는 오디오 데이터 (float 배열)를 가지고 있습니다.
  • 플롯 할 때 파형이 가장자리에서 최대가되지 않습니다.
  • 문제 없음 - 데이터를 정규화해야합니다. 한 번 최대 값을 찾은 다음 각 값을 다시 최대 값으로 나누어 반복합니다. 플롯 다시 모든 것이 멋지다!
  • 그러나 크게 소개하거나 크게 폭발하는 동영상을 기다리면 파형의 나머지 부분은 여전히 ​​작아집니다.
  • 몇 가지 연구가 끝나면이 문제를 해결하기 위해 RMS를 검토합니다. 샘플을 반복하여 RMS를 계산하고 각 샘플을 RMS 값으로 다시 나눕니다. 이것은 상당한 "클리핑"결과 :

enter image description here오디오 파형 표준화 (피크, RMS)

  • 는이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
  • 직관적으로, 전체 윈도우가 아닌 움직이는 윈도우를 기반으로 로컬 최대 값 또는 평균값을 계산해야 할 수도 있지만 완전히 확신 할 수없는 것 같습니다. 도움?
  • 참고 : 파형은 시각적 용도로만 사용됩니다 (오디오는 사용자에게 재생되지 않습니다).

답변

2

효과적으로 가로축을 비선형으로 만들거나 companding의 형식으로 생각할 수 있습니다.

신호가 [-1, 1] 범위 내에 있다고 가정합니다.

인기있는 빠르고 간단한 해결책은 hyperbolic tangens function (tanh)을 적용하는 것입니다. 이렇게하면 더 높은 값을 처벌함으로써 값을 [-1, 1]로 제한합니다. 탄 (tanh)을 적용하기 전에 신호를 증폭하면 효과가 더 현저 해집니다.

또 다른 대안은 로그 변환입니다. 신호가 변경되면 일부 사전 처리가 수행되어야합니다. 샘플의 일련의 r 경우

하나 개의 방법이 같을 수 값 : 모든 값입니다

r.log1p <- log2(1.1 * (abs(r) + 1)) * sign(r) 

는, 몇 가지 작은 상수를 곱 하나를 추가, 절대을 로그를 타고 마지막으로 해당 값에 해당하는 이전 값의 부호를 곱하십시오. enter image description here

+0

이 영리하고 완벽하게 일 :

효과는 다음과 같이 할 수 있습니다. 주어진 데이터 세트에 적합한 증폭 "상수"를 결정하는 방법에 대한 생각? –

+1

나는 그것을 결정하기 위해 내가 무엇을 할 지 모르겠습니다. 한 가지 방법은 이미 보유한 RMS 값 또는 최소한의 롤링 RMS를 사용하는 것입니다. 신호가 정규화되었다고 가정 할 때 RMS 값이 높으면 낮은 프리 - 게인 상수가 필요합니다. 그 기능적 관계가 정확히 어떻게 생겼는지는 모르겠지만 아마도 몇 가지를 시도해 보는 것이 가장 좋습니다. – AkselA