音频筑基:时延、帧长选取的考量

音频筑基:时延、帧长选取的考量

    • 帧长与时延的关系
    • 帧长变化的影响
    • 参考资料

音频算法中,时延和音频帧长的选择通常是个需要平衡的参数,这里分析下背后的考量因素。

帧长与时延的关系


一般来说,帧长是音频算法端到端时延的子集,是时延的组成元素,所以,帧长越长,时延越大。

那为啥会有音频帧长的概念呢?原因是一般会做分块频域变换,根据音频信号的短时平稳性(10-30ms,信号是周期重复的),从而进行分块分帧做短时傅里叶变换,于是有了帧长的概念。

时延指标里的那个why

那时延是啥?之前文章有讲,简单说,就是音频信号从发出到接收经历的时间延迟。过长的延迟带给人体验就是有卡顿感,而人耳对时延的敏感性是有范围的:

  • 人耳对端到端(嘴到耳的时延)

    • <150ms不会有明显感知
      • <50ms可能感知不大
      • 50~100ms之间可能轻微感知
      • 100~200ms可感知
    • >200ms能明显感知
    • >400ms会无法忍受
  • 蓝牙传输链路

    • 普通人对于80ms以下的声音延迟是没有知觉的
    • 经过听力专门训练的人员可识别50ms左右的延迟,例如专业电竞人员
    • 几乎没有人能识别35ms以下声音延迟

帧长变化的影响


以音频编解码为例,见下面描述:

First, the audio is sampled. Perceptual coding requires a codec to look at multiple, consecutive samples, as a lot of the opportunities for compression come from identifying periods of repeated sound (or lack of sound). This means that most codecs need to capture sufficient, successive samples to have enough data to characterise these changes. This period of sampling is called a frame.


Different encoding techniques use different frame lengths, but it’s almost always a fixed duration. If it’s too short, the limited number of samples starts to reduce the efficiency of the codec, as it doesn’t have enough information to apply the perceptual coding techniques, which impacts the quality. On the other hand, if the frame sizes grow, the quality improves, but the latency increases, as the codec has to wait longer to collect each frame of audio data.

——《Introducing-Bluetooth-LE-Audio-book》

帧长选取里的那个why

语音短时平稳性是在10-30ms这个区间有效,从下图可以看出,从编码质量和时延两个维度综合看,频域编解码最佳帧长是10ms及以上,5ms短帧的低码率编码就不太占优势。
在这里插入图片描述

参考资料


  1. Introducing-Bluetooth-LE-Audio-book.pdf, link

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

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

相关文章

Python操作Excel基础

一、使用Python对Excel读写数据 1.模块、包、库概念 Module&#xff08;模块&#xff09;&#xff1a;扩展名为.py的文件就可以称作为模块Package&#xff08;包&#xff09;&#xff1a;在模块只上的概念&#xff0c;为了方便管理.py模块文件进行打包。包目录下第一个文件必…

爬虫爬取数据遇到302,301重定向如何获取重定向后的地址(完美解决)

当用java或者python爬取目标网站的时候&#xff0c;浏览器可以正确重定向&#xff0c;而用编程爬取始终是code:200 只需要将请求头修改成如下&#xff0c;可以根据需要进行更改 Map<String, String> headers Map.of("Accept", "text/html,application/xh…

【征服Redis10】一文理解redis为什么这么快

Redis之所以一统分布式缓存的江湖&#xff0c;其中一大优势就是快&#xff0c;到底有多快呢&#xff1f;官方测试数据表明每秒可以处理13万次set或者lpush请求&#xff0c;执行lua调用可以达到12万次之多。一般来说&#xff0c;我们的Java服务&#xff0c;单台服务qps到达1000就…

ECharts实现简单饼图和柱状图

1.饼图 前端使用vue&#xff0c;后端使用SpringBoot <template><div><div class"card" style"padding: 15px">数据可视化分析&#xff1a;图书类型销量</div><div style"display: flex; margin: 10px 0"><di…

银行是地球村最大“车主”

有网友调侃说中国的银行已经成了地球村里最大的“房东”&#xff0c;这话的可信度高。可是&#xff0c;中国的银行还渐渐的在成为地球村里最大的“车主”。此言并非耸人听闻&#xff0c;“80多家4s店被查封 银行连夜拖车 网络炸锅”这新闻可佐证。 截图&#xff1a;来源今日国内…

Android分区挂载原理介绍(上)

一、 device-mapper基本原理介绍 1.1 dm工作原理 1.2 dm实现动态卷(逻辑分区)功能介绍(dm-linear) 1.3 dm 实现完整性校验功能介绍(dm-verity) 1.4 元数据加密(default-key) 1.5 dm实现快照功能介绍(snapshot,snapshot-origin,dm-snapshot-…

根据IP查找城市 - 华为OD统一考试

OD统一考试 题解&#xff1a; Java / Python / C 题目描述 某业务需要根据终端的IP地址获取该终端归属的城市&#xff0c;可以根据公开的IP地址池信息查询归属城市。 地址池格式如下&#xff1a; 城市名起始IP&#xff0c;结束IP 起始和结束地址按照英文逗号分隔&#xff0…

python字母异位词分组

给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…

非线性最小二乘问题的数值方法 —— 狗腿法 Powell‘s Dog Leg Method (I - 原理与算法)

Title: 非线性最小二乘问题的数值方法 —— 狗腿法 Powell’s Dog Leg Method (I - 原理与算法) 文章目录 I. 前言II. 线搜索类型和信赖域类型1. 线搜索类型 —— 最速下降法2. 信赖域类型3. 柯西点 III. 狗腿法的原理1. 狗腿法的构建2. 狗腿法的优化说明3. 狗腿法的插值权重 I…

Java 全栈知识点问题汇总(上)

Java 全栈知识点问题汇总&#xff08;上&#xff09; 1 Java 基础 1.1 语法基础 面向对象特性&#xff1f;a a b 与 a b 的区别3*0.1 0.3 将会返回什么? true 还是 false?能在 Switch 中使用 String 吗?对equals()和hashCode()的理解?final、finalize 和 finally 的不同…

Git 配置与理解

简述 Git 在 Windows 和 Ubuntu 中的配置&#xff0c;以及对 Git 工作区域划分和 Git 中对于文件状态划分的理解。 git 基础安装与配置 基于 WSL 的 Ubuntu 下的 git 打开或关闭Windows功能 -> Hyper-V、Virtual Machine Platform、Windows Subsystem for Linux # 1.必须…

STM32407用汇顶的GT911触摸芯片调试实盘

这个配置很关键 代码 #include "stm32f4xx.h" #include "GT9147.h" #include "Touch.h" #include "C_Touch_I2C.h" #include "usart.h" #include "delay.h" #include "LCD.h" #incl…

x86 和 x64 arm的区别

x86和x64是基于英特尔x86架构的复杂指令集架构&#xff08;ISA&#xff09;&#xff0c;而ARM是一种精简指令集架构。 什么是指令集架构 假设我们现在要开发一个cpu&#xff0c;就好比说我们去修建一栋楼&#xff0c;开发商会先将图纸设计好。设计好之后由施工单位按照设计图…

openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c

文章目录 openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_DSA_Signature_demo.c 概述 DSA签名(摘要算法SHA256), DSA验签(摘要算法SHA256) 签名 : 用发送者的私钥进行签名. 验签 : 用发送者的公…

基于SSM的图书馆管理系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的图书馆管理系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Sp…

win系统环境搭建(十四)——Windows系统下使用docker安装mysql8和mysql5.7

windows环境搭建专栏&#x1f517;点击跳转 win系统环境搭建&#xff08;十四&#xff09;——Windows系统下使用docker安装mysql8和mysql5.7 文章目录 win系统环境搭建&#xff08;十四&#xff09;——Windows系统下使用docker安装mysql8和mysql5.7MySQL81.新建文件夹2.创建…

windows开机默认启动某个程序

在Windows操作系统中&#xff0c;你可以通过将程序添加到“启动”文件夹或使用任务计划程序来实现开机自动启动某个程序。以下是两种常见的方法&#xff1a; 方法 1&#xff1a;使用“启动”文件夹 找到启动文件夹 按 Win R 打开运行对话框。输入 shell:startup&#xff0c;然…

Webpack5入门到原理1:前言

为什么需要打包工具&#xff1f; 开发时&#xff0c;我们会使用框架&#xff08;React、Vue&#xff09;&#xff0c;ES6 模块化语法&#xff0c;Less/Sass 等 css 预处理器等语法进行开发。 这样的代码要想在浏览器运行必须经过编译成浏览器能识别的 JS、Css 等语法&#xf…

Golang 中的反射,并用来获取数据类型

Go语言提供了一种机制在运行中获取某个变量的类型&#xff0c;获取或修改变量的值&#xff0c;调用变量的方法。 示例代码如下 1. 使用 x.(type)获取变量类型 package mainimport "strconv" //StrPrint 将几种已知数据类型转化为 string func StrPrint(x interfac…

设计模式篇章(4)——十一种行为型模式

这个设计模式主要思考的是如何分配对象的职责和将对象之间相互协作完成单个对象无法完成的任务&#xff0c;这个与结构型模式有点像&#xff0c;结构型可以理解为静态的组合&#xff0c;例如将不同的组件拼起来成为一个更大的组件&#xff1b;而行为型更是一种动态或者具有某个…