OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
599 int i; | 599 int i; |
600 float avgPause, avgMagn, covMagnPause, varPause, varMagn, avgDiffNormMagn; | 600 float avgPause, avgMagn, covMagnPause, varPause, varMagn, avgDiffNormMagn; |
601 | 601 |
602 avgPause = 0.0; | 602 avgPause = 0.0; |
603 avgMagn = self->sumMagn; | 603 avgMagn = self->sumMagn; |
604 // Compute average quantities. | 604 // Compute average quantities. |
605 for (i = 0; i < self->magnLen; i++) { | 605 for (i = 0; i < self->magnLen; i++) { |
606 // Conservative smooth noise spectrum from pause frames. | 606 // Conservative smooth noise spectrum from pause frames. |
607 avgPause += self->magnAvgPause[i]; | 607 avgPause += self->magnAvgPause[i]; |
608 } | 608 } |
609 avgPause = avgPause / ((float)self->magnLen); | 609 avgPause /= self->magnLen; |
610 avgMagn = avgMagn / ((float)self->magnLen); | 610 avgMagn /= self->magnLen; |
611 | 611 |
612 covMagnPause = 0.0; | 612 covMagnPause = 0.0; |
613 varPause = 0.0; | 613 varPause = 0.0; |
614 varMagn = 0.0; | 614 varMagn = 0.0; |
615 // Compute variance and covariance quantities. | 615 // Compute variance and covariance quantities. |
616 for (i = 0; i < self->magnLen; i++) { | 616 for (i = 0; i < self->magnLen; i++) { |
617 covMagnPause += (magnIn[i] - avgMagn) * (self->magnAvgPause[i] - avgPause); | 617 covMagnPause += (magnIn[i] - avgMagn) * (self->magnAvgPause[i] - avgPause); |
618 varPause += | 618 varPause += |
619 (self->magnAvgPause[i] - avgPause) * (self->magnAvgPause[i] - avgPause); | 619 (self->magnAvgPause[i] - avgPause) * (self->magnAvgPause[i] - avgPause); |
620 varMagn += (magnIn[i] - avgMagn) * (magnIn[i] - avgMagn); | 620 varMagn += (magnIn[i] - avgMagn) * (magnIn[i] - avgMagn); |
621 } | 621 } |
622 covMagnPause = covMagnPause / ((float)self->magnLen); | 622 covMagnPause /= self->magnLen; |
623 varPause = varPause / ((float)self->magnLen); | 623 varPause /= self->magnLen; |
624 varMagn = varMagn / ((float)self->magnLen); | 624 varMagn /= self->magnLen; |
625 // Update of average magnitude spectrum. | 625 // Update of average magnitude spectrum. |
626 self->featureData[6] += self->signalEnergy; | 626 self->featureData[6] += self->signalEnergy; |
627 | 627 |
628 avgDiffNormMagn = | 628 avgDiffNormMagn = |
629 varMagn - (covMagnPause * covMagnPause) / (varPause + 0.0001f); | 629 varMagn - (covMagnPause * covMagnPause) / (varPause + 0.0001f); |
630 // Normalize and compute time-avg update of difference feature. | 630 // Normalize and compute time-avg update of difference feature. |
631 avgDiffNormMagn = (float)(avgDiffNormMagn / (self->featureData[5] + 0.0001f)); | 631 avgDiffNormMagn = (float)(avgDiffNormMagn / (self->featureData[5] + 0.0001f)); |
632 self->featureData[4] += | 632 self->featureData[4] += |
633 SPECT_DIFF_TAVG * (avgDiffNormMagn - self->featureData[4]); | 633 SPECT_DIFF_TAVG * (avgDiffNormMagn - self->featureData[4]); |
634 } | 634 } |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1092 if (i >= kStartBand) { | 1092 if (i >= kStartBand) { |
1093 tmpFloat2 = logf((float)i); | 1093 tmpFloat2 = logf((float)i); |
1094 sum_log_i += tmpFloat2; | 1094 sum_log_i += tmpFloat2; |
1095 sum_log_i_square += tmpFloat2 * tmpFloat2; | 1095 sum_log_i_square += tmpFloat2 * tmpFloat2; |
1096 tmpFloat1 = logf(magn[i]); | 1096 tmpFloat1 = logf(magn[i]); |
1097 sum_log_magn += tmpFloat1; | 1097 sum_log_magn += tmpFloat1; |
1098 sum_log_i_log_magn += tmpFloat2 * tmpFloat1; | 1098 sum_log_i_log_magn += tmpFloat2 * tmpFloat1; |
1099 } | 1099 } |
1100 } | 1100 } |
1101 } | 1101 } |
1102 signalEnergy = signalEnergy / ((float)self->magnLen); | 1102 signalEnergy /= self->magnLen; |
1103 self->signalEnergy = signalEnergy; | 1103 self->signalEnergy = signalEnergy; |
1104 self->sumMagn = sumMagn; | 1104 self->sumMagn = sumMagn; |
1105 | 1105 |
1106 // Quantile noise estimate. | 1106 // Quantile noise estimate. |
1107 NoiseEstimation(self, magn, noise); | 1107 NoiseEstimation(self, magn, noise); |
1108 // Compute simplified noise model during startup. | 1108 // Compute simplified noise model during startup. |
1109 if (self->blockInd < END_STARTUP_SHORT) { | 1109 if (self->blockInd < END_STARTUP_SHORT) { |
1110 // Estimate White noise. | 1110 // Estimate White noise. |
1111 self->whiteNoiseLevel += sumMagn / ((float)self->magnLen) * self->overdrive; | 1111 self->whiteNoiseLevel += sumMagn / self->magnLen * self->overdrive; |
1112 // Estimate Pink noise parameters. | 1112 // Estimate Pink noise parameters. |
1113 tmpFloat1 = sum_log_i_square * ((float)(self->magnLen - kStartBand)); | 1113 tmpFloat1 = sum_log_i_square * (self->magnLen - kStartBand); |
1114 tmpFloat1 -= (sum_log_i * sum_log_i); | 1114 tmpFloat1 -= (sum_log_i * sum_log_i); |
1115 tmpFloat2 = | 1115 tmpFloat2 = |
1116 (sum_log_i_square * sum_log_magn - sum_log_i * sum_log_i_log_magn); | 1116 (sum_log_i_square * sum_log_magn - sum_log_i * sum_log_i_log_magn); |
1117 tmpFloat3 = tmpFloat2 / tmpFloat1; | 1117 tmpFloat3 = tmpFloat2 / tmpFloat1; |
1118 // Constrain the estimated spectrum to be positive. | 1118 // Constrain the estimated spectrum to be positive. |
1119 if (tmpFloat3 < 0.f) { | 1119 if (tmpFloat3 < 0.f) { |
1120 tmpFloat3 = 0.f; | 1120 tmpFloat3 = 0.f; |
1121 } | 1121 } |
1122 self->pinkNoiseNumerator += tmpFloat3; | 1122 self->pinkNoiseNumerator += tmpFloat3; |
1123 tmpFloat2 = (sum_log_i * sum_log_magn); | 1123 tmpFloat2 = (sum_log_i * sum_log_magn); |
1124 tmpFloat2 -= ((float)(self->magnLen - kStartBand)) * sum_log_i_log_magn; | 1124 tmpFloat2 -= (self->magnLen - kStartBand) * sum_log_i_log_magn; |
1125 tmpFloat3 = tmpFloat2 / tmpFloat1; | 1125 tmpFloat3 = tmpFloat2 / tmpFloat1; |
1126 // Constrain the pink noise power to be in the interval [0, 1]. | 1126 // Constrain the pink noise power to be in the interval [0, 1]. |
1127 if (tmpFloat3 < 0.f) { | 1127 if (tmpFloat3 < 0.f) { |
1128 tmpFloat3 = 0.f; | 1128 tmpFloat3 = 0.f; |
1129 } | 1129 } |
1130 if (tmpFloat3 > 1.f) { | 1130 if (tmpFloat3 > 1.f) { |
1131 tmpFloat3 = 1.f; | 1131 tmpFloat3 = 1.f; |
1132 } | 1132 } |
1133 self->pinkNoiseExp += tmpFloat3; | 1133 self->pinkNoiseExp += tmpFloat3; |
1134 | 1134 |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1406 for (i = 0; i < num_high_bands; ++i) { | 1406 for (i = 0; i < num_high_bands; ++i) { |
1407 for (j = 0; j < self->blockLen; j++) { | 1407 for (j = 0; j < self->blockLen; j++) { |
1408 outFrameHB[i][j] = | 1408 outFrameHB[i][j] = |
1409 WEBRTC_SPL_SAT(WEBRTC_SPL_WORD16_MAX, | 1409 WEBRTC_SPL_SAT(WEBRTC_SPL_WORD16_MAX, |
1410 gainTimeDomainHB * self->dataBufHB[i][j], | 1410 gainTimeDomainHB * self->dataBufHB[i][j], |
1411 WEBRTC_SPL_WORD16_MIN); | 1411 WEBRTC_SPL_WORD16_MIN); |
1412 } | 1412 } |
1413 } | 1413 } |
1414 } // End of H band gain computation. | 1414 } // End of H band gain computation. |
1415 } | 1415 } |
OLD | NEW |