Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(203)

Side by Side Diff: webrtc/modules/audio_processing/aec/aec_core.c

Issue 1494473006: Some further minor bitexact APM echo suppressor refactoring (#3) (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@ESUP_refactoring2_CL
Patch Set: Merge from master Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 414 matching lines...) Expand 10 before | Expand all | Expand 10 after
425 (aec->sd[i] * aec->se[i] + 1e-10f); 425 (aec->sd[i] * aec->se[i] + 1e-10f);
426 cohxd[i] = 426 cohxd[i] =
427 (aec->sxd[i][0] * aec->sxd[i][0] + aec->sxd[i][1] * aec->sxd[i][1]) / 427 (aec->sxd[i][0] * aec->sxd[i][0] + aec->sxd[i][1] * aec->sxd[i][1]) /
428 (aec->sx[i] * aec->sd[i] + 1e-10f); 428 (aec->sx[i] * aec->sd[i] + 1e-10f);
429 } 429 }
430 } 430 }
431 431
432 static void GetHighbandGain(const float* lambda, float* nlpGainHband) { 432 static void GetHighbandGain(const float* lambda, float* nlpGainHband) {
433 int i; 433 int i;
434 434
435 nlpGainHband[0] = (float)0.0; 435 *nlpGainHband = (float)0.0;
436 for (i = freqAvgIc; i < PART_LEN1 - 1; i++) { 436 for (i = freqAvgIc; i < PART_LEN1 - 1; i++) {
437 nlpGainHband[0] += lambda[i]; 437 *nlpGainHband += lambda[i];
438 } 438 }
439 nlpGainHband[0] /= (float)(PART_LEN1 - 1 - freqAvgIc); 439 *nlpGainHband /= (float)(PART_LEN1 - 1 - freqAvgIc);
440 } 440 }
441 441
442 static void ComfortNoise(AecCore* aec, 442 static void ComfortNoise(AecCore* aec,
443 float efw[2][PART_LEN1], 443 float efw[2][PART_LEN1],
444 complex_t* comfortNoiseHband, 444 complex_t* comfortNoiseHband,
445 const float* noisePow, 445 const float* noisePow,
446 const float* lambda) { 446 const float* lambda) {
447 int i, num; 447 int i, num;
448 float rand[PART_LEN]; 448 float rand[PART_LEN];
449 float noise, noiseAvg, tmp, tmpAvg; 449 float noise, noiseAvg, tmp, tmpAvg;
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1049 // Windowed echo suppressor output ffts. 1049 // Windowed echo suppressor output ffts.
1050 WindowData(fft, aec->eBuf); 1050 WindowData(fft, aec->eBuf);
1051 aec_rdft_forward_128(fft); 1051 aec_rdft_forward_128(fft);
1052 StoreAsComplex(fft, efw); 1052 StoreAsComplex(fft, efw);
1053 1053
1054 aec->delayEstCtr++; 1054 aec->delayEstCtr++;
1055 if (aec->delayEstCtr == delayEstInterval) { 1055 if (aec->delayEstCtr == delayEstInterval) {
1056 aec->delayEstCtr = 0; 1056 aec->delayEstCtr = 0;
1057 } 1057 }
1058 1058
1059 // initialize comfort noise for H band
1060 memset(comfortNoiseHband, 0, sizeof(comfortNoiseHband));
1061 nlpGainHband = (float)0.0;
1062 dtmp = (float)0.0;
1063
1064 // We should always have at least one element stored in |far_buf|. 1059 // We should always have at least one element stored in |far_buf|.
1065 assert(WebRtc_available_read(aec->far_buf_windowed) > 0); 1060 assert(WebRtc_available_read(aec->far_buf_windowed) > 0);
1066 // NLP 1061 // NLP
1067 WebRtc_ReadBuffer(aec->far_buf_windowed, (void**)&xfw_ptr, &xfw[0][0], 1); 1062 WebRtc_ReadBuffer(aec->far_buf_windowed, (void**)&xfw_ptr, &xfw[0][0], 1);
1068 1063
1069 // TODO(bjornv): Investigate if we can reuse |far_buf_windowed| instead of 1064 // TODO(bjornv): Investigate if we can reuse |far_buf_windowed| instead of
1070 // |xfwBuf|. 1065 // |xfwBuf|.
1071 // Buffer far. 1066 // Buffer far.
1072 memcpy(aec->xfwBuf, xfw_ptr, sizeof(float) * 2 * PART_LEN1); 1067 memcpy(aec->xfwBuf, xfw_ptr, sizeof(float) * 2 * PART_LEN1);
1073 1068
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 // Smooth the overdrive. 1169 // Smooth the overdrive.
1175 if (aec->overDrive < aec->overDriveSm) { 1170 if (aec->overDrive < aec->overDriveSm) {
1176 aec->overDriveSm = 0.99f * aec->overDriveSm + 0.01f * aec->overDrive; 1171 aec->overDriveSm = 0.99f * aec->overDriveSm + 0.01f * aec->overDrive;
1177 } else { 1172 } else {
1178 aec->overDriveSm = 0.9f * aec->overDriveSm + 0.1f * aec->overDrive; 1173 aec->overDriveSm = 0.9f * aec->overDriveSm + 0.1f * aec->overDrive;
1179 } 1174 }
1180 1175
1181 WebRtcAec_OverdriveAndSuppress(aec, hNl, hNlFb, efw); 1176 WebRtcAec_OverdriveAndSuppress(aec, hNl, hNlFb, efw);
1182 1177
1183 // Add comfort noise. 1178 // Add comfort noise.
1179 memset(comfortNoiseHband, 0, sizeof(comfortNoiseHband));
1184 WebRtcAec_ComfortNoise(aec, efw, comfortNoiseHband, aec->noisePow, hNl); 1180 WebRtcAec_ComfortNoise(aec, efw, comfortNoiseHband, aec->noisePow, hNl);
1185 1181
1186 // TODO(bjornv): Investigate how to take the windowing below into account if 1182 // TODO(bjornv): Investigate how to take the windowing below into account if
1187 // needed. 1183 // needed.
1188 if (aec->metricsMode == 1) { 1184 if (aec->metricsMode == 1) {
1189 // Note that we have a scaling by two in the time domain |eBuf|. 1185 // Note that we have a scaling by two in the time domain |eBuf|.
1190 // In addition the time domain signal is windowed before transformation, 1186 // In addition the time domain signal is windowed before transformation,
1191 // losing half the energy on the average. We take care of the first 1187 // losing half the energy on the average. We take care of the first
1192 // scaling only in UpdateMetrics(). 1188 // scaling only in UpdateMetrics().
1193 UpdateLevel(&aec->nlpoutlevel, efw); 1189 UpdateLevel(&aec->nlpoutlevel, efw);
(...skipping 789 matching lines...) Expand 10 before | Expand all | Expand 10 after
1983 int WebRtcAec_extended_filter_enabled(AecCore* self) { 1979 int WebRtcAec_extended_filter_enabled(AecCore* self) {
1984 return self->extended_filter_enabled; 1980 return self->extended_filter_enabled;
1985 } 1981 }
1986 1982
1987 int WebRtcAec_system_delay(AecCore* self) { return self->system_delay; } 1983 int WebRtcAec_system_delay(AecCore* self) { return self->system_delay; }
1988 1984
1989 void WebRtcAec_SetSystemDelay(AecCore* self, int delay) { 1985 void WebRtcAec_SetSystemDelay(AecCore* self, int delay) {
1990 assert(delay >= 0); 1986 assert(delay >= 0);
1991 self->system_delay = delay; 1987 self->system_delay = delay;
1992 } 1988 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698