- r = max(r, Cmag(CXBdata(sp->SpeechProcessorBuffer, i)));
- Mag = Cmag(CXBdata(sp->SpeechProcessorBuffer, 0));
- if (Mag > 0.0) {
- RLBdata(sp->CG, 0) = sp->LastCG * (1.0 - sp->K) + (sp->K * r / Mag);
- if (RLBdata(sp->CG, 0) > sp->MaxGain)
- RLBdata(sp->CG, 0) = sp->MaxGain;
- } else
- RLBdata(sp->CG, 0) = 1.0;
- for (i = 1; i < sp->size; i++) {
- Mag = Cmag(CXBdata(sp->SpeechProcessorBuffer, i));
- if (Mag > 0.0) {
- RLBdata(sp->CG, i) =
- RLBdata(sp->CG, i - 1) * (1 - sp->K) + (sp->K * r / Mag);
+ r = max(r, Cmag(CXBdata(sp->SpeechProcessorBuffer, i))); // find the peak magnitude value in the sample buffer
+ RLBdata(sp->CG, 0) = sp->LastCG; // restore from last time
+ for (i = 1; i <= sp->size ; i++) {
+ Mag = Cmag(CXBdata(sp->SpeechProcessorBuffer, i - 1));
+ if (Mag != 0.0) {
+ RLBdata(sp->CG, i) = RLBdata(sp->CG, i - 1) * (1 - sp->K) + (sp->K * r / Mag); // Frerking's formula