您尚未登录。

楼主 #1 2018-07-12 20:24:07

观自在
会员
注册时间: 2018-07-02
已发帖子: 18
积分: 18

I2S信号正确的标准是什么?

请教大侠:
是不是配置完ESP32的I2S功能,MCLK\SCLK\LRCK\DSIN &(OR) DOUT线上都有信号出现?
这些信号之间有什么要求吗?比如某个信号是某信号的多少倍?
BCK信号& WS信号,与MCLK\SCLK\LRCK\DSIN &(OR) DOUT怎么对应的呢?
谢谢

离线

#2 2018-07-12 21:56:47

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,239
积分: 9197

Re: I2S信号正确的标准是什么?

LRCLK 是左右声道切换的频率,也就是通常我们说的采样频率fs, 比如 8k/16k/44.1k/48khz等.
MCLK   是 频率的 256/384/512等倍,即 256/384/512fs
SCLK 是位时钟, 如果采样深度16bit, 那么 SCLK = 16fs, 如果fs=48khz, 那么SCLK=768k
DIN, DOUT 就是输入输出了.

用逻辑分析仪挂在 I2S总线上面, 可以加深印象。





在线

楼主 #3 2018-07-13 10:03:01

观自在
会员
注册时间: 2018-07-02
已发帖子: 18
积分: 18

Re: I2S信号正确的标准是什么?

晕哥 说:

LRCLK 是左右声道切换的频率,也就是通常我们说的采样频率fs, 比如 8k/16k/44.1k/48khz等.
MCLK   是 频率的 256/384/512等倍,即 256/384/512fs
SCLK 是位时钟, 如果采样深度16bit, 那么 SCLK = 16fs, 如果fs=48khz, 那么SCLK=768k
DIN, DOUT 就是输入输出了.

用逻辑分析仪挂在 I2S总线上面, 可以加深印象。

非常感谢,感觉自己清晰多了

离线

楼主 #4 2018-07-16 15:56:10

观自在
会员
注册时间: 2018-07-02
已发帖子: 18
积分: 18

Re: I2S信号正确的标准是什么?

我的16位采样深度,怎么好像变成32位了?

设置:fs=48kHz,采样深度16bit,MCLK=256fs
理论:LRCK(fs) = 48KHz,MCLK=256fs=12.288MHz,SCLK = 16fs=768kHz,
实际量得LRCK(fs) = 48KHz,MCLK=12.288MHz,  SCLK = 1.5366MHz

SCLK实际测量值怎么是理论值的2倍?好像变成 32位采样深度了,难道同时选择左右声道,就会倍乘?

离线

楼主 #5 2018-07-16 17:40:25

观自在
会员
注册时间: 2018-07-02
已发帖子: 18
积分: 18

Re: I2S信号正确的标准是什么?

另外请教一下,ES8388初始化缺省值fs=48k,是不是说明它工作在fs=48k效果最好?这个fs取多少比较好,是根据音频芯片来的,还是由声音数据来源决定?谢谢

离线

#6 2018-07-16 17:51:13

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,239
积分: 9197

Re: I2S信号正确的标准是什么?

观自在 说:

我的16位采样深度,怎么好像变成32位了?

设置:fs=48kHz,采样深度16bit,MCLK=256fs
理论:LRCK(fs) = 48KHz,MCLK=256fs=12.288MHz,SCLK = 16fs=768kHz,
实际量得LRCK(fs) = 48KHz,MCLK=12.288MHz,  SCLK = 1.5366MHz

SCLK实际测量值怎么是理论值的2倍?好像变成 32位采样深度了,难道同时选择左右声道,就会倍乘?

这个貌似我算错了, 左右声道,应该再乘以2才对。

另外请教一下,ES8388初始化缺省值fs=48k,是不是说明它工作在fs=48k效果最好?这个fs取多少比较好,是根据音频芯片来的,还是由声音数据来源决定?谢谢

fs只要ESP32和ES8388支持之内的都可以, 现在的数字音乐用48khz基本可以满足需要。
如果你想用48khz的I2S采样速度播放 96/44.1hkz等其他采样率的音乐就要重采样(resample).
重采样会引起音频失真等问题。





在线

#7 2020-02-26 14:11:37

qianhao
会员
注册时间: 2017-12-14
已发帖子: 135
积分: 119

Re: I2S信号正确的标准是什么?

最近搞IIS驱动哦。

离线

#8 2020-02-26 14:53:49

Blueskull
会员
注册时间: 2020-02-20
已发帖子: 458
积分: 444.5

Re: I2S信号正确的标准是什么?

晕哥 说:

这个貌似我算错了, 左右声道,应该再乘以2才对。


fs只要ESP32和ES8388支持之内的都可以, 现在的数字音乐用48khz基本可以满足需要。
如果你想用48khz的I2S采样速度播放 96/44.1hkz等其他采样率的音乐就要重采样(resample).
重采样会引起音频失真等问题。


做过几年音频DIY,算是老烧友了,给大家科普一下DAC吧。

首先,MCLK是DAC的内部频率,一般要求和BCLK同步,是BCLK的整数倍,从1倍到N倍不等,一般N是2的次幂。
BCLK是DAC传输信号的频率,等于32*LRCK*fs,对于立体声(非TDM),LRCK永远是fs的2倍(64个BCLK周期)。
BCLK是fs的通道数倍数*32,无论采样深度。
对于不到32位的数据,有效数据可能在32位空间的前面(LJ),后面(RJ)或者LRCK同步脉冲的后一位开始(I2S)。

至于采样率,这个看你的需求。硬件采样率和软件采样率不同就会要求采样率转换,这个过程可以做到无损(动态范围大于140dB,失真小于-130dB),但是需要消耗大量的CPU资源。采样率转换器就是个滤波器,带外抑制越高,带宽差越小,采样率越高,需要的CPU资源越多。

因为一般的音频资源都是44.1k的,我推荐硬件采样率设成44.1k就好(不知道ESP32的PLL是否支持,实在不行外加个晶振,然后ESP32设为I2S slave模式)。
采样率越高不意味着音质越好。现代的DAC芯片都是sigma delta技术,内置整数倍插值,除非你的插值器比芯片硬件的好,否则你自己做采样率转换器只会降低音质。
另外常见的误解就是采样率高输出滤波器就会更简单,这个也不正确。DAC内部已经集成插值了,而且SDM调制器也会插值好多倍,同时把音频带外的低频噪声能量移动到高频区(SDM和PWM的最大区别之一,噪声整形),所以你自己做片外插值没啥卵用。

而且DAC内部的插值器一般是固定角频率的,而不是固定绝对频率的,所以通带阻带都是相对输入采样率的。如果你的输入采样率是48k,他的阻带一般是20k,你的输入采样率的96k,他的阻带就是40k。
如果你自己做了插值,而带外镜像抑制没做好,你的镜像频谱是不会被DAC的插值器干掉的,所以这部分会被输出,然后在运放等模拟输出单元里面和你的输入信号非线性混频,导致信号质量下降。

所以老老实实48k或者44.1k,不要作死是最好的,除非你很明确你在做什么。

最近编辑记录 Blueskull (2020-02-26 15:34:05)

离线

#9 2020-02-26 15:31:20

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,239
积分: 9197

Re: I2S信号正确的标准是什么?

@Blueskull 大佬真是全栈,佩服佩服! 慢慢看,先消化一下。





在线

#10 2020-02-26 15:41:45

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

Re: I2S信号正确的标准是什么?

@Blueskull 是真正的资深大佬,跟他交流后真是望尘莫及!

离线

#11 2020-05-12 11:46:04

hanhua
会员
注册时间: 2020-05-11
已发帖子: 5
积分: 5

Re: I2S信号正确的标准是什么?

都是大佬,萌新看的一脸懵逼

离线

#12 2020-05-24 23:09:49

lignin
会员
注册时间: 2020-03-21
已发帖子: 99
积分: 97.5

Re: I2S信号正确的标准是什么?

我从stm32学的I2S,stm32的SPI可以弄成I2S,不过我没有按照他那样配置,而是直接cubeMX初始话的
多了一根WS线,用于左右声道的选择,一般要配置的就是频率还有数据的位宽,这两个我现在觉得比较重要,我也才开始玩音频芯片

离线

#13 2020-05-31 23:36:18

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 367
积分: 316

Re: I2S信号正确的标准是什么?

Blueskull 说:

做过几年音频DIY,算是老烧友了,给大家科普一下DAC吧。

首先,MCLK是DAC的内部频率,一般要求和BCLK同步,是BCLK的整数倍,从1倍到N倍不等,一般N是2的次幂。
BCLK是DAC传输信号的频率,等于32*LRCK*fs,对于立体声(非TDM),LRCK永远是fs的2倍(64个BCLK周期)。
BCLK是fs的通道数倍数*32,无论采样深度。
对于不到32位的数据,有效数据可能在32位空间的前面(LJ),后面(RJ)或者LRCK同步脉冲的后一位开始(I2S)。

至于采样率,这个看你的需求。硬件采样率和软件采样率不同就会要求采样率转换,这个过程可以做到无损(动态范围大于140dB,失真小于-130dB),但是需要消耗大量的CPU资源。采样率转换器就是个滤波器,带外抑制越高,带宽差越小,采样率越高,需要的CPU资源越多。

因为一般的音频资源都是44.1k的,我推荐硬件采样率设成44.1k就好(不知道ESP32的PLL是否支持,实在不行外加个晶振,然后ESP32设为I2S slave模式)。
采样率越高不意味着音质越好。现代的DAC芯片都是sigma delta技术,内置整数倍插值,除非你的插值器比芯片硬件的好,否则你自己做采样率转换器只会降低音质。
另外常见的误解就是采样率高输出滤波器就会更简单,这个也不正确。DAC内部已经集成插值了,而且SDM调制器也会插值好多倍,同时把音频带外的低频噪声能量移动到高频区(SDM和PWM的最大区别之一,噪声整形),所以你自己做片外插值没啥卵用。

而且DAC内部的插值器一般是固定角频率的,而不是固定绝对频率的,所以通带阻带都是相对输入采样率的。如果你的输入采样率是48k,他的阻带一般是20k,你的输入采样率的96k,他的阻带就是40k。
如果你自己做了插值,而带外镜像抑制没做好,你的镜像频谱是不会被DAC的插值器干掉的,所以这部分会被输出,然后在运放等模拟输出单元里面和你的输入信号非线性混频,导致信号质量下降。

所以老老实实48k或者44.1k,不要作死是最好的,除非你很明确你在做什么。

大佬想问个问题,一般用内置DAC能不能直接驱动0.5w的喇叭啊?

离线

#14 2023-04-08 07:39:25

kkk123
会员
注册时间: 2023-04-08
已发帖子: 2
积分: 2

Re: I2S信号正确的标准是什么?

正在学习i2c i2s,新人理解起来有点难!

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn