PCM和I2S区别

news2024/12/23 3:08:02

I2S和PCM接口都是数字音频接口,而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口,是不是两个接口有各自不同的应用呢?先来看下概念。
PCM(PCM-clock、PCM-sync、PCM-in、PCM-out)脉冲编码调制,模拟语音信号经过采样量化以及一定数据排列就是PCM了。理论上可以传输单声道,双声道立体声和多声道。是数字音频的raw data。
I2S是音频数字化后数据排列的一种格式,说传输的就是PCM,支持单声道和立体声。
以我理解PCM是一个通称、混称,I2S是对原始PCM进行数据排序处理,本质就是PCM,可以说I2S是PCM的子集。所以我想蓝牙芯片上的PCM接口同样可以用I2S来传输。CPU和codec上的PCM和I2S接口也是为支持更多硬件提供的资源。
从系统上讲,cpu的dsp出来的都是pcm信号,我称PCM_father,送到DAC可从speaker等放出,至PCM接口出来PCM_son1,至I2S接口出来PCM_son2,然后送至外部codec或其他外设,通话DAC I2S DAC分别对应。以前一直我有个误解,其实手机里常用的codec也就是对PCM和模拟声音信号的转换,不能解码mp3等压缩编码,这个还是要专用dsp或者软件解码来做的。
一点新知,理解上肯定还是有错误,以后慢慢积累,温故知新。

新的理解:
一般手机cpu到蓝牙的通话实时音频和mp3之类的音频都使用pcm,有的蓝牙芯片内置MP3codec,mp3走uart/usb更合适。

从蓝牙角度讲,蓝牙在制定协议的时候就特意为通话需求制定了一个协议层,专门定义了一种包结构(sco)用于通话,有很好的实时性。而通过uart传输的包一般为alc,用分组传输的方式。两种包的编解使用的软硬件都有些区别。sco包支持的基础码率也是8k的pcm.所以一般蓝牙芯片都会有一个pcm接口。

PCM和I2S最明显的一个不同就是PCM_SYNC信号和LRCLK信号这两个复用的pin
PCM_SYNC用来同步帧,有long fram sync和short frame sync等模式,但并不专门区分左右声道。
而I2S中,这个pin叫做LRCLK,专门用来区分左右声道,以此来同步。低电平代表左声道,高电平代表右声道。

同时,时钟的上升沿和下降沿哪个是输入采样和输出,在PCM和I2S是不同的,I2S还有自己特定的格式。

FYI:
http://blog.sina.com.cn/s/blog_4d5768e801000apo.html

http://blog.csdn.net/sepnic/article/details/6536855

I2S仅仅是PCM的一个分支,接口定义都是一样的, I2S的采样频率一般为44.1KHZ和48KHZ做,PCM采样频率一般为8K,16K。有四组信号: 位时钟信号,同步信号,数据输入,数据输出.

I2S总线标准
I2S(Inter-IC Sound Bus)是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准。在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。I2S有3个主要信号:

串行时钟 SCLK,也叫做位时钟BCLK,即对应数字音频的每一位数据,SCLK的频率=2×采样频率×采样位数 ,呵呵,现在问题来了,有人会问这些东西到底是什么意思呢?其实,I2S一般是传输立体声,有两个声道channel,采样频率指得是采样数率,多久去采集一个点,每个点是几个bit组成。
帧时钟LRCK,用于切换左右声道的数据,LRCK为“0”表示正在传输的是左声道的数据,为“1”表示正在传输的是右声道的数据。LRCLK == FS,就是采样频率
串行数据SDATA,就是用二进制补码表示的音频数据,有时为了使系统间能够更好的同步,还需要另外传输一个信号MCLK,称为主时钟,也叫系统时钟(System Clock),是采样频率的256或384倍
I2S协议时序
I2S格式的信号无论有多少位数据,,数据的最高位总是出现在LRCK变化(也就是一帧开始)后的第2个BCLK脉冲处。这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错。
在这里插入图片描述

从时序图可以看出,I2S左右声道分别为高低电平,PCM只有一个起始信号,左声道数据紧跟右声道.
PCM协议
PCM(PCM-clock、PCM-sync、PCM-in、PCM-out)脉冲编码调制,模拟语音信号经过采样量化以及一定数据排列就是PCM了。理论上可以传输单声道,双声道立体声和多声道。是数字音频的raw data.

在这里插入图片描述

从时序图可以看出,I2S左右声道分别为高低电平,PCM只有一个起始信号,左声道数据紧跟右声道.

音频基础之I2S、TDM、PCM传输

DSP

1、采样率
常用的表示符号是fs。通俗的讲采样频率是指计算机每秒钟采集多少个声音样本。采样频率与声音频率之间有一定的关系,根据奈奎斯特理论,只有采样频率高于声音信号最高频率的两倍时,才能把数字信号表示的声音还原成为原来的声音,是衡量声卡采集、记录和还原声音文件的质量标准。

2、采样精度
模拟信号的幅度轴进行数字化,它决定了模拟信号数字化以后的动态范围。采样精度为24bit位即动态范围0~96dbfs。

3、帧长
DSP一次处理的音频采样点数,决定处理延时。如帧长64,采样率为48Kbps,DSP一次计算延时至少0.001333333s.

4、时钟
4.1、音频数据由I2S协议来传输,在I2S中,有很多时序都需要配置。
4.1.1、BCLK:位时钟 (Bitclock,BCK,也称串行时钟SCK):确立数据流中两个相邻位之间边界的信号
4.1.2、LRCK:左/右时钟 (LRCK)/字时钟 (Wordclock,也称WS):一个在采样速率下运行、占空比为 50% 的慢时钟,它确立数据流中两条相邻通道(左和右)之间的边界。
4.1.3、MCLK:主时钟,一般而言,DSP不需要音频主时钟,因为它们能够以一种完全不同的速率对数据进行处理,
例如: 设声音的采样频率为44.1 kHz,即声道选择信号(帧时钟)WS的频率必须也为44.1 kHz;左/右2个声道的量化深度均为16 bit,则I2S的SCK的频率为:44.1 kHz×16×2=1.4112 MHz,SCK = 采样率 * 位宽 * 通道数,WS = 采样率

4.2、音频数据由TDM/PCM来传输,不像I2S有统一的标准,不同的IC厂商在应用TDM时可能略有差异,这些差异表现在时钟的极性、声道配置的触发条件和对闲置声道的处理等。
TDM/PCM与I2S接口对应关系见下表:
在这里插入图片描述

4.2.1、根据 SD相对帧同步时钟FSYNC的位置,TDM分两种基本模式:
Mode A: 数据在FSYNC有效后,BCLK的第2个上升沿有效
Mode B: 数据在FSYNC有效后,BCLK的第1个上升沿有效
在这里插入图片描述

注:不同厂商对Mode A和Mode B定义可能有所差别
应用中,总是以帧同步时钟FSYNC的上升沿表示一次传输的开始。帧同步时钟的频率总是等于音频的采样率,比如44.1 kHz,48 kHz等。多数应用只用到FSYNC的上升沿,而忽略其下降沿。根据不同应用FSYNC脉冲宽度的差别,PCM帧同步时钟模式大致分为两种:长帧同步 Long Frame Sync,短帧同步 Short Frame Sync。长帧同步,如图所示,FSYNC脉冲宽度等于1个Slot的长度。Slot在TDM中表示的是传输单个声道所占用的位数。如图所示TI McASP接口的TDM包括6个Slots,即它最多可包括6声道数据。注意,Slot的位数并不一定等于音频的量化深度。比如Slot可能为32 bit,其中包括24 bit有效数据位(Audio Word) + 8 bit零填充(Zero Padding)。
在这里插入图片描述

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

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

原文链接:https://blog.csdn.net/weixin_48408892/article/details/127282752

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

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

相关文章

echarts散点图自定义tooltip,鼠标放上去展示多行数据

先放效果图 如图,就是鼠标悬停在散点上(这里的散点我替换成了图片,具体做法参考这篇文章:echarts散点图的散点用自定义图片替代-CSDN博客)时,可以展示多行数据。之前查找资料的时候,很多用字符串…

Redis数据结构对象之列表对象

列表对象 概述 ziplist编码的列表对象使用压缩列表作为底层实现,每个压缩列表节点(entry)保存了一个列表元素。 例子如下。如果numbers键的值对象使用的是ziplist编码,这个这个值对对象将会是如图所示的样子。 另一方面,linkedlist编码的列…

Oracle Primavera Analytics 是什么,与P6的关系?

前言 Oracle Primavera P6 Analytics 是与P6有关的一个相对较新的模块,Primavera 用户社区在很大程度上尚未对其进行探索。 那么它到底有什么作用呢? 通过了解得知它旨在通过深入了解组织的项目组合绩效,帮助高级管理层对其项目组合做出更好…

数据库精通之路:国产GBASE数据库学习网站全攻略

介绍:GBASE是一个包含多种产品的数据库系列,由南大通用数据技术有限公司推出,以其高性能和高可用性在国内数据库市场享有较高的品牌知名度。以下是GBASE系列的主要产品特点: GBase 8a:这是一个面向大数据分析的高性能数…

JavaScript slice()方法详解

在 JavaScript 中,slice() 是一个常用的数组方法,用于从现有数组中提取一部分元素,然后返回一个新的数组。它是一个非常有用的工具,可以帮助你在不改变原始数组的情况下操作数组的子集。本文将介绍 slice() 的基本概念、使用方法、…

CSS-DAY3

CSS-DAY3 2024/2/7 盒子模型 页面布局要学习三大核心, 盒子模型, 浮动 和 定位. 学习好盒子模型能非常好的帮助我们布局页面 1.1 看透网页布局的本质 网页布局过程: 先准备好相关的网页元素,网页元素基本都是盒子 Box 。利用 CSS 设置好盒子样式&a…

C++:菱形继承与虚继承

看下面这个示例代码 class A{ public: int num10; A(){cout<<"A构造"<<endl;} virtual void fun(){cout<<"A虚函数"<<endl;} };class B:public A{ public: B(){cout<<"B构造"<<endl;} void fun(){cout<…

C语言基础数据结构——栈和队列

目录 1.栈 1.1栈的选型 1.2 实现代码 2.队列 2.1整体思路 2.2初始化和销毁 2.3出入队列 2.4取队列元素 2.5判断队列是否为空 2.6返回队列中元素个数 2.7 Test 1.栈 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数…

AG32 MCU以太网应用实例demo

一. 前言 AGM32系列32位微控制器旨在为MCU用户提供新的自由度和丰富的兼容外设&#xff0c;以及兼容的引脚和功能。AG32F407系列产品具有卓越的品质&#xff0c;稳定性和卓越的价格价值。 AG32产品线支持其所有接口外设尽可能接近主流兼容性&#xff0c;并提供丰富的参考设计…

CSS学习(2)-盒子模型

1. CSS 长度单位 px &#xff1a;像素。em &#xff1a;相对元素 font-size 的倍数。rem &#xff1a;相对根字体大小&#xff0c;html标签就是根。% &#xff1a;相对父元素计算。 注意&#xff1a; CSS 中设置长度&#xff0c;必须加单位&#xff0c;否则样式无效&#xff…

Arduino IDE配置ESP8266开发环境

一、配置步骤 在Arduino IDE中配置ESP8266开发环境的详细步骤如下&#xff1a; 1.打开Arduino IDE&#xff0c;依次点击“文件”->“首选项”&#xff0c;在“附加开发板管理器网址”一栏添加ESP8266开发板的网址。常用的网址是&#xff1a; http://arduino.esp8266.com/s…

精细化运营从开店到抖音运营

本课程将覆盖精细化运营的各个方面&#xff0c;从实体店开店筹备到在抖音平台进行运营推广。学员将学习品牌定位、市场调研、社交媒体营销策略等内容&#xff0c;深入了解如何利用抖音等平台推动业务发展&#xff0c;提升品牌影响力。 课程大小&#xff1a;6.2G 课程下载&…

快速排序(数据结构)

1. 前言&#xff1a; 这两种排序经常使用&#xff0c;且在算法题中经常遇见。 这里我们简单分析讨论一下。 1. 快速排序 平均时间复杂度&#xff1a;O&#xff08;nlogn&#xff09; 最坏时间复杂度&#xff1a; O&#xff08;n^2&#xff09; 1.1. 左右向中遍历: 取最右侧4…

MechanicalSoup,一个非常实用的 Python 自动化浏览器交互工具库!

目录 前言 什么是 Python MechanicalSoup 库&#xff1f; 核心功能 使用方法 1. 安装 MechanicalSoup 库 2. 创建 MechanicalSoup 客户端 3. 打开网页并与之交互 实际应用场景 1. 网页自动化测试 2. 网络爬虫与数据提取 3. 网页自动化操作 4. 自动化填写和提交多个表单 5.…

数字IC实践项目(9)—SNN加速器的设计和实现(tiny_ODIN)

数字IC实践项目&#xff08;9&#xff09;—基于Verilog的SNN加速器 写在前面的话项目整体框图完整电路框图 项目简介和学习目的软件环境要求 Wave&CoverageTiming&#xff0c;Area & Power总结 写在前面的话 项目介绍&#xff1a; SNN硬件加速器是一种专为脉冲神经网…

【论文笔记合集】Transformers in Time Series A Survey综述总结

本文作者&#xff1a; slience_me 文章目录 Transformers in Time Series A Survey综述总结1 Introduction2 Transformer的组成Preliminaries of the Transformer2.1 Vanilla Transformer2.2 输入编码和位置编码 Input Encoding and Positional Encoding绝对位置编码 Absolute …

GPT-1, GPT-2, GPT-3, InstructGPT / ChatGPT and GPT-4 总结

1. GPT-1 What the problem GPT-1 solve? 在 GPT-1 之前&#xff0c;NLP 通常是一种监督模型。 对于每个任务&#xff0c;都有一些标记数据&#xff0c;然后根据这些标记数据开发监督模型。 这种方法存在几个问题&#xff1a;首先&#xff0c;需要标记数据。 但 NLP 不像 CV&…

[ Linux ] vim的使用(附:命令模式的常见命令列表)

1.下载安装 这里是在通过yum进行下载安装 yum install -y vim 2.了解 vim是一款编辑器&#xff0c;它具有多模式的特点 主要有&#xff1a;插入模式&#xff0c;命令模式&#xff0c;底行模式 3.使用 打开 vim 文件名 命令模式的常见命令列表 插入模式 按「 i 」切换…

MQ组件之RabbitMQ学习

MQ组件之RabbitMQ入门 同步调用和异步调用 在微服务架构中&#xff0c;服务之间的调用有同步调用和异步调用两种方式。 我们使用OpenFeign去调用是同步调用&#xff0c;同步调用的缺点很明显&#xff0c;在下图的场景中&#xff0c;支付完成后需要调用订单服务、仓库服务、短…

echarts实践总结(常用二):折线图(特点:渐变、面积区域)

目录 第一章 echarts基本使用 第二章 echarts实践——折线图 效果展示 第一章 echarts基本使用 Echarts常用配置项(详细入门)_echarts配置项手册-CSDN博客 柱状图案例&#xff1a; echarts实践总结(常用一)&#xff1a;柱状图&#xff08;特点&#xff1a;渐变色、点击缩放、…