webrtc QOS笔记一 Neteq直方图算法浅读

news2024/12/28 4:15:37

webrtc QOS笔记一 Neteq直方图算法浅读

文章目录

    • webrtc QOS笔记一 Neteq直方图算法浅读
      • Histogram Algorithm
      • 获取目标延迟
      • 遗忘因子曲线

Histogram Algorithm

DelayManager::Update()->Histogram::Add() 会根据计算的iat_packet(inter arrival times, =实际包间间隔 / 打包时长),将该iat_packet插入IATVector直方图对应数组下标内。并更新该直方图的数据下标下概率参数。[M88 SRC]
在这里插入图片描述

一共有四步操作:

1、用遗忘因子,对历史数据的出现概率进行遗忘, 并统计概率合
b u c k e t s _ [ i ] = b u c k e t s _ [ i ] ∗ f o r g e t _ f a c t o r buckets\_[i] = buckets\_[i] * forget\_factor buckets_[i]=buckets_[i]forget_factor

v e c t o r _ s u m = ∑ 0 b u c k e t s . s i z e ( ) b u c k e t s _ [ i ] ∗ f o r g e t _ f a c t o r vector\_sum=\sum_{0}^{buckets.size()} buckets\_[i] * forget\_factor vector_sum=0buckets.size()buckets_[i]forget_factor

2、增大本次计算到的IAT的概率值。

b u c k e t s _ [ v a l u e ] = b u c k e t s _ [ v a l u e ] + ( 1 − f o r g e t f a c t o r _ ) buckets\_[value]=buckets\_[value]+(1−forget_factor\_) buckets_[value]=buckets_[value]+(1forgetfactor_)

v e c t o r _ s u m = v e c t o r _ s u m + ( 1 − f o r g e t _ f a c t o r _ ) vector\_sum = vector\_sum + (1-forget\_factor\_) vector_sum=vector_sum+(1forget_factor_)

  • 例:
假如历史bucket 数据为:
buckets_ = {0,0,1,0}

遗忘因子为 0.9:
forget_factor = 0.9

新来的抖动延迟数据为66ms, 桶间为20ms一个单位, 那插入位置为 66 / 20 = 3,则更新后

buckets = {0,0,0.9,0.1}

假若使用%95分位的值作为目标延迟, 则更新后的目标延迟为 60ms.

3、调整本次计算到的IAT的概率,使整个IAT的概率分布之和近似为1。调整方式为假设当前概率分布之和为tempSum,则:

v e c t o r s u m = 1 − v e c t o r s u m vector_sum=1−vector_sum vectorsum=1vectorsum

b u c k e t s [ n ] = { b u c k e t s _ [ n ] − M i n ( ∣ v e c t o r _ s u m ∣ , b u c k e t s _ [ n ] / 16 ) i f ( v e c t o r s u m > 0 ) b u c k e t s _ [ n ] + M i n ( ∣ v e c t o r _ s u m ∣ , b u c k e t s _ [ n ] / 16 ) i f ( v e c t o r s u m > 0 ) buckets_[n]= \begin{cases} buckets\_[n]−Min(∣vector\_sum∣,buckets\_[n]/16) if(vector_sum>0) \\ buckets\_[n]+Min(∣vector\_sum∣,buckets\_[n]/16) if(vector_sum>0) \\ \end{cases} buckets[n]={buckets_[n]Min(vector_sum,buckets_[n]/16)if(vectorsum>0)buckets_[n]+Min(vector_sum,buckets_[n]/16)if(vectorsum>0)

4、更新forget_factor_, 使遗忘因子forget_factor_逼近base_forget_factor_

a.使用start_forget_weight_更新(默认初始值start_forget_weight_ = 2,base_forget_factor_=0.9993)

a d d _ c o u n t _ + + add\_count\_++ add_count_++
f o r g e t _ f a c t o r _ = 1 − ( s t a r t _ f o r g e t _ w e i g h t _ / ( a d d _ c o u n t _ + 1 ) ) forget\_factor\_=1−(start\_forget\_weight\_/(add\_count\_+1)) forget_factor_=1(start_forget_weight_/(add_count_+1))
f o r g e t _ f a c t o r _ = M a x ( 0 , M i n ( b a s e _ f o r g e t _ f a c t o r _ , f o r g e t _ f a c t o r ) ) forget\_factor\_=Max(0,Min(base\_forget\_factor\_,forget\_factor)) forget_factor_=Max(0,Min(base_forget_factor_,forget_factor))

b. 其中的3是Q30的值,没有多大 = 0.000091552734375
f o r g e t _ f a c t o r _ = f o r g e t f a c t o r _ + ( b a s e _ f o r g e t _ f a c t o r _ − f o r g e t _ f a c t o r _ + 3 ) / 4 forget\_factor\_=forget_factor\_+(base\_forget\_factor\_−forget\_factor\_+3)/4 forget_factor_=forgetfactor_+(base_forget_factor_forget_factor_+3)/4

获取目标延迟

依据probability获取此百分位的值作为目标延迟(初始值0.97)

∑ 0 n b u c k e t s _ [ n ] > p r o b a b i l i t y \sum_{0}^{n} buckets\_[n] > probability 0nbuckets_[n]>probability

int Histogram::Quantile(int probability) {
  // Find the bucket for which the probability of observing an
  // inter-arrival time larger than or equal to |index| is larger than or
  // equal to |probability|. The sought probability is estimated using
  // the histogram as the reverse cumulant PDF, i.e., the sum of elements from
  // the end up until |index|. Now, since the sum of all elements is 1
  // (in Q30) by definition, and since the solution is often a low value for
  // |iat_index|, it is more efficient to start with |sum| = 1 and subtract
  // elements from the start of the histogram.
  int inverse_probability = (1 << 30) - probability;
  size_t index = 0;        // Start from the beginning of |buckets_|.
  int sum = 1 << 30;       // Assign to 1 in Q30.
  sum -= buckets_[index];
  
  while ((sum > inverse_probability) && (index < buckets_.size() - 1)) {
    // Subtract the probabilities one by one until the sum is no longer greater
    // than |inverse_probability|.
    ++index;
    sum -= buckets_[index];
  }

  return static_cast<int>(index);
}

遗忘因子曲线

测试曲线,调整遗忘因子提高抖动估计灵敏度:

#include <iostream>
#include <cstdint>
#include <vector>

uint32_t packet_loss_rate_ = 0;

int main()
{
  std::vector<int> input;
  std::vector<float> buckets;
  float forget_factor = 0.9993;
  float val = 0;

  for (size_t k = 0; k < 1000; k ++) {
    val = val * forget_factor + (1-forget_factor);
    buckets.push_back(val);
  }

  for (int i = 0; i < 1000; ++i) {
    std::cout << buckets[i]<< " ";
  }

  return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的在线课程管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

哈尔滨工业大学2020届面向服务复习笔记

目录 一、面向服务架构SOA 1.SOA概念 SOA所解决的问题 SOA的特性 SOA的特征 SOA组成要素 2.SOA服务设计原则 3.SOA协作模式 4.SOMA开发方法 SOMA生命周期 敏捷开发 服务外包与众包 5.ESB原理与机制 ESB解决的问题 ESB的功能 ESB关键技术 ESB的优势 6.服务组…

【Opencv--形态学操作】膨胀、腐蚀、开/闭操作:cv2.morphologyEx、cv2.erode、cv2.dilate

【Opencv–形态学操作】膨胀、腐蚀、开/闭操作 文章目录【Opencv--形态学操作】膨胀、腐蚀、开/闭操作1. 介绍2. 形态学操作2.1 腐蚀和膨胀2.1.1 腐蚀2.1.2 膨胀2.1.3 代码示例2.2 开/闭操作2.2.1 开操作2.2.2 闭操作2.2.3 代码示例2.3 礼帽和黑帽2.3.1 礼帽运算2.3.2 黑帽运算…

恭喜! SelectDB 五位开发者成为 Apache Doris 新晋 PMC 成员和 Committer!

近期&#xff0c;通过 Apache Doris 项目管理委员会的推荐与投票&#xff0c;Apache Doris 社区正式迎来了 2 位新晋 PMC 成员 和 8 位新晋 Committer 的加入。值得关注的是&#xff0c;2 位新晋 PMC 成员均来自 SelectDB&#xff0c;分别是衣国垒&#xff08;yiguolei&#xf…

【蓝桥杯集训4】双指针专题(6 / 6)

目录 3768. 字符串删减 - 滑动窗口ac 799. 最长连续不重复子序列 - 滑动窗口 800. 数组元素的目标和 - 二分ac 2816. 判断子序列 - 双指针 1238. 日志统计 - 滑动窗口 1240. 完全二叉树的权值 - 双指针 1、前缀和 - 通过了 5/12个数据 2、双指针 3768. 字符串删减 -…

<<Java开发环境配置>>6-SQLyog安装教程

一.SQLyog简介: SQLyog 是一个快速而简洁的图形化管理MySQL数据库的工具&#xff0c;它能够在任何地点有效地管理你的数据库&#xff0c;由业界著名的Webyog公司出品。使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。 二.SQLyog下载: 下载地址…

mySQL服务主从实现

一主一从1.1 环境准备&#xff1a;centos系统服务器2台、 一台用户做Mysql主服务器&#xff0c; 一台用于做Mysql从服务器&#xff0c; 配置好yum源、 防火墙关闭、 各节点时钟服务同步、 各节点之间可以通过主机名互相通信1.2 准备步骤&#xff1a;1&#xff09;iptables -F &…

多态和可变参数

多态 多态是同一个行为具有不同的表现形式或者形态的能力 &#x1f47f;多态的作用:主要用来实现动态性,提高程序的灵活性和扩展性 &#x1f916;故事:大宝-小宝是父子,有一天小宝接到打给大宝的电话,让大宝去喝喜酒,但是大宝不在家,小宝急中生智想到假扮成大宝去参加喜宴,这个…

Unity法线贴图原理理解(为什么存在切线空间?存的值是什么?)

Unity法线贴图原理理解(为什么存在切线空间&#xff1f;存的值是什么&#xff1f;&#xff09;写在前面1、为什么用法线贴图&#xff1f;2、用什么存法线&#xff1f;3、法线向量为什么存在切线空间&#xff1f;法线贴图存得是什么&#xff1f;4、法线贴图为什么会偏蓝&#xf…

MySQL字段值如何区分大小写

MySQL字段值如何区分大小写 注意&#xff1a;设置的是字段值区分大小写 1. 查询时指定大小写敏感&#xff0c;加关键字‘BINARY’ &#xff08;1&#xff09;删表&#xff0c;建表&#xff0c;新增数据 drop table binary_test; CREATE TABLE binary_test (id INT unsigned P…

2023年浙江建筑施工物料提升(建筑特种作业)模拟试题及答案

百分百题库提供特种工&#xff08;物料提升机&#xff09;考试试题、特种工&#xff08;物料提升机&#xff09;考试预测题、特种工&#xff08;物料提升机&#xff09;考试真题、特种工&#xff08;物料提升机&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

Zebec完成BNB Chain以及Near链上协议部署,多链化进程加速

从去年开始&#xff0c;Zebec 就开始以多链的形式来拓展自身的流支付生态&#xff0c;一方面向更多的区块链系统拓展自身流支付协议&#xff0c;即从Solana上向EVM链上对协议与通证等进行迁移与拓展。目前基本完成了在BNB Chain以及Near上的合约部署&#xff0c;且能够在这些EV…

handler解析(4)-Message及Message回收机制

Message中可以携带的信息 Message中可以携带的数据比较丰富&#xff0c;下面对一些常用的数据进行了分析。 /*** 用户定义的消息代码&#xff0c;以便当接受到消息是关于什么的。其中每个Hanler都有自己的命名控件&#xff0c;不用担心会冲突*/ public int what; /*** 如果你…

Mrkdown相关快捷键

Mrkdown相关快捷键欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚…

ChatGPT持续“狂飙“,有这么人工智能吗?

最近&#xff0c;一款新聊天工具ChatGPT火了&#xff0c;可以聊天、写作、编程、翻译&#xff0c;甚至可以质疑和拒绝你的要求。自2022年11月底推出以来&#xff0c;ChatGPT已经成为历史上增长最快的消费者应用程序之一。ChatGPT的狂飙突进引来谷歌、百度等众多互联网巨头的跟进…

案例分享 | 某券商利用AI技术进行告警关联分析(下)

本内容来自公众号“布博士”------&#xff08;擎创科技资深产品专家&#xff09;在上期内容中&#xff0c;我们了解到跨行业数据挖掘标准流程包括6大过程&#xff0c;分别为业务理解&#xff08;Business Understanding&#xff09;、数据理解&#xff08;Data Understanding&…

JavaWeb3-线程的3种创建方式7种写法

目录 1.方式一&#xff1a;继承Thread&#xff08;2种写法&#xff09; 写法①&#xff08;常规&#xff09;&#xff1a; a.使用jconsole观察线程 b.启动线程——start方法 PS&#xff1a;&#xff08;常见面试题&#xff09;start 方法与 run 方法的区别&#xff1a; 写…

免费CRM客户管理系统真的存在吗?不仅有,还有5个!

免费CRM客户管理系统真的存在吗&#xff1f;当然有&#xff01; 说到CRM客户管理系统&#xff0c;相信很多企业并不陌生&#xff0c;是因为CRM客户管理系统已经成为大多数企业最不可或缺的工具。但是对于很多小微企业和个人用户来说&#xff0c;购买和实施CRM的成本仍然难以承…

上海亚商投顾:沪指午后放量跳水两市上涨个股不足500只

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪指数早间震荡走高&#xff0c;沪指盘中收复3300点&#xff0c;午后集体跳水&#xff0c;创业板指一度跌超2%。ChatGP…

Spring 系列之 MVC

Spring 系列文章目录 文章目录Spring 系列文章目录前言一、介绍二、项目搭建1.创建空项目2.设置maven和lombok3.创建maven web module4. 配置Tomcat启动运行项目&#xff08;选择local本地&#xff09;5. 导入jar依赖包6.在web.xml中配置DispatcherServlet7. 加入SpringMVC的配…