I2S/PCM知识点记录
目录
1.常见的音频采样率有两类,一类是48K domain,另一类是44.1KHz domain
2.常见采样深度 【即单声道和单slot位宽】8/12/16/24/32 bit
3.帧结构
4.I2S/PCM允许实际有效采样位宽比传输的位宽小
5.ddr存储对齐
6.sclk和mclk以及adifclk的产生
6.1误差率分析
6.2 只有偶数分频
7.能否直接用sclk采样sdata、fs/ws
8.信号同步及采样问题
9.关于非标准格式
10.PCM的fs offset和length
11.音频场景的一个特点
1.常见的音频采样率有两类,一类是48K domain,另一类是44.1KHz domain
48K包括 :8/16/24/32/48/64/96/192 KHz
44.1K包括:11.025/22.05/44.1/88.2 KHz
2.常见采样深度 【即单声道和单slot位宽】8/12/16/24/32 bit
也有20bit采样深度,但是这种情况对sclk/mclk的需求不能很好的兼容
3.帧结构
对于I2S来说,左右声道一起构成了一帧,所以常见的帧长为16,24,32,48,64bit.
对于pcm来说,两个FS之间的所有slot算一帧,所以常见帧长有16/32/48/64/96/128/192/256bit
4.I2S/PCM允许实际有效采样位宽比传输的位宽小
也就是可以用32bit的单声道/slot位宽来传输8/12/16/20/24bit的音频数据。但是无效数据的分布I2S和PCM略微不一样。
- I2S的有效数据以声道为单位 连续发送,可以左对齐,右对齐,或自定义dataOffset。无效数据部分可以选择传输0或者高阻态(sdo_oen=1)
- pcm的有效数据以帧为单位连续发送,slot之间没有间隙,有效数据可以在两个fs上升沿之间的任意位置【标准pcm是在fs上升沿,下一个sclk发送有效数据】。无效数据部分可以选择传输0或者高阻态(sdo_oen=1)
5.ddr存储对齐
在ddr中,音频数据总是8/16/32bit存储的,比如说对于24bit的音频,从ddr中读出来都是32bit,其中高8bit无效,那么在串并转换的时候,只从[0] ,[1], ...., [23]bit输出【lsb优先】。反过来24拍串行数据移位到32bit寄存器,然后将32bit写到DDR。
6.sclk和mclk以及adifclk的产生
sclk(bclk):是bit位clk,和串行传输的bitRate相等。也等于 采样率x帧长。
采样率:对于I2S来说就是ws(lrclk)的频率;对于PCM来说就是fs的间隔频率
mclk:在I2S/PCM接口的ADC/DAC系统中,除了SCK和WS外,CODEC经常还需要控制器提供MCLK (Master Clock),这是由CODEC内部基于Delta-Sigma (ΔΣ)的架构设计要求使然。其主要原因是因为这类的CODEC没有所谓提供芯片的工作时钟晶振电路。它需要外部的时钟提供内部PLL。一般是256Fs或384Fs
既然mclk就是256Fs或者384Fs,那么是否可以直接使用mclk作为音频的主要工作频率呢?答案是肯定的,因为常见帧长16/32/64/128/256的音频都可以直接对256Fs的mclk得到,而24/48/96/192的帧长可以对384Fs的mclk直接分频。
那么为什么还要有adifclk呢?因为mclk要么来自片外输入,要么片内通过晶振-->PLL分频出来;如果只有片外输入的mclk,自然就不存在adifclk什么事了,这里讨论片内晶振--->PLL来产生mclk。因为mclk是和FS频率有关的变化量,如果直接用PLL产生,那么需要经常调节PLL的参数,等待PLL稳定的时间比较长,如果可以找到所有mclk的公倍数,那么就可以通过这个clk在逻辑设计中用整数分频得到。而adifclk就是这个所有mclk的公倍数。
首先对192Kx256和88.2Kx256寻找一个公倍数,结果就是7225344KHz,分别是192Kx256的147倍频和88.2Kx256的320倍频。但是这个7225344KHz频率太大了。所以最好是对192K和88.2K分两类独立出频点。
对于48K domain来说,分析所有sclk可得,帧长和采样率要么是2^n要么是3x2^n,最差的情况是帧长和采样率都是3x2^n,那么公倍数必然要求具有9x2^n形式,又该频率大于等于256×max(Fs)=49.152MHz,但49.152MHz只是3x2^n, 所以满足条件的最小公倍数为adifclk=49.152Mx3/2=73.728MHz=3x(3x32x2)x128.
同理得到44.1K domain的最小公倍数频率只需满足11.025x3x2^n且大于等于88.2Kx256即可。adifclk=67737.6KHz=3x11.025x8x256KHz.
综上我们得到
8/16/24/32/48/64/96/192 KHz采样率,8/12/16/24/32采样深度,最大帧长256时的adifclk为73.728MHz
11.025/22.05/44.1/88.2 KHz采样率,8/12/16/24/32采样深度,最大帧长256时的adifclk为67.7376MHz
得到adifclk,在得到mclk和sclk就需要逻辑支持整数倍占空比为50%的分频逻辑【网上大把奇偶占空比50%的数字分频教程】。
另外为了能够高精度的调整输入 sclk/fs/sdi的相位,我们可以在把上面得到的adifclk提频,可以得到adifclk周期精度的相位调整,而不仅仅是在sclk的精度上调整。
6.1误差率分析
上面的频率分别为73.728MHz和67.7376MHz,频率精度都达到了1KHz,对PLL的要求较高,有时我们回取它们的近似频率来做,评价近似频点的好坏可以用sclk,fs及mclk的误差率来分析。
sclk(real)={adifclk(real)/{[adifclk(real)/sclk]取整}
sclk误差率:{sclk(real)-sclk}/sclk
fs误差率:{sclk(real)/帧长-sclk/帧长}/(sclk/帧长) 实际和sclk误差率相同
256FS mclk的实际值:
mclk(real)={adifclk(real)/{[adifclk(real)*帧长/(sclk*256)] 取整}
mclk误差率:{mclk(real) - mclk}/mclk
6.2 只有偶数分频
发现有些工程没有做奇数占空比数字分频,只使用了偶数分频,此时使用上面的adifclk分频得到的sclk,fs,mclk误差就比较大,例如96KHz采样率,48bit帧长,mclk为96x256=24.576MHz,就需要adifclk=73.728MHz 3分频。此时无论采用2分频 【50%的误差】还是4分频【25%的误差】误差都无法接受;sclk为96x48=4.608M,16分频,误差为0.
如果想要在只有偶数分频的工程中得到较好的sclk,fs,mclk误差,就只有偶数倍频率,并加上一个offset,使得本来偶数分频的误差提高,需要奇数分频的误差降低,都到达一个可接收的程度。例如:在计算adifclk时只满足3x2^n,对于48K domian adifclk=48K×256x2^n,找一个比73.728M大的频点196.608Hz,此时对于mclk为96x256=24.576MHz,为8分频,误差为0;sclk为196.608M 42分频,分配后为4681K,误差为(4681-4608)/4608=1.58%。在加个offset取194.796M ,对adifclk 8分频,mclk=24.3495,误差为0.9%;对adifclk 42分频,sclk=4.638MHz,误差为0.65%;都降到了可接受程度。【不推荐只有偶数分频的处理】
7.能否直接用sclk采样sdata、fs/ws
因为存在板间传输,sclk和sdata、fs/ws在sclk的采样沿可能存在sdata、fs/ws setup/hold不满足,而且sclk,sdata,ws/fs信号质量可能较差,所以到了sclk/ws/fs到了slv端或者sdata到了Rx端都会用一个高频clk同步这些信号,同步之后是可以用sclk来直接采样sdata、ws/fs的。只不过有可能存在相位偏差,需要调整sclk与sdata,ws/fs的相位,这又需要粗调和细调,细调还是要高频时钟。所以不如将sclk作为数据,产生边沿信号,边沿信号作为条件,在高频时钟下采样。
8.信号同步及采样问题
I2S/PCM board-level 约束及同步(latency&skew&bitsync)_cy413026的博客-CSDN博客
9.关于非标准格式
I2S:标准格式是在ws变化沿后一个sclk发送sdata
PCM:标准格式是在fs上升沿之后一个sclk发送sdata
非标准的自定义格式,这个sdata和ws边沿以及fs上升沿的delay是可以配置的,在逻辑实现上可以统一用计数器来实现,不过无论sdata delay多少,I2S数据不能跨声道,PCM不能跨帧。
10.PCM的fs offset和length
pcm的fs 可以不在sdata的帧起始,fs的持续时间也可以大于一个sclk宽度。
对于fs有offset的情况,特别是fs比数据晚的情况,需要仔细处理。fs的offset就会导致两个fs之间有两个pcm帧在传输。
11.音频场景的一个特点
在拾音和放音的过程中,在开始和结尾的时候有几帧空白或丢帧,人耳是无法感知的,但在拾音和放音中间过程出现问题是可以感觉到的。
所以初始化过程中,有丢帧影响不大。当然还是要尽量避免这种问题。
相关文章:
I2S/PCM知识点记录
目录 1.常见的音频采样率有两类,一类是48K domain,另一类是44.1KHz domain 2.常见采样深度 【即单声道和单slot位宽】8/12/16/24/32 bit 3.帧结构 4.I2S/PCM允许实际有效采样位宽比传输的位宽小 5.ddr存储对齐 6.sclk和mclk以及adifclk的产…...

微信小程序——使用 Vant 组件实现 Popup 弹出层(各位置弹出详细代码分享)
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
linux查看python的py文件的命令
在 Linux 中,要查看 Python 的 .py 文件内容,可以使用以下几种命令: 使用 cat 命令: cat /path/to/your_python_file.py cat 命令用于显示文件内容,将会在终端输出整个 .py 文件的内容。 使用 less 命令:…...

开源库源码分析:Okhttp源码分析(一)
开源库源码分析:OkHttp源码分析 导言 接下来就要开始分析一些常用开源库的源码了,作为最常用的网络请求库,OkHttp以其强大的功能深受Android开发者的喜爱(比如说我),还有对该库进行二次封装而成的热门库&a…...

无涯教程-JavaScript - LOOKUP函数
描述 需要查看单个行或一列并从第二行或第二列的同一位置查找值时,请使用LOOKUP函数。使用"查找"功能搜索一行或一列。 使用VLOOKUP函数可搜索一行或一列,或搜索多行和多列(如表)。它是LOOKUP的改进版本。 有两种使用LOOKUP的方法- 矢量形式 − Use this form of…...

这所院校太好考了!地处魔都!不要错过!
一、学校及专业介绍 上海电力大学(Shanghai University of Electric Power),位于上海市,是中央与上海市共建、以上海市管理为主的全日制普通高等院校,是教育部首批“卓越工程师教育培养计划”试点院校、上海高水平地方…...

Python - PyQt6、QDesigner、pyuic5-tool 安装使用
Python 开发可视化界面可以使用原生的 tkinter,但是原生框架使用起来颇为不方便,所以最流行的还是QT UI框架,QT是使用C语言开发,Python 想使用需要对其进行封装,所以就出现了PyQt框架,这个框架使用极其方便…...

C语言——指针进阶(三)
目录 一.前言摘要 二.排序函数qsort的模拟实现 三.指针和数组笔试题解析 一.前言摘要 讲述关于strlen和sizeof对于各种数组与指针的计算规则与用法。另外还有qsort函数的模拟实现(可以排序任意类型变量) 二.排序函数qsort的模拟实现 目标:…...

三勾商城(java+vue3)微信小程序商城+SAAS+前后端源码
项目介绍 本系统功能包括: 前台展示后台管理SAAS管理端,包括最基本的用户登录注册,下单, 购物车,购买,结算,订单查询,收货地址,后台商品管 理,订单管理&…...

【洁洁送书第七期】现在学 Java 找工作还有优势吗
java 现在学 Java 找工作还有优势吗?活力四射的 JavaTIOBE 编程语言排行榜从零开始学会 JavaJava 语言运行过程基础知识进阶知识高级知识talk is cheap, show me the code结语 文末赠书 现在学 Java 找工作还有优势吗? 在某乎上可以看到大家对此问题的…...

npm发布自定义vue组件库
npm发布自定义vue组件库 创建项目 vue create test-ui自定义组件 创建自定义组件,组件名称根据你的需求来,最好一个组件一个文件夹,下图是我的示例。 src/components 组件和你写页面一样,所谓组件就是方便实用,不用…...

9.12 C++作业
实现一个图形类(Shape),包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle),继承自图形类,包含私有属性:半…...

利用LinuxPTP进行时间同步(软/硬件时间戳) - 研一
转自:https://blog.csdn.net/BUPTOctopus/article/details/86246335 官方文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-using_ptp 查看网卡是否支持软硬件时间戳: sudo ethtoo…...
《极客时间:左耳听风——程序员练级攻略》【文章笔记个人思考】
原文链接:https://time.geekbang.org/column/intro/100002201 69 | 程序员练级攻略:开篇词70 | 程序员练级攻略:零基础启蒙编程入门入门语言 Python入门语言 JavaScript操作系统入门 Linux编程工具 Visual Studio CodeWeb 编程入门实践项目小…...

Springboot 实践(15)spring config 配置与运用—自动刷新
目前,网络上讲解spring config的自动刷新,都是通过git服务站的webhook功能执行“actuator/bus-refresh”服务实现的自动刷新。我们的前文讲解的配置中心,配置中心仓库使用的时本地地址,如下图所示: 那么,配…...

FirmAFL
FirmAFL使用并改进了Firmdyne模拟方式,并利用AFL对IoT固件实施高通量灰盒Fuzzing。 一、项目简介 FIRM-AFL 是 第一个针对物联网固件的高吞吐量灰盒模糊测试器。 支持mipsel、mipseb和armel三种CPU架构 ,涵盖Firmadyne数据库中90.2%的固件。 FIRM-AFL 解…...

SpringMVC的整合完成CRUD(增删改查)
SpringMVC是一种基于Java的Web框架,它是Spring框架的一部分。SpringMVC通过使用MVC(Model-View-Controller)设计模式来组织和管理Web应用程序的开发。 在SpringMVC中,Model代表数据模型,View代表用户界面,C…...

Postman使用_Tests Script(断言测试)
断言测试可以在Collection、Folder和Request的 pre-request script 和 test script中编写,测试脚本可以检测请求响应的各个方面,包括正文、状态代码、头、cookie、响应时间等,只有测试符合自定义的要求后才能通过。 pm对象提供了测试相关功能…...

问道管理:华为概念股捷荣技术13天10板,监管质疑迎合热点炒作
捷荣技能(002855.SZ)一口气将气氛拉满。 盘面看,自8月29日启动到9月14日,捷荣技能用了13天时间,将累计涨幅推到了188%,期间有10个涨停板,如此冷艳之举,还在于其“华为概念”。 …...

VR云游:让游客足不出户享受旅行的乐趣
随着人们的生活水平不断提高,对于旅行的需求也在日益增长,既要玩的舒心,也要享受的舒服,因此VR全景云游就成为了一种新型的旅行方式,人们足不出户就可以沉浸式游览各地自然风光与名胜古迹。 VR云游景区是一种全新的旅游…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...