LPCM

LPCM: linear pulse code modulation
    LPCM,即线性脉冲编码调制,是一种非压缩音频数字化技术,是一种未压缩的原音重现,在普通CD、DVD及其他各种要求最高音频质量的场合中已经得到广泛的应用。
    各种应用场合中的LPCM(PCM)原理是一样的,区别在于采样频率和量化精度不同。
    
    声音之所以能够数字化,是因为人耳所能听到的声音频率不是无限宽的,主要在20kHz以下。按照抽样定理,只有抽样频率大于40kHz,才能无失真地重建原始声音。如CD采用44.1kHz的抽样频率,其他则主要采用48kHz或96kHz。
    
    PCM(脉冲编码调制)是一种将模拟语音信号变换为数字信号的编码方式。主要经过3个过程:抽样、量化和编码。抽样过程将连续时间模拟信号变为离散时间、连续幅度的抽样信号,量化过程将抽样信号变为离散时间、离散幅度的数字信号,编码过程将量化后的信号编码成为一个二进制码组输出。
    量化分为线性量化和非线性量化。线性量化在整个量化范围内,量化间隔均相等。非线性量化采用不等的量化间隔。量化间隔数由编码的二进制位数决定。例如,CD采用16bit线性量化,则量化间隔数L=65536。位数(n)越多,精度越高,信噪比SNR=6.02n+1.76(dB)也越高。但编码的二进制位数不是无限制的,需要根据所需的数据率确定。比如:CD可以达到的数据率为2×44.1×16=1411.2Kbit/s。
    简单的理解,LPCM就是把原始模拟声音波形经过采样和线性量化后得到的数字信号,这些数据信号还没被压缩。

ADPCM

ADPCM :Adaptive Differential Pulse Code Modulation
    说到ADPCM, 就得先说下DPCM。
    Differential(差异)或Delta PCM(DPCM)纪录的是目前的值与前一个值的差异值。DPCM对信号的差值进行量化,可以进一步减少量化比特数。与相等的PCM比较,这种编码只需要25%的比特数。这与一些视频的压缩理念类似,用该帧与前一帧的差异来进行记录该帧以达到压缩的目的。
    ADPCM (ADPCM Adaptive Differential Pulse Code Modulation), 是一种针对16bit (或者更高) 声音波形数据的一种有损压缩算法, 它将声音流中每次采样的 16bit 数据以 4bit 存储, 所以压缩比1:4. 而压缩/解压缩算法非常的简单, 所以是一种低空间消耗,高质量声音获得的好途径。
    该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化,即量化器和预测器的参数能随输入信号的统计特性自适应于或接近于最佳的参数状态,在32kbps◎8khz速率上能够给出网络等级话音质量。

特性:ADPCM综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能比较好的波形编码。它的核心想法是:

  1. ①利用自适应的思想改变量化阶的大小,即使用小的量化阶(step-size)去编码小的差值,使用大的量化阶去编码大的差值;
  2. ②使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。
  • 优点:算法复杂度低,压缩比小,编解码延时最短(相对其它技术)
  • 缺点:声音质量一般

简单理解,ADPCM就是对LPCM数据进行有损压缩,压缩过程中量化参数遇小则小,遇大则大,根据差值来自己调整大小;另外它可以对之前的数据统计后来预测后来的数据差值,尽量使差值比较小。

G711

G711是国际电信联盟ITU-T定制出来的一套语音压缩标准,它代表了对数PCM(logarithmic pulse-code modulation)抽样标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。 起压缩率为1:2, 即把16位数据压缩成8位。G.711是主流的波形声音编解码器。 
    G.711 标准下主要有两种压缩算法。一种是u-law algorithm (又称often u-law, ulaw, mu-law),主要运用于北美和日本;另一种是A-law algorithm,主要运用于欧洲和世界其他地区。其中,后者是特别设计用来方便计算机处理的  
    G711的内容是将14bit(uLaw)或者13bit(aLaw)采样的PCM数据编码成8bit的数据流,播放的时候在将此8bit的数据还原成14bit或者13bit进行播放,不同于MPEG这种对于整体或者一段数据进行考虑再进行编解码的做法,G711是波形编解码算法,就是一个sample对应一个编码,所以压缩比固定为:
8/14 = 57% (uLaw)
8/13 = 62% (aLaw)
简单理解,G.711就是语音模拟信号的一种非线性量化, bitrate 是64kbps。

G726

G.726是ITU-T定义的音频编码算法。1990年 CCITT(ITU前身)在G.721和G.723标准的基础上提出。G.726可将64kbps的PCM信号转换为40kbps、32kbps、24kbps、16kbps的ADPCM信号。
    最为常用的方式是 32 kbit/s,但由于其只是 G.711速率的一半,所以就将网络的可利用空间增加了一倍。G.726具 体规定了一个 64 kbpsA-law 或 μ-law PCM 信号是如何被转化为40, 32, 24或16 kbps 的 ADPCM 通道的。在这些通道中,24和16 kbps 的通道被用于数字电路倍增设备(DCME)中的语音传输,而40 kbps 通道则被用于 DCME 中的数据解调信号(尤其是4800 kbps 或更高的调制解调器)。
    实际上,G.726 encoder 输入一般都是G.711 encoder的输出:64kbit/s 的A-law或µ-law;G.726算法本质就是一个ADPCM, 自适应量化算法,把64kbit/s 压缩到32kbit/s 。

AAC

AAC,全称Advanced Audio Coding,中文名:高级音频编码,是一种专为声音数据设计的文件压缩格式。与MP3不同,它采用了全新的算法进行编码,更加高效,具有更高的“性价比”。利用AAC格式,可使人感觉声音质量没有明显降低的前提下,更加小巧。苹果ipod、诺基亚手机支持AAC格式的音频文件。

  • 优点:相对于mp3,AAC格式的音质更佳,文件更小。
  • 不足:AAC属于有损压缩的格式,与时下流行的APE、FLAC等无损格式相比音质存在“本质上”的差距。加之,传输速度更快的USB3.0和16G以上大容量MP3正在加速普及,也使得AAC头上“小巧”的光环不复存在。

AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC

格式对比:

如上表,那么音频的帧长又是个什么概念呢?
    其实,音频的帧的概念没有视频帧那么清晰,几乎所有视频编码格式都可以简单的认为一帧就是编码后的一副图像。但音频帧跟编码格式相关,它是各个编码标准自己实现的。因为如果以PCM(未经编码的音频数据)来说,它根本就不需要帧的概念,根据采样率和采样精度就可以播放了。比如采样率为44.1kHZ,采样精度为16位的音频,你可以算出bitrate(比特率)是4410016kbps,每秒的音频数据是固定的4410016/8 字节。
    对采样率为44.1kHz的AAC(Advanced Audio Coding)音频进行解码时,一帧的解码时间须控制在23.22毫秒内。通常是按1024个采样点一帧。
    以上表G.711的帧长为480为例,那么一帧的时间长度即为480/8khz=0.06s=60ms。

假设音频采样率 = 8000,采样通道 = 2,位深度 = 16,采样间隔 = 20ms

首先我们计算一秒钟总的数据量,采样间隔采用20ms的话,说明每秒钟需采集50次,这个计算大家应该都懂,那么总的数据量计算为

一秒钟总的数据量 =8000 * 2*16/8 = 32000

所以每帧音频数据大小 = 32000/50 = 640

每个通道样本数 = 640/2 = 320

以上内容转自:

《音频帧大小计算》

《音频采样及编解码——LPCM 、ADPCM、G711、G726、AAC》

可参考博客:

《G711编码原理及代码》

《G.726音频编解码原理介绍》

LPCM AAPCM G711 G726 AAC 音频采样、编码及帧大小计算相关推荐

  1. 常用音频编码格式简介(PCM、G726、ADPCM、LPCM、G711、AAC)

    目录 PCM.G726.ADPCM.LPCM.G711.AAC介绍 格式对比 音频帧长 音频播放过程 PCM PCM全称Pulse-Code Modulation,翻译一下是脉冲调制编码. 在音视频中 ...

  2. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频采样数据 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

  3. 【Android RTMP】安卓直播推流总结 ( 直播服务器搭建 | NV21 图像采集 | H.264 视频编码 | PCM 音频采集 | AAC 音频编码 | RTMP 包封装推流 )

    文章目录 一. 安卓直播推流专栏博客总结 二. 相关资源介绍 三. GitHub 源码地址 四. 整体 Android 直播推流数据到服务器并观看直播演示过程 Android 直播推流流程 : 手机采 ...

  4. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频解码信息 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

  5. 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )

    文章目录 一. 头文件.成员变量准备 二. 创建 FAAC 编码器 三. 获取并设置 FAAC 编码器参数 四. 设置 FAAC 编码器编码标准 五. 设置 FAAC 编码器 AAC 编码规格 六. ...

  6. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  7. 【Android RTMP】音频数据采集编码 ( FAAC 头文件与静态库拷贝到 AS | CMakeList.txt 配置 FAAC | AudioRecord 音频采样 PCM 格式 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 头文件与静态库拷贝到 Android Studio 二. CMakeList.txt 构建脚本配置 三. Java 层 AudioRecord 音频 ...

  8. 【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )

    文章目录 安卓直播推流专栏博客总结 一. 音频数据采集.编码 二. AAC 高级音频编码 三. FAAC 编码器 四. Ubuntu 18.04.4 交叉编译 FAAC 编码器 安卓直播推流专栏博客总 ...

  9. iOS音频AAC视频H264编码 推流最佳方案

    1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成h264,音频编码成aac *  实现音视频数据的发布,将编码好的音视频数据传输到服务器 2 视频和音频编码方案 ...

最新文章

  1. 前端页面如何引入公用的页面header和footer
  2. H5中滚动卡顿的问题
  3. vue中获取到的为什么图片地址会自动拼接上localhost:8080_前端骨架屏自动生成方案(很实用!收藏)...
  4. python方向-目前最全的Python的就业方向
  5. IAR FOR ARM 各版本号,须要的大家能够收藏了
  6. PAT甲级1108 Finding Average :[C++题解]stof、字符串变成浮点数、try和catch捕获异常、C++语法题
  7. ZCMU 1958: 机器翻译(技巧性的模拟)
  8. php 栏目循环,帝国CMS listshowclass循环栏目标签_PHP教程
  9. Notes on how to use Webots, especially how to make a robot fly in the air
  10. 每位开发人员都应该阅读的优秀源代码,长啥样?
  11. C++ const function
  12. 第 4 章 容器 - 030 - 实现容器的底层技术
  13. 圈圈教你学USB学习资料大全(包含完整光盘和教程)
  14. 百度网盘——下载限速问题解决方案(油猴(Tampermonkey)+PanDownload网页版+IDM)
  15. 栅栏密码怎么写java程序_栅栏密码
  16. 智慧仓储:打造仓储管理一张图
  17. [编程题] 头条校招
  18. 数据库(mysql)基本概念
  19. 25.(cesium之家)cesium军事标绘-攻击箭头采集(燕尾)
  20. opencv视频采集

热门文章

  1. PHP开发搭建游戏联运sdk
  2. matlab显示2dpsk误码率,基于MATLAB的2DPSK低频感应通信系统仿真设计
  3. 关于古月居 moveit rviz gazebo联动碰到的问题
  4. 前端js爬虫绕过同源策略无需跨域配置
  5. 计算机在材料科学应用主要有,《计算机在材料科学与工程中的应用(专科)》武汉理工大学20春作业二...
  6. android之状态栏提示
  7. 2021-03-02低轨卫星定轨流程整理学习02
  8. 【1.2】 评价类模型之层次分析法中判断矩阵的填写方法、一致性检验的步骤、以及根据判断矩阵计算权重的方法
  9. 根据IP定位地理位置
  10. C++学习笔记(七)~ 优先队列(priority_queue)的简单使用