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

Unified Diff: webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc

Issue 1190733004: Attempt to reland: Allow intelligibility to compile in apm (https://codereview.webrtc.org/118232300… (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changed temp file name Created 5 years, 6 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/audio_processing/intelligibility/intelligibility_utils.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc
diff --git a/webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc b/webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc
index e6fc3fa6a73b39aee82ea0e039e2ed6dc70a6f53..145cc0872866db4effc4715000b979e54d5e723e 100644
--- a/webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc
+++ b/webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc
@@ -8,6 +8,10 @@
* be found in the AUTHORS file in the root of the source tree.
*/
+//
+// Implements helper functions and classes for intelligibility enhancement.
+//
+
#include "webrtc/modules/audio_processing/intelligibility/intelligibility_utils.h"
#include <algorithm>
@@ -40,10 +44,13 @@ inline bool cplxnormal(complex<float> c) {
// were chosen randomly, so that even a series of all zeroes has some small
// variability.
inline complex<float> zerofudge(complex<float> c) {
- const static complex<float> fudge[7] = {
- {0.001f, 0.002f}, {0.008f, 0.001f}, {0.003f, 0.008f}, {0.0006f, 0.0009f},
- {0.001f, 0.004f}, {0.003f, 0.004f}, {0.002f, 0.009f}
- };
+ const static complex<float> fudge[7] = {{0.001f, 0.002f},
+ {0.008f, 0.001f},
+ {0.003f, 0.008f},
+ {0.0006f, 0.0009f},
+ {0.001f, 0.004f},
+ {0.003f, 0.004f},
+ {0.002f, 0.009f}};
static int fudge_index = 0;
if (cplxfinite(c) && !cplxnormal(c)) {
fudge_index = (fudge_index + 1) % 7;
@@ -54,8 +61,9 @@ inline complex<float> zerofudge(complex<float> c) {
// Incremental mean computation. Return the mean of the series with the
// mean |mean| with added |data|.
-inline complex<float> NewMean(complex<float> mean, complex<float> data,
- int count) {
+inline complex<float> NewMean(complex<float> mean,
+ complex<float> data,
+ int count) {
return mean + (data - mean) / static_cast<float>(count);
}
@@ -73,7 +81,9 @@ namespace intelligibility {
static const int kWindowBlockSize = 10;
-VarianceArray::VarianceArray(int freqs, StepType type, int window_size,
+VarianceArray::VarianceArray(int freqs,
+ StepType type,
+ int window_size,
float decay)
: running_mean_(new complex<float>[freqs]()),
running_mean_sq_(new complex<float>[freqs]()),
@@ -87,15 +97,15 @@ VarianceArray::VarianceArray(int freqs, StepType type, int window_size,
history_cursor_(0),
count_(0),
array_mean_(0.0f) {
- history_.reset(new scoped_ptr<complex<float>[]>[freqs_]());
+ history_.reset(new rtc::scoped_ptr<complex<float>[]>[freqs_]());
for (int i = 0; i < freqs_; ++i) {
history_[i].reset(new complex<float>[window_size_]());
}
- subhistory_.reset(new scoped_ptr<complex<float>[]>[freqs_]());
+ subhistory_.reset(new rtc::scoped_ptr<complex<float>[]>[freqs_]());
for (int i = 0; i < freqs_; ++i) {
subhistory_[i].reset(new complex<float>[window_size_]());
}
- subhistory_sq_.reset(new scoped_ptr<complex<float>[]>[freqs_]());
+ subhistory_sq_.reset(new rtc::scoped_ptr<complex<float>[]>[freqs_]());
for (int i = 0; i < freqs_; ++i) {
subhistory_sq_[i].reset(new complex<float>[window_size_]());
}
@@ -131,13 +141,15 @@ void VarianceArray::InfiniteStep(const complex<float>* data, bool skip_fudge) {
} else {
float old_sum = conj_sum_[i];
complex<float> old_mean = running_mean_[i];
- running_mean_[i] = old_mean + (sample - old_mean) /
- static_cast<float>(count_);
- conj_sum_[i] = (old_sum + std::conj(sample - old_mean) *
- (sample - running_mean_[i])).real();
- variance_[i] = conj_sum_[i] / (count_ - 1); // + fudge[fudge_index].real();
+ running_mean_[i] =
+ old_mean + (sample - old_mean) / static_cast<float>(count_);
+ conj_sum_[i] =
+ (old_sum + std::conj(sample - old_mean) * (sample - running_mean_[i]))
+ .real();
+ variance_[i] =
+ conj_sum_[i] / (count_ - 1); // + fudge[fudge_index].real();
if (skip_fudge && false) {
- //variance_[i] -= fudge[fudge_index].real();
+ // variance_[i] -= fudge[fudge_index].real();
}
}
array_mean_ += (variance_[i] - array_mean_) / (i + 1);
@@ -161,11 +173,13 @@ void VarianceArray::DecayStep(const complex<float>* data, bool /*dummy*/) {
complex<float> prev = running_mean_[i];
complex<float> prev2 = running_mean_sq_[i];
running_mean_[i] = decay_ * prev + (1.0f - decay_) * sample;
- running_mean_sq_[i] = decay_ * prev2 +
- (1.0f - decay_) * sample * std::conj(sample);
- //variance_[i] = decay_ * variance_[i] + (1.0f - decay_) * (
- // (sample - running_mean_[i]) * std::conj(sample - running_mean_[i])).real();
- variance_[i] = (running_mean_sq_[i] - running_mean_[i] * std::conj(running_mean_[i])).real();
+ running_mean_sq_[i] =
+ decay_ * prev2 + (1.0f - decay_) * sample * std::conj(sample);
+ // variance_[i] = decay_ * variance_[i] + (1.0f - decay_) * (
+ // (sample - running_mean_[i]) * std::conj(sample -
+ // running_mean_[i])).real();
+ variance_[i] = (running_mean_sq_[i] -
+ running_mean_[i] * std::conj(running_mean_[i])).real();
}
array_mean_ += (variance_[i] - array_mean_) / (i + 1);
@@ -186,15 +200,15 @@ void VarianceArray::WindowedStep(const complex<float>* data, bool /*dummy*/) {
mean = history_[i][history_cursor_];
variance_[i] = 0.0f;
for (int j = 1; j < num; ++j) {
- complex<float> sample = zerofudge(
- history_[i][(history_cursor_ + j) % window_size_]);
+ complex<float> sample =
+ zerofudge(history_[i][(history_cursor_ + j) % window_size_]);
sample = history_[i][(history_cursor_ + j) % window_size_];
float old_sum = conj_sum;
complex<float> old_mean = mean;
mean = old_mean + (sample - old_mean) / static_cast<float>(j + 1);
- conj_sum = (old_sum + std::conj(sample - old_mean) *
- (sample - mean)).real();
+ conj_sum =
+ (old_sum + std::conj(sample - old_mean) * (sample - mean)).real();
variance_[i] = conj_sum / (j);
}
array_mean_ += (variance_[i] - array_mean_) / (i + 1);
@@ -217,11 +231,11 @@ void VarianceArray::BlockedStep(const complex<float>* data, bool /*dummy*/) {
subhistory_[i][history_cursor_ % window_size_] = sub_running_mean_[i];
subhistory_sq_[i][history_cursor_ % window_size_] = sub_running_mean_sq_[i];
- variance_[i] = (NewMean(running_mean_sq_[i], sub_running_mean_sq_[i],
- blocks) -
- NewMean(running_mean_[i], sub_running_mean_[i], blocks) *
- std::conj(NewMean(running_mean_[i], sub_running_mean_[i],
- blocks))).real();
+ variance_[i] =
+ (NewMean(running_mean_sq_[i], sub_running_mean_sq_[i], blocks) -
+ NewMean(running_mean_[i], sub_running_mean_[i], blocks) *
+ std::conj(NewMean(running_mean_[i], sub_running_mean_[i], blocks)))
+ .real();
if (count_ == kWindowBlockSize - 1) {
sub_running_mean_[i] = complex<float>(0.0f, 0.0f);
sub_running_mean_sq_[i] = complex<float>(0.0f, 0.0f);
@@ -284,4 +298,3 @@ void GainApplier::Apply(const complex<float>* in_block,
} // namespace intelligibility
} // namespace webrtc
-
« no previous file with comments | « webrtc/modules/audio_processing/intelligibility/intelligibility_utils.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698