2011-10-07 79 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