I2S传输PCM音频数据分析总结

1.前言
《I2S传输PCM音频数据分析总结》主要是介绍PCM音频数据是如何通过I2S进行传输的,主要是分成2个部分:

PCM音频数据介绍
I2S协议介绍
本篇文章主要是以PCM音频数据来介绍。

2.PCM音频简介
PCM音频(Pulse-Code Modulation)是一种用数字表示采样模拟信号的方法。

要将一段音频模拟信号转换为数字表示,包含如下三个步骤:

Sampling(采样)
Quantization(量化)
Coding(编码)
下面的截图是PCM音频 1KHz 正弦波的波形,播放出来就是“滴”的声音:


3. Sampling(采样)
Sampling(采样)表示处理,实际上就是让采样数据能够完全表示原始信号,且采样数据能够通过重构还原成原始信号的过程。

 


蓝色曲线:表示音频原始信号。
黑色垂直线段:表示当前时间点对原始信号的一次采样
黑色点:表示采样获取的一系列离散样本。
4. 采样率(Sample rate)
采样率(Sample rate)表示每秒采样的数量(单位:Hz)。

对于PCM编码音频流,采样率是恒定的。例如:1Hz表示每秒钟对原始信号采样一次,1KHz表示每秒钟采样1000次。

根据场景的不同,采样率也有所不同,采样率越高,声音的还原程度越高,质量就越好,同时占用空间会变大。

例如:通话时的采样率为8KHz,常用的媒体采样率有44KHz、48KHz,对于一些蓝光影片采样率高达1MHz。


5. Quantization(量化)
原始信号采样后,需要通过量化来描述采样数据的大小。

量化处理过程,就是将时间连续的信号,处理成时间离散的信号,并用实数表示。这些实数将被转换为二进制数用于模拟信号的存储和传输。


上面的图片的例子是16bit位深量化过程。bit-depth(位深):用来描述存储数字信号值的bit数,较常用的模拟信号位深如下:

 8-bit:2^8 = 256 levels,有256个等级可以用于衡量真实的模拟信号。
16-bit:2^16 = 65,536 levels,有65,536个等级可以用于衡量真实的模拟信号。
24-bit:2^24 = 16,666,216 levels,有16,666,216个等级可以用于衡量真实的模拟信号。
可以看到,位深越大,对模拟信号的描述将越真实,对声音的描述更加准确。

下面是实际的采样率44.1KHz 16bit双声道正弦波1KHz的PCM音频数据,量化后存储的数据和波形解析如下:


???问题:为什么一个正弦波周期量化是44个数据???

 分析:
1次采样需要的时间:1秒/采样率44.1KHz = 1 / 44100 (秒)
1个正弦波周期时间:1秒/频率1KHz = 1 / 1000 (秒)
1个正弦波周期采样次数:`1个正弦波周期时间 / 1次采样需要的时间 = (1 / 1000) / (1 / 44100) = 44100 / 1000 = 44.1次
结果:如上图显示一个正弦波周期,采样的次数为44次。

备注: 量化会将波形分成多个等份,值越大对模拟信号描述越真实。采样率是1秒钟采样的次数,值越大对声音的还原程度越高。所以,声音的质量很大程度被量化和采样率所影响。

6. Encoding(编码)

在编码这一步,我们会将时间线上的每个sample数据转化为对应的二进制数据。

采样数据经过编码后产生的二进制数据,就是PCM数据。PCM数据可以直接存储在介质上,也可以在经过编解码处理后进行存储或传输。

7. PCM数据常用量化指标
采样率(Sample rate):每秒钟采样多少次,以Hz为单位。

位深度(Bit-depth):表示用多少个二进制位来描述采样数据,一般为16bit。

字节序:表示音频PCM数据存储的字节序是大端存储(big-endian)还是小端存储(little-endian),为了数据处理效率的高效,通常为小端存储。

声道数(channel number):当前PCM文件中包含的声道数,是单声道(mono)、双声道(stereo)等。

采样数据是否有符号(Sign):要表达的就是字面上的意思,需要注意的是,使用有符号的采样数据不能用无符号的方式播放。

8. PCM音频数据存储格式
PCM音频数据排列格式为左右声道每个样本点数据交错排列。

下面是解析一个16bit双声道PCM的数据,如下:

实际解析的出来的PCM波形如下:

从波形上分析1声道为无声。
从数据上分析1声道,-7(0xFFF9)、-3(0xFFFD)、-5(0xFFFB)等基本接近0,所以为无声。

《I2S传输PCM音频数据分析总结》主要是介绍PCM音频数据是如何通过I2S进行传输的,主要是分成2个部分:

PCM音频数据介绍
I2S协议介绍
上一篇文章已经有介绍PCM音频数据,本篇文章主要是以I2S协议来介绍。

2. I2S 简介
Inter-IC Sount Bus(I2S)是飞利浦半导体公司(现为恩智浦半导体公司)针对数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的 I2S 标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。

3. I2S 特点
I2S总线只处理音频数据,而其它控制信号,是分开传输的。在比较常用的CODEC音频芯片基本都是I2S和I2C搭配,I2S传输音频数据,I2C传输命令控制。主要特点如下:

支持全双工/半双工:全双工是需要2个Data线,半双工是1个Data线
支持主/从模式:主模式需要提供I2S通信的SCK和WS信号。
I2S支持多声道数据传输:通过WS信号控制声道的选择。
下面是《I2S bus specification》协议文档里面的截图,它是典型I2S信号时序图,产生SCK和WS的信号端就是主设备,用MASTER表示,具体如下:

根据上图我们可以知道I2S总线一个是三条数据信号线:

BCLK:串行时钟,也叫位时钟,对应数字音频的每一位数据。对应数字音频的每一位数据,SCK都有1个脉冲。SCK的频率=2×采样频率×采样位数。
WS:字段(声道)选择,帧时钟LRCK(左右时钟),用于选择左右声道。为“0”表示正在传输的是左声道的数据, 为“1”表示正在传输的是右声道的数据。用于切换左右声道的数据。WS的频率=采样频率。
SD:串行数据,用二进制补码来表示音频数据(数据传输从高位到低位)。
I2S总线半双工是3条数据线,但是全双工是4条数据线。下面的截图是WM8978 CODEC音频编解码器芯片,它采用全双工4条数据线I2S接口,并且通过I2C接口进行控制。(备注:后面还会有一篇专门介绍WM8978的驱动移植)


4. I2S总线时序图
音频协议目前主要有4种标准,总体遵循I2S总线协议,但是细节有一些差异:

 I2S Philips 标准
MSB 对齐标准
LSB 对齐标准
PCM 标准

4.1 I2S Philips 标准
使用 WS 信号来指示当前正在发送的数据所属的通道。该信号从当前通道数据的第一个位(MSB) 之前的一个时钟开始有效。I2S模式属于左对齐中的一种特例,也叫PHILIPS模式是由标准左对齐格式再延迟一个时钟位变化来的。时序如图7所示,左声道的数据MSB在WS下降沿之后第二个SCK/BCLK上升沿有效,右声道数据的MSB在WS上升沿之后第二个SCK/BCLK上升沿有效。

发送方在时钟信号 (CK) 的下降沿改变数据,接收方在上升沿读取数据。WS 信号也在 CK 的下降沿变化。

举例:下面是在播放采样率44.1KHz 16bit双声道正弦波1KHz的PCM音频数据时,用逻辑分析仪抓取的I2S数据,具体如下:

 下面时序图显示了如何发送一个24bit的音频数据,24bit高位先发送,剩余8bit强制清零。因为一般CPU是字(32Bit)对齐方式,所以这里设计时将剩余的8bit用0来填充:


4.2 MSB 对齐标准
MSB标准同时生成 WS 信号和第一个数据位(即 MSBit)。这里和 I2S Philips 标准存在的差异,如图所示:

 

发送方在时钟信号的下降沿改变数据;接收方在上升沿读取数据

下面MSB标准时序图显示了如何发送一个24bit的音频数据,和前面一样,24bit高位先发送,剩余8bit强制清零。

4.3 LSB 对齐标准
该标准与 MSB 对齐标准类似(对于 16 位和 32 位全精度帧格式,没有任何不同)

 下面是LSB标准时序图显示了如何发送一个24bit的音频数据,因为是LSB左对齐,所以高8bit强制清零先发送,然后24bit有效数据从高位再发送。


4.4 PCM 标准
对于 PCM 标准,无需使用通道信息。有两种 PCM 模式:短帧和长帧。

对于长帧同步,在主模式下会将 WS 信号持续 13 个周期。
对于短帧同步,WS 同步信号的持续时间仅为一个周期。

9.参考资料
What is PCM Audio?
https://samplerateconverter.com/educational/pcm-audio#how-pcm-works

PCM数据格式介绍
https://blog.csdn.net/qq_25333681/article/details/90682989
 

猜你喜欢

转载自blog.csdn.net/u010783226/article/details/130849054