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 145cc0872866db4effc4715000b979e54d5e723e..e6fc3fa6a73b39aee82ea0e039e2ed6dc70a6f53 100644 |
--- a/webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc |
+++ b/webrtc/modules/audio_processing/intelligibility/intelligibility_utils.cc |
@@ -8,10 +8,6 @@ |
* 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> |
@@ -44,13 +40,10 @@ |
// 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; |
@@ -61,9 +54,8 @@ |
// 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); |
} |
@@ -81,9 +73,7 @@ |
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]()), |
@@ -97,15 +87,15 @@ |
history_cursor_(0), |
count_(0), |
array_mean_(0.0f) { |
- history_.reset(new rtc::scoped_ptr<complex<float>[]>[freqs_]()); |
+ history_.reset(new scoped_ptr<complex<float>[]>[freqs_]()); |
for (int i = 0; i < freqs_; ++i) { |
history_[i].reset(new complex<float>[window_size_]()); |
} |
- subhistory_.reset(new rtc::scoped_ptr<complex<float>[]>[freqs_]()); |
+ subhistory_.reset(new scoped_ptr<complex<float>[]>[freqs_]()); |
for (int i = 0; i < freqs_; ++i) { |
subhistory_[i].reset(new complex<float>[window_size_]()); |
} |
- subhistory_sq_.reset(new rtc::scoped_ptr<complex<float>[]>[freqs_]()); |
+ subhistory_sq_.reset(new scoped_ptr<complex<float>[]>[freqs_]()); |
for (int i = 0; i < freqs_; ++i) { |
subhistory_sq_[i].reset(new complex<float>[window_size_]()); |
} |
@@ -141,15 +131,13 @@ |
} 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); |
@@ -173,13 +161,11 @@ |
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); |
@@ -200,15 +186,15 @@ |
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); |
@@ -231,11 +217,11 @@ |
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); |
@@ -298,3 +284,4 @@ |
} // namespace intelligibility |
} // namespace webrtc |
+ |