2011-10-07 3 views

답변

2

정상화는 쉬운 과정입니다. 이것은 float s에 대한 간단한 구현입니다.

float peakAmplitude(0.0f); 

/* find the peak */ 
for (size_t idx(0); idx < bufferLength; ++idx) { 
    peakAmplitude = std::max(peakAmplitude, std::fabs(buffer[idx])); 
} 

if (0.0f >= peakAmplitude) { 
    std::cout << "signal is silent\n"; 
    return; 
} 

/* apply normalization */ 
const float mul(1.0f/peakAmplitude); 
for (size_t idx(0); idx < bufferLength; ++idx) { 
    buffer[idx] *= mul; 
} 

다른 신호 형식은 쉽게 변환 할 수 있습니다.

+0

당신이 * 지각 * 소리의 크기를 표준화하고 싶지 않다면 간단합니다. – derobert

+0

@derobert 위에서 작성한 스타일의 rms 정규화 구현에는 * 하나 이상의 * 코드 행이 필요합니다. – justin

+0

사실입니다.하지만 그것은 지각력이 아닙니다. 그들은 인간의 청각 시스템이 모든 주파수를 동등하게 듣지 못하기 때문에 지각적인 소리 크기가 훨씬 더 큽니다. 예 : http://en.wikipedia.org/wiki/File:Perceived_Human_Hearing.png – derobert

관련 문제