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

Unified Diff: webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc

Issue 1237303002: Modified Simulation Framework Jitter Model (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Updated Jitter expected value to suit the truncated gaussian Created 5 years, 5 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
Index: webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
diff --git a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
index 2d256d49fc1f44d76fb56335b2ab6b179085645e..90e4094cb38e3eb4651a7396ce567ea40b1a10b3 100644
--- a/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
+++ b/webrtc/modules/remote_bitrate_estimator/test/bwe_test_framework.cc
@@ -389,7 +389,8 @@ JitterFilter::JitterFilter(PacketProcessorListener* listener, int flow_id)
: PacketProcessor(listener, flow_id, kRegular),
random_(0x89674523),
stddev_jitter_us_(0),
- last_send_time_us_(0) {
+ last_send_time_us_(0),
+ reordering_(false) {
}
JitterFilter::JitterFilter(PacketProcessorListener* listener,
@@ -397,27 +398,62 @@ JitterFilter::JitterFilter(PacketProcessorListener* listener,
: PacketProcessor(listener, flow_ids, kRegular),
random_(0x89674523),
stddev_jitter_us_(0),
- last_send_time_us_(0) {
+ last_send_time_us_(0),
+ reordering_(false) {
}
-void JitterFilter::SetJitter(int64_t stddev_jitter_ms) {
+const int kN = 3; // Truncated N sigma gaussian.
+
+void JitterFilter::SetMaxJitter(int64_t max_jitter_ms) {
BWE_TEST_LOGGING_ENABLE(false);
- BWE_TEST_LOGGING_LOG1("Jitter", "%d ms",
- static_cast<int>(stddev_jitter_ms));
- assert(stddev_jitter_ms >= 0);
- stddev_jitter_us_ = stddev_jitter_ms * 1000;
+ BWE_TEST_LOGGING_LOG1("Max Jitter", "%d ms", static_cast<int>(max_jitter_ms));
+ assert(max_jitter_ms >= 0);
+ // Truncated gaussian, Max jitter = kN*sigma.
+ stddev_jitter_us_ = (max_jitter_ms * 1000 + kN / 2) / kN;
+}
+
+namespace {
+inline int64_t TruncatedNSigmaGaussian(Random* const random,
+ int64_t mean,
+ int64_t std_dev) {
+ int64_t gaussian_random = random->Gaussian(mean, std_dev);
+ return std::max(std::min(gaussian_random, kN * std_dev), -kN * std_dev);
+}
}
void JitterFilter::RunFor(int64_t /*time_ms*/, Packets* in_out) {
assert(in_out);
for (Packet* packet : *in_out) {
- int64_t new_send_time_us = packet->send_time_us();
- new_send_time_us += random_.Gaussian(0, stddev_jitter_us_);
- last_send_time_us_ = std::max(last_send_time_us_, new_send_time_us);
- packet->set_send_time_us(last_send_time_us_);
+ int64_t jitter_us =
+ std::abs(TruncatedNSigmaGaussian(&random_, 0, stddev_jitter_us_));
+ int64_t new_send_time_us = packet->send_time_us() + jitter_us;
+
+ if (!reordering_) {
+ new_send_time_us = std::max(last_send_time_us_, new_send_time_us);
+ }
+
+ // Receiver timestamp cannot be lower than sender timestamp.
+ assert(new_send_time_us >= packet->sender_timestamp_us());
+
+ packet->set_send_time_us(new_send_time_us);
+ last_send_time_us_ = new_send_time_us;
}
}
+// Computes the expected value for a right sided (abs) truncated gaussian.
+// Does not take into account possible reoerdering updates.
+int64_t JitterFilter::MeanUs() {
+ const double kPi = 3.1415926535897932;
+ double max_jitter_us = static_cast<double>(kN * stddev_jitter_us_);
+ double right_sided_mean_us =
+ static_cast<double>(stddev_jitter_us_) / sqrt(kPi / 2.0);
+ double truncated_mean_us =
+ right_sided_mean_us *
+ (1.0 - exp(-pow(static_cast<double>(kN), 2.0) / 2.0)) +
+ max_jitter_us * erfc(static_cast<double>(kN));
+ return static_cast<int64_t>(truncated_mean_us + 0.5);
+}
+
ReorderFilter::ReorderFilter(PacketProcessorListener* listener, int flow_id)
: PacketProcessor(listener, flow_id, kRegular),
random_(0x27452389),

Powered by Google App Engine
This is Rietveld 408576698