- 博客(33)
- 资源 (16)
- 收藏
- 关注
原创 音频3A测试--AGC(自动增益)和NS(降噪)测试
设备A和设备B安装需要测的app,其中设备B是要进行测试的设备,设备A不做要求,性能满足要求即可 (接收和发送不出现掉帧,测试过程中不出现CPU80%以上)。研究表明,音量对音质的影响是显著的,在其他条件一致的情况下,音量越大,主观听感越好。一台音频处理器(调音台):控制每个通道播放的数据,如噪声、人工头、模拟设备B输入的数据、收集标准麦克风,设备A处理完成的数据;中:3.0:还可以,听不太清楚,有一定延时,有杂音,有轻微失 真,有轻微回声;良:4.0:次好,听得清楚,延时小,有轻微杂音,无回声;
2025-03-04 20:10:44
858
原创 音频3A测试--AEC(回声消除)测试
中:3.0:还可以,听不太清楚,有一定延时,有杂音,有轻微失 真,有轻微回声;双讲的评估一直是业界的难题,尽管有单讲的信号作为对比,但语音中残留从能量的角度会影响双讲剪切的客观指标计算,因此对于双讲场景,需要结合双讲回声、可懂度、MOS 分、双讲剪切等多个指标综合进行判断,且纯双讲段的回声残留无法有效计算,只能计算双讲语音间歇出的残留作为参考。搭建好硬件环境,设备B,设备A进入相同的测试会议(测试房间),对比测试需要保证测试环境相同,如:外放音量、采集音量,测试设备的性能;
2025-03-03 13:38:34
342
原创 基于Webrtc m79版本 AGC 算法原理介绍(三)(转)
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量在这几篇文章中描述清楚。
2025-02-24 13:37:56
588
原创 基于Webrtc m79版本 AGC 算法原理介绍(二)(转)
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量在这几篇文章中描述清楚。
2025-02-24 13:19:58
571
原创 基于Webrtc m79版本 AGC 算法原理介绍(一)(转)
本系列介绍Webrtc的agc算法。webrtc的agc算法对各种情况作了较为详尽的考虑,而且使用了的定点数的方法来实现,因此内容比较多。尽量再这几篇文章中描述清楚。较新的webrtc已经把原来的agc模块移动到了一个叫做legacy的文件夹。这个回头再写文章详细介绍。我还是从旧的agc算法开始讲起。Webrtc 的AGC算法的结构如下gain_control.h是包装的头文件,在apm里头gain_control_impl调用。主要包括了接口定义函数和参数配置。
2025-02-24 12:52:28
384
原创 AEC3 filter部分参数(一)
较短的初始化时间可以在较短时间内启动回声消除器,但可能会导致回声消除器无法收集足够的回声参考信号并建立准确的回声信号模型;参数控制回声消除器初始化的时间,即在开始进行回声消除前,回声消除器需要收集多长时间的回声参考信号并建立回声信号模型。需要注意的是,采用更加保守的相位估计方式可能会对回声消除器的性能和效果产生一定的影响,因此在实际应用中需要根据具体情况进行选择。设置为一个较大的值时,回声消除器将在新的回声路径上持续进行reset,以确保回声消除器的状态尽可能适应新的环境。
2024-10-31 12:28:15
539
原创 webrtc agc2实现原理
该算法首先计算输入信号的功率谱密度,然后根据上一帧噪声能量和当前帧信号能量的差值以及一些参数,估计当前帧的噪声能量。该公式的意义是:目标音量级别减去估计的背景噪声电平和增益余量,就得到了当前帧的增益。综上所述,WebRTC的AGC2根据输入信号的强度自动调整增益,以保证输出信号的音量稳定。其原理包括噪声估计、增益计算、增益平滑、增益范围和等级校准等。WebRTC的AGC2(自适应增益控制器)是一种用于音频处理的算法,可以根据输入信号的强度自动调整增益,使输出信号的音量保持稳定。
2024-10-31 12:27:56
711
原创 unordered_map、unordered_set 底层原理及其相关面试题
但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,unordered_map 可能会让你陷入尴尬,特别是当你的unordered_map 对象特别多时,你就更无法控制了,而且unordered_map 的构造速度较慢。但是,不能够保证每个元素的key与函数值是一一对应的,因此极有可能出现对于不同的元素,却计算出了相同的函数值,这样就产生了“冲突”,换句话说,就是把不同的元素分在了相同的“类”之中。哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,时间复杂度为O(1);
2024-10-31 12:26:34
538
原创 动态规划,就这几个问题最高频!
大家好,我是bigsai,好久不见,甚是想念(天天想念)!很久前就有小伙伴被动态规划所折磨,确实,很多题动态规划确实太难看出了了,甚至有的题看了题解理解起来都费劲半天。动态规划的范围虽然确实是很广很难,但是从整个动态规划出现的频率来看,这几种基础的动态规划理解容易,学习起来压力不大,并且出现频率非常高。这几个常见的动态规划有:连续子数组最大和,子数组的最大乘积,最长递增子序列(LIS),最长公共子序列(LCS),最长公共子串,最长公共子串,不同子序列。首先很多人问,何为动态规划?动态规划。
2024-10-31 12:26:09
979
原创 165. 比较版本号
给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由 多位数字 组成,可能包含 前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较 忽略任何前导零后的整数值。
2023-06-08 23:48:11
155
原创 最简单的视频编码器(一)---libx264
概述本文记录一个最简单的基于libx264的H.264视频编码器;直接调用libx264完成编码。因此项目的体积非常小巧。该编码器可以将输入的YUV数据编码为H.264码流文件。流程中主要的函数如下所示:x264_param_default():设置参数集结构体x264_param_t的缺省值。x264_picture_alloc():为图像结构体x264_picture_t分配内存。x264_encoder_open():打开编码器。x264_encoder_encode():编码一帧图像
2021-09-11 13:10:46
3296
原创 视音频数据处理入门:颜色空间(一)---转换理解
YUV颜色空间概述YV12与I420颜色空间相互转换NV12与I420颜色空间相互转换NV21与YV12颜色空间相互转换YUV转RGBI420与RGB32颜色空间相互转换I420与RGB24颜色空间相互转换
2021-08-24 20:29:58
1383
原创 视音频数据处理入门:I420 图像90° 、180°、270°旋转和左右镜像翻转
一、旋转原理 图像旋转就是对应像素点的位置的改变,把对应的像素点修改到指定位置即可实现90度、180度、270度旋转。如下图以4x6为例,每个格子代表一个像素点,格子里面的数字代表当前像素的位置; SRC顺时方向旋转90度我们以上图为例,顺时方向旋转90为例,说明旋转90原理;顺时方向旋转90度,则宽和高互换,由原来4x6变为6x4;SRC[0]的位置被SRC[20]所替代,形成Rotate90[0],以此类推;最终形成图Rotate90的效果。...
2021-08-12 14:56:04
4141
原创 Git命令使用出现Cannot update paths and switch to branch xxx at the same time解决方法
产生原因 这个问题产生的原因在切换分支的时候,本地git信息中没有你要拉取的分支信息,一般产生错误是使用如下命令造成的 : $ git checkout -b branch_a origin/develop 或 $ git checkout --track origin/develop解决方法:执行git fetch命令 git fetch $ git checkout -b 分支名字 origin/分支名 ...
2021-08-07 15:13:33
6093
2
原创 Git命令使用出现Automatic merge failed; fix conflicts and then commit the result.解决方法
产生原因 这个问题产生的原因是因为git pull 的时候会分为两步, 1、先从远程服务器上拉下代码; 2、进行merge。merge时候失败了,就会出现“Automatic merge failed; fix conflicts and then commit the result。”解决方法:丢弃本地提交,强制回到线上最新版本 git fetch --all git reset --hard origin/你需要下拉的分支(默认master) gi...
2021-08-04 09:49:34
21314
转载 C++ Lambda表达式基本用法
创建一个匿名函数并执行。Objective-C采用的是上尖号^,而C++ 11采用的是配对的方括号[]。实例如下:#include <iostream>using namespace std; int main(){ []{ cout << "Hello,Worldn"; }();}我们也可以方便的将这个创建的匿名函数赋...
2019-10-15 13:36:00
170
转载 C++ 智能指针 shared_ptr 详解与示例
shared_ptr 是C++11提供的一种智能指针类,它足够智能,可以在任何地方都不使用时自动删除相关指针,从而帮助彻底消除内存泄漏和悬空指针的问题。它遵循共享所有权的概念,即不同的 shared_ptr 对象可以与相同的指针相关联,并在内部使用引用计数机制来实现这一点。每个 shared_ptr 对象在内部指向两个内存位置:1、指向对象的指针。2、用于控制引用计数数据的指针。共享所有...
2019-10-15 09:54:25
1531
转载 C++ 智能指针 unique_ptr 详解与示例
unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。查看下面的示例:#include <iostream>#i...
2019-10-15 09:33:35
520
转载 Github上传代码菜鸟超详细教程【转】
说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午。终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍的是windows下的安装和使用。 【第一步】建立先仓库 第一步的话看一般的提示就知道了,在github新建一个repository(谷歌可以解决),都是可视化的界面操作,所以难度...
2019-07-30 16:46:42
946
转载 报错 ImportError: No module named model_selection 的解决办法
win10下运行了一段Python代码,出现了报错, 报错是ImportError: No module named model_selection。我定位代码到import sklearn.model_selection,我才知道原来我没有这个model。我在网上找了一下解决方法,原来是scikit-learn的版本太低。在anaconda中通过命令行查看sklearn的版本为 0.17.1...
2018-12-20 09:20:16
1755
原创 OpenCV成长之路 01、图像的读写与显示
一、工具篇工欲善其事,必先利其器。学习OpenCV,肯定少不于基本的编程工具与OpenCV库。在Windows平台下你可以选择Visual Studio、CodeBlock等,当然你也可以选择在Linux平台,用VI、codeBlock都是可以的。编程平台的选择看个人爱好以及项目的开发环境。然后是OpenCV库,你可以在这里下载到最新的版本:http://opencv.org/,最近的版本已经...
2018-12-07 10:46:39
163
转载 Tensorflow和MNIST识别自己手写的数字 finished with exit code -1073740791 (0xC0000409)解决方案
在跑alexnet的测试demo时,遇到无错跳出finished with exit code -1073740791 (0xC0000409),查出是显卡内存不足的问题,解决如下:import osos.environ["CUDA_VISIBLE_DEVICES"] = "-1" 1 2参考链接:(1)https://stackoverflow.com/questi...
2018-11-13 16:17:44
751
转载 pycharm中project使用Anaconda3中自己创建的python环境作为编译器、pycharm运行程序时在Python console窗口中运行解决方法
我们以自己创建的tensorflow环境为例。Anaconda中自己创建的环境都在这个文件夹内:C:\ProgramData\Anaconda3\envs打开pycharm,新建一个project,然后点击File->Settings->Project:[当前项目名称],出现下面界面:点击右上角add,添加一个已配置的环境: 这里我们添加了已经创建的te...
2018-11-13 14:32:06
2569
1
转载 Windows桌面共享中一些常见的抓屏技术
1. BitBlt 我想做Windows开发应该都知道这个API, 它能实现DC间的内容拷贝, 如果我们把源DC指定成Monitor DC或是桌面DC, 它就能实现抓屏功能。对于通过这种方式的抓屏, 有2点需要特别提醒:a. 在XP下我们可以通过最后的拷贝标志来控制是否拷贝layered window, 只有SRCCPY表示拷贝内容不包含layered window, 如果是SRC...
2018-11-12 15:09:54
1788
原创 websocket简单介绍(一)
对于websocket的理解,可能我和其他人的理解也是不一样的,简单的来说websocket如果分开那就是web和socket两个,所以websocket便是是浏览器和底层进程正常通信的重要途径,我对websocket的理解是websocket本身是一种协议,浏览器想要和进程进行直接通信那需要首先建立TCP连接,当TCP三四握手成功以后,浏览器会主动向TCP服务端发起一起websocket层的握手...
2018-07-31 09:59:18
542
原创 让你彻底搞懂Websocket原理
一、websocket与httpWebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有 1.1 和 1.0 之说,也就是所谓的 keep-alive ,把多个HTTP请求合并为一个,但是 Websocket 其实是一个新协议,跟HTTP协议基本没有关系,只是为了兼容现有浏览器的握手规范...
2018-07-31 09:57:31
1134
转载 在Linux下访问Windows共享文件夹
说明以下操作以Ubuntu为例,大家可以参考。我在Ubuntu 14.04和16.04都试过了。Windows共享文件夹如果局域网内有一台Windows主机,将指定文件夹设为共享,就可以在局域网内访问了。如果要从Linux下访问该如何操作呢?使用 mount.cifsWindows共享文件夹使用的协议是SMB/CIFS。因而可以使用Linux下的smbclient在命令行中进行操作。如果想更方便地...
2018-06-11 14:13:09
803
原创 动态获取指定窗口大小 获取鼠标所在窗口的位置,HWND
git中代码测试程序,直接创建VS2013程序代码复制便可编译,实现功能动态获取窗口大小,获取鼠标按键消息,获取鼠标所在窗口的位置,大小,窗口句柄
2017-09-18 11:25:58
8957
原创 音频AAC编码 fmepg3.3.0
文介绍一个最简单的基于FFMPEG的音频编码器。该编码器实现了PCM音频采样数据编码为AAC的压缩编码数据。编码器代码十分简单,但是每一行代码都很重要。通过看本编码器的源代码,可以了解FFMPEG音频编码的流程。本程序使用最新版的ffmpeg库,接下对比着和大家说一下3.0以上版本和2.8的版本区别:m_pCodecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
2017-08-15 20:36:27
504
翻译 websocket规范 RFC6455 中文版
InternetEngineering Task Force (IETF) I. FetteRequest forComments: 6455 Google,Inc.Category: StandardsTrack A.M
2017-08-04 14:19:41
3726
simplest-encoder.7z
2021-09-23
simplest-encoder-x264
2021-09-08
YUV颜色空间转换(YV12、NV12、NV21、I420、RGB等)
2021-08-17
Virtual Audio Devices
2018-09-12
matlab扩展编程 和代码
2018-07-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人