2011-10-07 76 views

回答

2

標準化是一個簡單的過程。這是float個簡單的實現:

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

這是真的,但那不是感知響度。他們的人類聽覺系統沒有平均聽到所有頻率,所以知覺響度更難。如果您認爲OP需要澄清,請參閱http://en.wikipedia.org/wiki/File:Perceived_Human_Hearing.png – derobert