一 什么是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数据常用量化指标

  1. 采样率(Sample rate):每秒钟采样多少次,以Hz为单位。详见:**采样率(Sample rate)**一节。
  2. 位深度(Bit-depth):表示用多少个二进制位来描述采样数据,一般为16bit。详见:**Quantization(量化)**一节。
  3. 字节序:表示音频PCM数据存储的字节序是大端存储(big-endian)还是小端存储(little-endian),为了数据处理效率的高效,通常为小端存储。
  4. 声道数(channel
    number):当前PCM文件中包含的声道数,是单声道(mono)、双声道(stereo)?此外还有5.1声道等。
  5. 采样数据是否有符号(Sign):要表达的就是字面上的意思,需要注意的是,使用有符号的采样数据不能用无符号的方式播放。

以FFmpeg中常见的PCM数据格式s16le为例:它描述的是有符号16位小端PCM数据。s表示有符号,16表示位深,le表示小端存储。

六 原文链接

PCM原始音频数据格式介绍

PCM原始音频数据格式介绍相关推荐

  1. Android 音频采集(原始音频)

    Android 音频简介 常见的音频编解码的类型:AAC  OPUS MP3  AMR  Ogg  PCM AAC: 高级音频编码  对应  .m4a(audio/m4a)或者.3pg(audio/3 ...

  2. 《android多媒体api》之AudioTrack原始音频pcm播放api

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

  3. 《android多媒体api》之AudioRecord原始音频pcm录制api

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

  4. 音频数据格式:PCM,WAV,MIDI

    1. 前言 限于作者能力水平,本文可能存在谬误,因此而给读者带来的损失,作者不做任何承诺. 2. 音频数据格式基础 2.1 PCM(Pulse Code Modulation):脉冲编码调制 把声源数 ...

  5. Android 音视频开发(一):PCM 格式音频的播放与采集

    什么是 PCM 格式 声音从模拟信号转化为数字信号的技术,经过采样.量化.编码三个过程将模拟信号数字化. 采样 顾名思义,对模拟信号采集样本,该过程是从时间上对信号进行数字化,例如每秒采集 44100 ...

  6. 如何利用python处理原始音频数据

    特别鸣谢以下更多python教程请到友情连接: 菜鸟教程https://www.piaodoo.com 初中毕业读什么技校 http://cntkd.net 茂名一技http://www.enechn ...

  7. 小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解

    小猫爪:嵌入式小知识10-I2S,TDM,PCM等音频格式详解 1 前言 2 I2S 3 Codec模式(左/右对齐) 3.1 左对齐(MSB对齐) 3.2 右对齐(LSB对齐) 4 DSP模式 5 ...

  8. python处理原始音频数据

    文章目录 基础知识 转换函数 片段特征函数 片段操作 audioop是python标准库中用于处理原始音频数据的模块,封装了一些便捷的编码转换函数. 基础知识 PCM(pulse code modul ...

  9. 19种音频格式介绍及音质压缩比的比较 1

    19种音频格式介绍及音质压缩比的比较 目录 前言............................................................................ ...

最新文章

  1. 2018.09.14 codechef Milestone(随机化算法)
  2. kafka系列三、Kafka三款监控工具比较
  3. 面试题总结14 动态规划
  4. Property属性,amp;nbsp;KVC键值编码OC…
  5. POJ 2778 DNA Sequence (AC自动机+矩阵快速幂)
  6. SAP Hybris Commerce Cloud Accelerator Storefront 在 Eclipse 中的调试
  7. kube-scheduler 磁盘调度源码分析
  8. jq之$(“ul li:first“)
  9. python 练习 27
  10. mysql for 循环删除_Java增强for循环中删除元素抛异常问题
  11. qlistview 自定义控件_QT中QListView中放置自定义控件并添加滚动条
  12. 计算机运行慢 卡是什么原因是什么原因,电脑反应慢是怎么回事?五招让你的电脑快得飞起!...
  13. web页面性能检测工具Lighthouse
  14. 【VOLTE】【SRVCC】 SRVCC TO 3GPP
  15. ubuntu16.04下安装为知笔记
  16. 机器学习(三)——梯度下降
  17. @Inject与@Injectable
  18. Rancher2.6全新Monitoring快速入门
  19. redis安装(主从)
  20. 论文阅读(11) 操纵涡环来提高机动性 (2015)

热门文章

  1. 每日新闻 | 2019年软件业务收入71768亿元增长15.4%;芯片行业去年收入下滑12%
  2. 博客园进驻上海张江高科技园区
  3. 揭开浮动布局的秘密(简略版)
  4. centerandzoom 无效_百度地图api h5获取当前位置授权(iphone6s 和 iphone7失效)
  5. 用python写一个按键面板
  6. u点家庭服务器管理系统,u点家庭服务器
  7. 2022年Android面试题及答案收集(不断更新中)
  8. osg三维重建的两种方法剖析:三角面片(osgUtil::DelaunayTriangulator)和四角面片(osg::HeightField)
  9. 将外网机器python环境迁移到内网机器中
  10. 概率生成函数(probability-generating function)