数字音频基本知识 | 数字音频接口

注:本文为 “数字音频基本知识 | 数字音频接口” 相关文章合辑。

未整理去重。


音频基本知识介绍

00 行者无疆 于 2018-05-08 15:02:07 发布

1 概述

什么是立体声?

什么是 TDM 模式?

什么是短帧模式,什么是长帧模式,什么是 slot?

什么是 BCLK, 什么是采样频率?

如果这些音频中的基本概念,你都清楚,那么这个文档就不用看了。

此文档编写的目的是针对音频入门中的基本概念的解释及介绍.

数字音频接口 DAI, 即 Digital Audio Interfaces. 传统的音频信号链路如下图所示:

img

图 1 传统的音频信号链路

在传统的音频电路(图 1)中有麦克风、前置放大器、模 / 数转换器 ADC、数 / 模转换器 DAC、输出放大器,以及扬声器,它们之间使用模拟信号连接。随着技术的发展和对性能考虑,模拟电路逐渐被推到链路的两端(集成到设备内部),信号链中各集成电路间将出现更多的数字接口形式。DSP 通常都是数字接口的;换能器、放大器一般而言只有模拟接口,但现在也正在逐渐集成数字接口功能。目前,集成电路设计人员正在将换能器内的 ADC、DAC 和调制器集成到信号链一端,这样就不必在 PCB 上走任何模拟音频信号,并且减少了信号链中的器件数量。

回到开始提的问题,什么是立体声?

立体声就是前端有多个音频采集设备,从多个角度采集音频数据,将数据放到不通的通道上。例如采集是 8KHz (每秒采集 8000 个点), 位宽 16bit (每个点用 16 个 bit 位量化), 假设有三个通道,那我们每秒需要传输的 bit 数据为 8K 16 3 bit. 这个数据就是我们的 BCLK, 8K 可以理解为 FS, 选择哪个声道的数据。这三个声道采集的数据就是立体声了。下文会对时钟及数据格式做更进一步的阐述.。

2 I2S 接口介绍

2.1 I2S 简介

I2S 全称 Inter-IC Sound, Integrated Interchip Sound,或简写 IIS,是飞利浦在 1986 年定义(1996 年修订)的数字音频传输标准,用数字音频数据在系统内部器件之间传输,例如编解码器 CODEC、DSP、数字输入 / 输出接口、ADC、DAC 和数字滤波器等。I2S 是比较简单的数字接口协议,没有地址或设备选择机制。在 I2S 总线上,只能同时存在一个主设备和发送设备。主设备可以是发送设备,也可以是接收设备,或是协调发送设备和接收设备的其它控制设备。在 I2S 系统中,提供时钟(SCK 和 WS)的设备为主设备。图 2 是常见的 I2S 系统框图。在高端应用中,CODEC 经常作为 I2S 的主控设备以精确控制 I2S 的数据流

img

图 2 常见 I2S 系统框图

I2S 包括两个声道(Left/Right)的数据,在主设备发出声道选择 / 字选择(WS)控制下进行左右声道数据切换。通过增加 I2S 接口的数目或其它 I2S 设备可以实现多声道(Multi-Channels)应用

2.2 信号及时钟 ( BCLK,SCLK, MCLK, WCLK)

在 I2S 传输协议中,数据信号、时钟信号以及控制信号是分开传输的。I2S 协议只定义三根信号线:时钟信号 SCLK、数据信号 SD 和左右声道选择信号 WS。

・ 时钟信号 Serial Clock

SCLK 是模块内的同步信号,从模式时由外部提供,主模式时由模块内部自己产生。不同厂家的芯片型号,时钟信号叫法可能不同,也可能称 BCLK/Bit Clock 或 SCL/Serial Clock

・ 数据信号 Serial Data

SD 是串行数据,在 I2S 中以二进制补码的形式在数据线上传输。在 WS 变化后的第一个 SCK 脉冲,先传输最高位(MSB,Most Significant Bit)。先传送 MSB 是因为发送设备和接收设备的字长可能不同,当系统字长比数据发送端字长长的时候,数据传输就会出现截断的现象 / Truncated,即如果数据接收端接收的数据位比它规定的字长长的话,那么规定字长最低位(LSB: Least Significant Bit)以后的所有位将会被忽略。如果接收的字长比它规定的字长短,那么空余出来的位将会以 0 填补。通过这种方式可以使音频信号的最高有效位得到传输,从而保证最好的听觉效果。

√ 根据输入或输出特性,不同芯片上的 SD 也可能称 SDATA、SDIN、SDOUT、DACDAT、ADCDAT 等;

√ 数据发送既可以同步于 SCK 的上升沿,也可以是下降沿,但接收设备在 SCK 的上升沿采样,发送数据时序需考虑

・左右声道选择信号 Word Select

WS 是声道选择信号,表明数据发送端所选择的声道。当:

√ WS=0,表示选择左声道

√ WS=1,表示选择右声道

WS 也称帧时钟,即 LRCLK/Left Right Clock。WS 频率等于声音的采样率。WS 既可以在 SCK 的上升沿,也可以在 SCK 的下降沿变化。从设备在 SCK 的上升沿采样 WS 信号。数据信号 MSB 在 WS 改变后的第二个时钟(SCK)上升沿有效(即延迟一个 SCK),这样可以让从设备有足够的时间以存储当前接收的数据,并准备好接收下一组数据。

Master Clock

在 I2S/PCM 接口的 ADC/DAC 系统中,除了 SCK 和 WS 外,CODEC 经常还需要控制器提供 MCLK (Master Clock),这是由 CODEC 内部基于 Delta-Sigma (Δ∑) 的架构设计要求使然。MCLK 时钟频率一般为 256 WS,具体参考特定器件手册。

Delta-Sigma (Δ∑) 的架构设是什么?

2.3 I2S 操作模式

根据 SD 相对于 SCK 和 WS 位置的不同,I2S 分为三种不同的操作模式,分别为标准 I2S 模式、左对齐模式和右对齐模式:

・I2 Phillips Standard I2S 格式

・Left Justified Standard 左对齐格式

・Right Justified Standard 右对齐格式

I2S 模式属于左对齐中的一种特例,也叫 PHILIPS 模式,是由标准左对齐格式再延迟一个时钟位变化来的。时序如图 3 所示,左声道的数据 MSB 在 WS 下降沿之后第二个 SCK/BCLK 上升沿有效,右声道数据的 MSB 在 WS 上升沿之后第二个 SCK/BCLK 上升沿有效。

img

图 3 I2S PHILIPS 模式

标准左对齐较少使用,图 4 为左对齐时序图,和 PHILIPS 格式(图 3)对比可以看出,标准左对齐格式的数据的 MSB 没有相对于 BCLK 延迟一个时钟。左对齐格式的左声道的数据 MSB 在 WS 上升沿之后 SCK/BCLK 的第一个上升沿有效;右声道的数据 MSB 在 WS 下降沿之后 SCK/BCLK 第一个上升沿有效。标准左对齐格式的优点在于,由于在 WS 变化后的第一个 SCK 上升沿就开始采样,它不需要关心左右声道数据的字长,只要 WS 的时钟周期足够长,左对齐的方式支持 16-32bit 字长格式。

img

图 4 左对齐操作模式

标准右对齐也叫日本格式,EIAJ (Electronic Industries Association of Japan) 或 SONY 格式,图 5 为右对齐时序图。右对齐格式左声道的数据 LSB 在 WS 下降沿的前一个 SCK/BCLK 上升沿有效,右声道的数据 LSB 在 WS 上升沿的前一个 SCK/BCLK 上升沿有效。相比于标准左对齐格式,标准右对齐的不足在于接收设备必须事先知道待传数据的字长。这也解释了为什么许多 CODEC 都会提供多种右对齐格式选择功能。

img
图 5 左对齐操作模式

SCLK 的计算:

采样频率为 8K Hz, 声道选择信号也必须为 8K Hz, 声道的量化深度为 16bit, 则:SCK = 8K 2 16.SCLK 又称 BCLK 即每一个 bit 位都需要一个时钟.

3 PCM 接口

3.1 PCM 简介

PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法。图 6 为 4 bit 采样深度的 PCM 数据量化示意图。

img

图 6 4-bit PCM 的采样量化

PCM 数字音频接口,即说明接口上传输的音频数据通过 PCM 方式采样得到的。在音频领域,PCM 接口常用于板级音频数字信号的传输,与 I2S 相似。PCM 和 I2S 的区别于数据相对于帧时钟(FSYNC/WS)的位置、时钟的极性和帧的长度。其实,I2S 上传输的也是 PCM 类型的数据,因此可以说 I2S 不过 PCM 接口的特例。相比于 I2S 接口,PCM 接口应用更加灵活。通过时分复用(TDM,Time Division Multiplexing)方式,PCM 接口支持同时传输多达 N 个(N>8)声道的数据,减少了管脚数目(实际上是减少 I2S 的 “组” 数,因为每组 I2S 只能传输两声道数据嘛)。TDM 不像 I2S 有统一的标准,不同的 IC 厂商在应用 TDM 时可能略有差异,这些差异表现在时钟的极性、声道配置触发条件和对闲置声道的处理等。一般在应用 PCM 音频接口传输单声道数据(如麦克风)时,其接口名称为 PCM;双声道经常使用 I2S;而 TDM 则表示传输两个及以上声道的数据,同时区别于 I2S 特定的格式。

3.2 信号及时钟

PCM 接口与 I2S 相似,电路信号包括:

・PCM_CLK 数据时钟信号

・PCM_SYNC 帧同步时钟信号

・PCM_IN 接收数据信号

・PCM_OUT 发送数据信号

根据有效数据相对帧同步时钟 FSYNC 的位置,TDM 分两种基本模式:

・Mode A: 数据在 FSYNC 有效后,BCLK 的第 2 个上升沿有效(图 7)

・Mode B: 数据在 FSYNC 有效后,BCLK 的第 1 个上升沿有效(图 8)

img

图 7 TDM Mode A

img

图 8 TDM Mode B

・长帧同步 Long Frame Sync

・短帧同步 Short Frame Sync

长帧同步,短帧同步时序模式如下图 9 和图 10 所示。

注:

a. 长帧同步,如图 9 所示,FSYNC 脉冲宽度等于 1 个 Slot 的长度。Slot 在 TDM 中表示的是传输单个声道所占用的位数。如图 9 所示 TI McASP 接口的 TDM 包括 6 个 Slots,即它最多可包括 6 声道数据。注意,slot 的位数并不一定等于音频的量化深度。比如 Slot 可能为 32 bit,其中包括 24 bit 有效数据位(Audio Word) + 8 bit 零填充(Zero Padding)。不同厂商对 slot 叫法可能有所区别,比如 Circus Logic 称之为 Channel Block;

img

图 9 长帧同步模式

b. 短帧同步,FSYNC 脉冲宽度等于 1 个 BCLK 周期长度;

img

图 10 短帧同步模式

c. 由于没有统一标准,不同厂商对 FSYNC 脉冲宽度及触发边沿的设置可能不同,以器件手册为准。

3.3 数据格式

在 PCM/TDM 传输的数据帧(Slots)中,可能还包括音频数据之外的信息。比如在 CSR BC06 器件 Datasheet 说明,其设置为 16 bit Slot 字长时,3 或 8 bit 未使用 bit 可以用作标签位(Sign Extension)、零填充(Zeros Padding)或是兼容 Motorola 编解码器的 3 bit 音频衰减值,如图 11 所示。

img
图 11. 16-bit 位采样字格式

4 音频中常见问题定位

4.1 codec 给 voip 发数据,voip 接受不到

Pcm 数据发送的时候,SYNC 信号过后,第几个 BCLK 开始为有效数据很重要,接收端要精确匹配才能收到数据.

例如,codec 端 pcm 数据移了一位,那接收数据端就要跟着移一位或者两位。具体移几位要看发送端的 TDM 模式了,见 3.2 节 TDM 的两张基本模式。


数字音频接口 (I2S,PCM/TDM,PDM)

背包旅行码农于 2021-12-08 15:57:18 发布

概述

数字音频接口 DAI ,即 Digital Audio Interfaces,顾名思义,DAI 表示在板级或板间传输数字音频信号的方式。相比于模拟接口,数字音频接口抗干扰能力更强,硬件设计简单,DAI 在音频电路设计中得到越来越广泛的应用。图 1 和图 2 对比传统的音频信号和数字音频信号链的区别。

在传统的音频电路(图 1)中有麦克风、前置放大器、模 / 数转换器 ADC、数 / 模转换器 DAC、输出放大器,以及扬声器,它们之间使用模拟信号连接。随着技术的发展和对性能考虑,模拟电路逐渐被推到链路的两端(集成到设备内部),信号链中各集成电路间将出现更多的数字接口形式。DSP 通常都是数字接口的;换能器(Transducers, i.e. Mic & Speaker)、放大器一般而言只有模拟接口,但现在也正在逐渐集成数字接口功能。 目前,集成电路设计人员正在将换能器内的 ADC、DAC 和调制器集成到信号链一端,这样就不必在 PCB 上走任何模拟音频信号,并且减少了信号链中的器件数量。图 2 给出了一个完整数字音频接口的例子。

img

图 1. 传统的音频信号链路

img

图 2. 数字音频信号链路

数字音频信号的传输标准,如 I2S 、 PCM (Pulse Code Modulation) 和 PDM (Pulse Density Modulation) 主要用于同一块电路板上芯片之间音频信号的传输; Intel HDA (Intel High Definition Audio) 用于 PC 的 Audio 子系统(声卡)应用; S/PDIF 和 Ethernet AVB 主要应用于板间长距离及需要电缆连接的场合。

本文主要介绍 I2S, PCM 和 PDM 数字音频接口,主要它们是板内接口比较常用。

I2S 接口

1. I2S 简介

I 2S 全称 Inter-IC Sound , Integrated Interchip Sound ,或简写 IIS ,是飞利浦在 1986 年定义(1996 年修订)的数字音频传输标准,用于数字音频数据在系统内部器件之间传输,例如编解码器 CODEC、DSP、数字输入 / 输出接口、ADC、DAC 和数字滤波器等。除了都是由飞利浦定义外,I2S 和 I2C 没有任何关系。

I2S 是比较简单的数字接口协议,没有地址或设备选择机制。在 I2S 总线上, 只能同时存在一个主设备和发送设备 。主设备可以是发送设备,也可以是接收设备,或是协调发送设备和接收设备的其它控制设备。在 I2S 系统中,提供时钟(SCK 和 WS)的设备为主设备。图 3 是常见的 I2S 系统框图。在高端应用中,CODEC 经常作为 I2S 的主控设备以精确控制 I2S 的数据流。

img

图 3 I2S 系统通信配置框图

I2S 包括两个声道(Left/Right)的数据,在主设备发出声道选择 / 字选择(WS)控制下进行左右声道数据切换。通过增加 I2S 接口的数目或其它 I2S 设备可以实现多声道(Multi-Channels)应用。

在 I2S 传输协议中,数据信号、时钟信号以及控制信号是分开传输的。I2S 协议只定义 三根 信号线:时钟信号 SCK 、数据信号 SD 和左右声道选择信号 WS 。

  • 时钟信号 Serial Clock

SCK 是模块内的同步信号, 从模式 时由外部提供, 主模式 时由模块内部自己产生。不同厂家的芯片型号,时钟信号叫法可能不同,也可能称 BCLK/Bit Clock 或 SCL/Serial Clock

  • 数据信号 Serial Data

SD 是串行数据,在 I2S 中以 二进制补码 的形式在数据线上传输。在 WS 变化后的第一个 SCK 脉冲,先传输最高位( MSB , Most Significant Bit)。先传送 MSB 是因为发送设备和接收设备的字长可能不同,当系统字长比数据发送端字长长的时候,数据传输就会出现截断的现象 / Truncated,即如果数据接收端接收的数据位比它规定的字长长的话,那么规定字长最低位(LSB: Least Significant Bit)以后的所有位将会被忽略。如果接收的字长比它规定的字长短,那么空余出来的位将会以 0 填补。通过这种方式可以使音频信号的最高有效位得到传输,从而保证最好的听觉效果。

√ 根据输入或输出特性,不同芯片上的 SD 也可能称 SDATA、SDIN、SDOUT、DACDAT、ADCDAT 等;
√ 数据发送既可以同步于 SCK 的上升沿,也可以是下降沿,但接收设备在 SCK 的上升沿采样,发送数据时序需考虑
  • 左右声道选择信号 Word Select

WS 是声道选择信号,表明数据发送端所选择的声道。当:

√ WS=0,表示选择左声道
√ WS=1,表示选择右声道

WS 也称 帧时钟 ,即 LRCLK/Left Right Clock。WS 频率等于声音的采样率。WS 既可以在 SCK 的上升沿,也可以在 SCK 的下降沿变化。从设备在 SCK 的上升沿采样 WS 信号。数据信号 MSB 在 WS 改变后的第二个时钟(SCK)上升沿有效(即延迟一个 SCK),这样可以让从设备有足够的时间以存储当前接收的数据,并准备好接收下一组数据。

img

图 4 I2S 时序图

3. I2S 操作模式

根据 SD 相对于 SCK 和 WS 位置的不同,I2S 分为三种不同的操作模式,分别为标准 I2S 模式、左对齐模式和右对齐模式:

  • I2S Phillips Standard I2S 格式

  • Left Justified Standard 左对齐格式

  • Right Justified Standard 右对齐格式

I2S 模式 属于左对齐中的一种特例,也叫 PHILIPS 模式,是由标准左对齐格式再 延迟一个时钟位 (delay one clock) 变化来的。时序如图 5 所示,左声道的数据 MSB 在 WS 下降沿之后第二个 SCK/BCLK 上升沿有效,右声道数据的 MSB 在 WS 上升沿之后第二个 SCK/BCLK 上升沿有效。

img

图 5. I2S PHILIPS 操作模式

标准左对齐 较少使用,图 6 为左对齐时序图,和 PHILIPS 格式(图 5)对比可以看出,标准左对齐格式的数据的 MSB 没有相对于 BCLK 延迟一个时钟。左对齐格式的左声道的数据 MSB 在 WS 上升沿之后 SCK/BCLK 的第一个上升沿有效;右声道的数据 MSB 在 WS 下降沿之后 SCK/BCLK 第一个上升沿有效。标准左对齐格式的优点在于,由于在 WS 变化后的第一个 SCK 上升沿就开始采样,它不需要关心左右声道数据的字长,只要 WS 的时钟周期足够长,左对齐的方式支持 16-32bit 字长格式。

img

图 6. 左对齐操作模式

标准右对齐 也叫日本格式,EIAJ (Electronic Industries Association of Japan) 或 SONY 格式,图 7 为右对齐时序图。右对齐格式左声道的数据 LSB 在 WS 下降沿的前一个 SCK/BCLK 上升沿有效,右声道的数据 LSB 在 WS 上升沿的前一个 SCK/BCLK 上升沿有效。相比于标准左对齐格式,标准右对齐的不足在于接收设备必须事先知道待传数据的字长。这也解释了为什么许多 CODEC 都会提供多种右对齐格式选择功能。

img

图 7. 右对齐操作模式

以上不同 I2S 对齐方式时序图来源,详见链接 TI CODEC 器件手册

注 :

标准左对齐和标准右对齐模式的 LRCK/WS 高低电平对应的左右声道与标准 I2S 模式的规定恰好相反!标准左右对齐 LRCK/WS 高电平对应左声道,LRCK/WS 低电平对应右声道;而 I2S 低电平对应左声道,LRCK/WS 高电平对应右声道!

4 . I2S 数据时钟(SCK)频率计算

例如:设声音的 采样频率 为 44.1 kHz,即声道选择信号(帧时钟)WS 的频率必须也为 44.1 kHz;左 / 右 2 个声道的量化深度均为 16 bit,则 I2S 的 SCK 的频率为:44.1 kHz×16×2=1.4112 MHz

如果需要传输 20 bit、24 bit 或 32 bit 的左右声道的数据,可以提高 SCK 的频率,由上式可以计算出需要的 SCK 的频率。

5. Master Clock

在 I2S/PCM 接口的 ADC/DAC 系统中,除了 SCK 和 WS 外,CODEC 经常还需要控制器提供 MCLK (Master Clock),这是由 CODEC 内部基于 Delta-Sigma (ΔΣ) 的架构设计要求使然。其主要原因是因为这类的 CODEC 没有所谓提供芯片的工作时钟晶振电路。它需要外部的时钟提供内部 PLL。

如图 8 和图 9 所示:

img

图 8 wolfson WM8960 Stereo AUdio CODEC 芯片框图

img

图 9 WM8960 时钟框图

PCM 接口

1. PCM 简介

PCM (Pulse Code Modulation) 脉冲编码调制是将模拟信号数字化的方法。原理是用一个固定的频率对模拟信号进行采样,采样后的信号在波形上看就像一串连续的幅值不一的脉冲 (脉搏似的短暂起伏的电冲击),把这些脉冲的幅值按一定精度进行量化,这些量化后的数值被连续的输出、传输、处理或记录到存储介质中,所有这些组成了数字音频的产生过程 (抽样、量化、编码三个过程)。图 11 为 4 bit 采样深度的 PCM 数据量化示意图。

img

图 10. 4-bit PCM 的采样量化

PCM 数字音频接口,即说明接口上传输的音频数据通过 PCM 方式采样得到的,以区别于 PDM 方式。在音频领域,PCM 接口常用于板级音频数字信号的传输,与 I2S 相似。PCM 和 I2S 的区别于数据相对于帧时钟(FSYNC/WS)的位置、时钟的极性和帧的长度。其实,I2S 上传输的也是 PCM 类型的数据,因此可以说 I2S 不过是 PCM 接口的特例。

相比于 I2S 接口,PCM 接口应用更加灵活。通过时分复用(TDM, Time Division Multiplexing)方式,PCM 接口支持同时传输多达 N 个(N>8)声道的数据,减少了管脚数目(实际上是减少 I2S 的 “组” 数,因为每组 I2S 只能传输两声道数据嘛)。TDM 不像 I2S 有统一的标准,不同的 IC 厂商在应用 TDM 时可能略有差异,这些差异表现在时钟的极性、声道配置的触发条件和对闲置声道的处理等。

TDM/PCM 数字音频接口的硬件拓扑结构也与 I2S 相近。图 12 表示应用 DSP 作为主设备控制 ADC 和 DAC 间数字音频流的例子。

综合不少厂商的数据手册,笔者发现,在应用 PCM 音频接口传输单声道数据(如麦克风)时,其接口名称为 PCM ;双声道经常使用 I2S ;而 TDM 则表示传输两个及以上声道的数据,同时区别于 I2S 特定的格式。

img

图 11. TDM 系统框图

2. 信号定义

PCM 接口与 I2S 相似,电路信号包括:

  • PCM_CLK 数据时钟信号

  • PCM_SYNC 帧同步时钟信号

  • PCM_IN 接收数据信号

  • PCM_OUT 发送数据信号

TDM/PCM 与 I2S 接口对应关系见表 1:

PCM 接口I2S 接口
PCM_OUTSD_OUT
PCM_INSD_IN
PCM_SYNCWS
PCM_CLKSCK

表 1. PCM vs I2S 接口

3. 操作模式

根据 SD 相对帧同步时钟 FSYNC 的位置,TDM 分 两种 基本模式:

  • Mode A: 数据在 FSYNC 有效后,BCLK 的第 2 个上升沿有效 (one clock delay)(图 12)

  • Mode B: 数据在 FSYNC 有效后,BCLK 的第 1 个上升沿有效 (no delay)(图 13)

img

图 12. TDM Mode A

img

图 13. TDM Mode B

注 :

由于没有统一标准,不同厂商对 Mode A 和 Mode B 定义可能有所差别。

在实际应用中,总是以帧同步时钟 FSYNC 的上升沿表示一次传输的开始。帧同步时钟的频率总是等于音频的采样率,比如 44.1 kHz,48 kHz 等。多数应用只用到 FSYNC 的上升沿,而忽略其下降沿。根据不同应用 FSYNC 脉冲宽度的差别,PCM 帧同步时钟模式大致分为两种:

  • 长帧同步 Long Frame Sync

  • 短帧同步 Short Frame Sync

长帧同步,短帧同步时序模式如下图 16 和图 17 所示。

注 :

a . 长帧同步,如图 14 所示,FSYNC 脉冲宽度等于 1 个 Slot 的长度。Slot 在 TDM 中表示的是传输单个声道所占用的位数。如图 15 所示 TI McASP 接口的 TDM 包括 6 个 Slots,即它最多可包括 6 声道数据。注意,Slot 的位数并不一定等于音频的量化深度。比如 Slot 可能为 32 bit ,其中包括 24 bit 有效数据位(Audio Word) + 8 bit 零填充(Zero Padding)。不同厂商对 Slot 的叫法可能有所区别,比如 Circus Logic 称之为 Channel Block;

img

图 14. 长帧同步模式

b . 短帧同步,FSYNC 脉冲宽度等于 1 个 BCLK 周期长度;

c . 由于没有统一标准,不同厂商对 FSYNC 脉冲宽度及触发边沿的设置可能不同,以器件手册为准。

img

图 15. 8-bit 长帧同步模式

img

图 16. 16-bit 短帧同步模式

关于长短帧同步、MSB/LSB 和量化深度的区别,对应的 PCM 时序模式,请参考附件 CSR BC06 工具:pcmconfigv2_1 通过这个工具很容易理解这些变量的含义。

4. 模式设置

通过 寄存器 或者 管脚电平 设置,可以配置 CODEC 的 DAI 工作在不同的操作模式。以 AKM 的 24bit 4ch DAC AK4413 为例,如表 3 所示,通过设置 TDM [1:0] 和 DIF [2:0] 等 5 个寄存器的值,可以选择其 SDT1 接口工作于 20 种不同模式,在 Datasheet 中详细说明了每种模式的时序框图。

img

表 2. 数字音频接口模式选择

5. 时钟(BCLK)频率的计算

FSYNC 的频率等于音频的采样率(例如 44.1 kHz,48 kHz 等)。Frame 每次传输包括所有声道的数据。PCM 采样音频数据量化深度一般在 16-32bit(最常见为 16/24bit)。那么对于 8 声道,每个声道 32bit 音频数据,采样率 48kHz 的系统,TDM 的系统时钟速率为:8 × 32 × 48kHz = 12.288 MHz

在器件 Datasheet 中可以见到 TDM 128 /TDM 256 /TDM 384 /TDM 512 等说法,数字的含义为单个 TDM 数据帧包含数据的比特数(即帧长)。如上例 8 声道(Channels)32bit 的音频数据,亦称为 TDM 256 (=8 32)。TDM 系统时钟速率就可以简单地用采样率乘以 TDM 帧长计算得出。相同的例子,TDM 系统时钟速率:48kHz × 256 = 12.288 MHz

下表 3 列出系统时钟 SCK/BCLK 和采样率 fs 及 TDM 帧长的关系:

img

表 3. 常见音频采样率对应的系统时钟

PDM 接口

PDM (Pulse Density Modulation)是一种用数字信号表示模拟信号的调制方法。同为将模拟量转换为数字量的方法, PCM 使用等间隔采样方法,将每次采样的模拟分量幅度表示为 N 位的数字分量(N = 量化深度),因此 PCM 方式每次采样的结果都是 N bit 字长的数据。 PDM 则使用远高于 PCM 采样率的时钟采样调制模拟分量,只有 1 位输出,要么为 0,要么为 1。因此通过 PDM 方式表示的数字音频也被称为 Oversampled 1-bit Audio。相比 PDM 一连串的 0 和 1, PCM 的量化结果更为直观简单。

在以 PDM 方式作为模数转换方法的应用接收端,需要用到抽取滤波器(Decimation Filter)将密密麻麻的 0 和 1 代表的密度分量转换为幅值分量,而 PCM 方式得到的就已经是幅值相关的数字分量。图 20 示意为通过 PDM 方式数字化的正弦波。

img

图 17. PDM 方式表示的正弦波

PCM 方式的逻辑更加简单,但需要用到数据时钟,采样时钟和数据信号 三根 信号线; PDM 方式的逻辑相对复杂,但它只需要 两根 信号线,即时钟和数据。 PDM 在诸如手机和平板等对于空间限制严格的场合有着广泛的应用前景。在 数字麦克风 领域,应用最广的就是 PDM 接口,其次为 I2S 接口。PDM 格式的音频信号可以在比如 LCD 屏这样 Noise 干扰强的电路附近走线(等于没说,这里指数字信号抗干扰能力相比于模拟信号更强,同样 PCM 也具有此优势)。

通过 PDM 接口方式,传输双声道数据只要用到两根信号线。如图 21 示意两个 PDM 接口的发送设备与同一个接收设备的连接情况,比如 Source 1/2 分别作为左右声道的麦克风,通过这种方式可以将采集到的双声道数据传送到接收设备。主设备(此例中作为接收设备)为两个从设备提供时钟,分别在时钟的上升沿和下降沿触发选择 Source 1/2 作为数据输入。图 22 为 Maxim 的 Class-D 类型功放 MAX98358 对 PDM 接口时序的要求,可以看到它在 PDM_CLK 的上升沿采样左声道数据,在 PDM_CLK 下降沿采样右声道数据。

img

图 18. PDM 连接示意图(2 发送设备 + 1 接收设备)

img

图 19. PDM 时序框图

基于 PDM 的架构不同于 I2S 和 TDM 之处在于,抽取滤波器(Decimation Filter)不在发送设备,而在接收设备内部。源端输出是原始的高采样率(oversample)调制数据,如 Sigma-Delta 调制器的输出,而不是像 I2S 中那样的抽取数据(An I2S output digital microphone includes the decimation filter, so its output is already at a standard audio sample rate that’s easy to interface to and process.)。基于 PDM 接口的应用降低了发送设备的复杂性,由于作为接收设备的 CODEC 内部集成抽取滤波器,因此系统整体复杂度大大降低。对于数字麦克风而言,通过使用面向 CODEC 或处理器制造的更精细硅工艺,而非传统麦克风使用的工艺,可以实现更高效率的抽取滤波器。


I2S/PCM 协议及 TDM 模式详解

雨天不打滑已于 2022-07-24 00:43:25 修改

I2S 协议

概念

I2S (Inter—IC Sound) 总线,又称集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。

特点

  1. 支持半双工 \ 全双工

  2. 支持主从模式

  3. I2S 的变体也支持多通道的时分复用,因此可以支持多声道

信号线

  1. 主时钟 MCLK,也是以上两个时钟的参考时钟,一个系统应该使用同一的 MCLK 以保证时钟同步要求。常见频率 256fs 或 384fs。有时为了使系统间能够更好地同步,当 I2S 配置为主模式(并且 SPI_I2SPR 寄存器中的 MCKOE 位置 1)时,使用此时钟,该时钟输出频率 256×fs,fs 即音频信号采样频率(frequency of sample)

  2. 串行时钟 SCLK,也叫位时钟 BCLK,对应数字音频的每一位数据,该时钟都有一个脉冲。

    sclk = (slot_num slot_bit + 2) bclk //slot 的概念后面补充

  3. 帧时钟 LRCK(也称 WS),用于切换左右声道的数据。LRCK 为 1 表示传输右声道数据,为 0 则是左声道。

    lrck = fs

  4. 输入、输出引脚 DIN、DOUT,就是用二进制补码表示的音频数据

IIS 包括两个声道(Left/Right)的数据,在主设备发出声道选择 / 字选择(WS)控制下进行左右声道数据切换。通过增加 IIS 接口的数目或其它 IIS 设备可以实现多声道(Multi-Channels)应用

操作模式

  1. 标准模式 Phillips Standard

    IIS 模式是标准左对齐格式再延迟一个时钟位变化来的。

    左右通道的数据 MSB 均是在 WS 变化后第二个 SCK/BCLK 上升沿有效。使用 WCLK/LRCLK 信号来指示当前正在发送的数据所属的声道,为 0 时表示左声道数据。LRCLK 信号从当前声道数据的第一个位 (MSB) 之前的一个时钟开始有效。LRCLK 信号在 BCLK 的下降沿变化。发送方在时钟信号 BCLK 的下降沿改变数据,接收方在时钟信号 BCLK 的上升沿读取数据。LRCLK 频率等于采样频率 fs,一个 LRCLK 周期 (1/fs) 包括发送左声道和右声道数据。

    对于这种标准 I2S 格式的信号无论有多少位有效数据,数据的最高位总是出现在 WCLK/LRCK 变化(也就是一帧开始)后的第 2 个 BCLK/SCLK 脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。

时序图如下:

img

  1. 左对齐模式 Left Justified Standard

    标准左对齐格式的数据的 MSB 没有相对于 BCLK 延迟一个时钟。左对齐格式的左右声道数据的 MSB 在 WS 边沿变化后 SCK/BCLK 的第一个上升沿有效。左对齐格式的优点在于,由于在 WS 变化后的第一个 SCK 上升沿就开始采样,它不需要关心左右声道数据的字长

时序图如下:

img

  1. 右对齐模式 Right Justified Standard

    也叫日本格式,sony 格式。相比于标准左对齐格式,标准右对齐的不足在于接收设备必须事先知道待传数据的字长

    时序图如下:

img

注:

标准左对齐和标准右对齐模式的 LRCK/WS 高低电平对应的左右声道与标准 I2S 模式的规定恰好相反

BCLK 和 LRCK 的翻转

以标准 I2S 模式为例,BCLK 在 LRCK 的第一个上升沿开始有效,数据则是在 BCLK 的上升沿开始传输;数据在 BCLK 的上升沿变换,在 BCLK 的下降沿被读取。

TDM 模式

最开始出现的 I2S 只能传输左右两通道的数据,后来为了传输多通道数据,出现了 I2S 的变体,即应用了 TDM(时分复用)模式

协议时序与旧版 I2S 类似,但是出现了 slot(槽)的概念。

slot 是指某个通道的一帧数据

slot_num 是指槽的个数

slot_width 是指一帧数据的位数

一般来说 slot 都为偶数,且音频通道数应小于等于槽数,即 channel ≤ slot_num,同理采样频率应小于等于槽宽度,fs ≤ slot_width

时序图如下:

标准 I2S (standard)

img

左对齐 (left_j)

img

右对齐 (right_j)

img

PCM 协议

PCM 接口和 I2S 接口引脚一致 - 帧同步时钟、位时钟,主要有两种模式:短帧、长帧。

时序图如下:

短帧(dsp_a)

img

长帧(dsp_b)

img

由于没有统一标准,不同厂商对 FSYNC 脉冲宽度及触发边沿的设置可能不同。 如上图:

短帧模式下,帧同步时钟宽度为一个位时钟周期,数据在 FSYNC 有效后,BCLK 的第二个上升沿有效;

长帧模式下,帧同步时钟宽度为两个位时钟周期,数据在 FSYNC 有效后,BCLK 的第一个上升沿有效。

时钟计算 :

短帧:bclk = lrck (slot slot_width + 1)

长帧:bclk = lrck (slot slot_width)


PCM 数据格式介绍

SuperDali于 2019-05-30 00:58:41 发布

PCM 原始音频数据格式介绍

什么是PCM

PCM 全称 Pulse-Code Modulation,翻译一下是脉冲调制编码。

其实大可以不用关心英文释义,之所以这么命名是因为一些历史原因。

在音视频中,PCM 是一种用数字表示采样模拟信号的方法

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

1.Sampling(采样)
2.Quantization(量化)
3.Coding(编码)

通常,我们可以通过一条曲线在坐标中显示连续的模拟信号,如下图所示:
在这里插入图片描述

为了更容易理解 PCM,取其中一段来说明。
在这里插入图片描述
假设这表示一段一秒的音频模拟信号。
在这里插入图片描述

Sampling(采样)

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

将采样后的图拿出来单独解释:
在这里插入图片描述

-红色曲线:表示原始信号。
-蓝色垂直线段:表示当前时间点对原始信号的一次采样。采样是一系列基于振幅(amplitude和相同时间间隔的样本。这也是为什么采样过程被称为 PAM 的原因。
-PAM:(Pulse Amplitude Modulation) 是一系列离散样本之的结果。

采样率 (Sample rate)

每秒钟的样本数也被称之为采样率(Sample rate)。在 Sampling 图示案例中,采样率为每秒 34 次。意味着在一秒的时间内,原始信号被采样了 34 次(也就是蓝色垂直线段的数量)。

通常,采样率的单位用Hz表示,例如1Hz表示每秒钟对原始信号采样一次,1KHz 表示每秒钟采样 1000 次。1MHz 表示每秒钟采样 1 百万次。

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

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

Quantization(量化)

原始信号采样后,需要通过量化来描述采样数据的大小。如图:
在这里插入图片描述

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

在图例中,如果说采样是画垂直线段的话,那么量化就是画水平线,用于衡量每次采样的数字指标。如图:
在这里插入图片描述
图中,每条横线表示一个等级(level)。

为了更好的描述量化过程,先来介绍一下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 个等级可以用于衡量真实的模拟信号。

显而易见,位深越大,对模拟信号的描述将越真实,对声音的描述更加准确。

在当前例子中,如果用为8-bit 位深来描述的话,就如下图所示:
在这里插入图片描述

量化的过程就是将一个平顶样本四舍五入到一个可用最近 level 描述的过程。如图中黑色加粗梯形折线。量化过程中,我们将尽量让每个采样和一个 level 匹配,因为每个 level 都是表示一个 bit 值。

图中,第 9 次采样的平顶样本对应的 level 用十进制表示为 255,也就是二进制的 1111 1111。

Encoding(编码)

在这里插入图片描述

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

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

PCM 数据常用量化指标

采样率 (Sample rate):每秒钟采样多少次,以 Hz 为单位。详见:**采样率 (Sample rate)**一节。

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

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

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

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

以 FFmpeg 中常见的 PCM 数据格式s16le为例:它描述的是有符号 16 位小端 PCM 数据

s 表示有符号,16 表示位深,le 表示小端存储。

PCM数据流

对于PCM数据都是一些图像化的描述,那么一段PCM格式的数据流怎么表示的呢?

以8-bit有符号为例,长得像这样:

+---------+-----------+-----------+----
 binary 	| 0010 0000 | 1010 0000 | ...
 decimal	| 32        | -96       | ...
+---------+-----------+-----------+----

每个分割符 “|” 分割字节。因为是 8-bit 有符号表示的采样数据,所以 采样的范围为 - 128~128

图示中表示的是两个连续采样数据的二进制和十进制表示的值。

如果我们有一个 PCM 文件,在代码中,我们可以通过以下方式来读取这样的 PCM 数据流(Stream)。

FILE *file
int8_t *buffer;
file = fopen("PCM file path");
buffer = malloc(fileSize);
fread(buffer, sizeof(int8_t), fileSize / sizeof(int8_t), file);

伪代码仅仅表示一种加载方式。但在代码中,一开始就将整个文件加载到了内存中,这是不对的。因为我们的音频数据量往往会比较大,一次性全部加载增加了内存负担,而且并不必要。

通常我们会为 buffer 分配一个固定的长度,例如 2048 字节,通过循环的方式一边从文件中加载 PCM 数据,一边播放。

加载好 PCM 数据后,需要送到音频设备驱动程序中播放,这时我们应该能听到声音。与 PCM 数数据一同到达驱动程序的通常还有 采样率(sample rate),用来告诉驱动每秒钟应该播放多少个采样数据。如果传递给驱动程序的采样率大于 PCM 实际采样率,那么声音的播放速度将比实际速度快,反之亦然。

OK,对于 PCM 数据流的存储而言,上面仅仅只是单声道。对于多声道的 PCM 数据而言,通常会交错排列,就像这样:

+---------+-----------+-----------+-----------+-----------+----
     FL 	|     FR    |     FL 	  |     FR    |     FL 	  |    
+---------+-----------+-----------+-----------+-----------+----

对于8-bit有符号的PCM数据而言,上图表示第一个字节存放第一个左声道数据(FL),第二个字节放第一个右声道数据(FL),第三个字节放第二个左声道数据(FL)

不同的驱动程序对于多声道数据的排列方式可能稍有区别,下面是常用的声道排列地图:

2:  FL FR                       (stereo)
3:  FL FR LFE                   (2.1 surround)
4:  FL FR BL BR                 (quad)
5:  FL FR FC BL BR              (quad + center)
6:  FL FR FC LFE SL SR          (5.1 surround - last two can also be BL BR)
7:  FL FR FC LFE BC SL SR       (6.1 surround)
8:  FL FR FC LFE BL BR SL SR    (7.1 surround)

音量控制

音量的表示实际上就是量化过程中每个采样数据的 level 值,只要适当的增大或者缩小采样的 level 就可以达到更改音量的目的。

但需要说明的是,并是不将 level 值 * 2 就能得到两倍于原声音的音量。

因为如下两个原因:

  • 数据溢出:我们都知道每个采样数据的取值范围是有限制的,例如一个 signed 8-bit 样本,取值范围为 - 128~128,值为 125 时,放大两倍后的值为 250,超过了可描述的范围,此时发生了数据溢出。这个时候就需要我们做策略性的裁剪处理,使放大后的值符合当前格式的取值区间。

如下伪代码描述了 signed 8-bit 格式的声音放大两倍的裁剪处理:

int16_t pcm[1024] = read in some pcm data;
int32_t pcmval;
for (ctr = 0; ctr < 1024; ctr++) {
    pcmval = pcm[ctr] * 2;
    if (pcmval < 128 && pcmval > -128) {
        pcm[ctr] = pcmval
    } else if (pcmval > 128) {
        pcm[ctr] = 128;
    } else if (pcmval < -128) {
        pcm[ctr] = -128;
    }
}
  • 对数描述
    平时表示声音强度我们都是用分贝(db)作单位的,声学领域中,分贝的定义是声源功率与基准声功率比值的对数乘以 10 的数值。根据人耳的心理声学模型,人耳对声音感知程度是对数关系,而不是线性关系。人类的听觉反应是基于声音的相对变化而非绝对的变化。对数标度正好能模仿人类耳朵对声音的反应。所以用分贝作单位描述声音强度更符合人类对声音强度的感知。前面我们直接将声音乘以某个值,也就是线性调节,调节音量时会感觉到刚开始音量变化很快,后面调的话好像都没啥变化,使用对数关系调节音量的话声音听起来就会均匀增大。

如下图所示,横轴表示音量调节滑块,纵坐标表示人耳感知到的音量,图中取了两块横轴变化相同的区域,音量滑块滑动变化一样,但是人耳感觉到的音量变化是不一样的,在左侧也就是较安静的地方,感觉到音量变化大,在右侧声音较大区域人耳感觉到的音量变化较小。
在这里插入图片描述

这就需要对音量值的乘数系数合理取值。具体如何取值,请参考非常专业的一篇文章:

采样率调整

采样率的定义为:每秒钟采样次数。而降低增加采样率只需要以固定的频率复制或者丢弃采样数据即可。

如 10Hz 表示每秒钟采样 10 次,我们只需要将 2*n (n 为从 0 开始的值) 处的采样数据舍弃,就可以得到 10/2 = 5Hz 的采样数据。


via:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值