ADPCM(自适应差分脉冲编码调制)的原理和计算

本文介绍了PCM的采样和量化编码过程,接着详细阐述了DPCM和ADPCM的概念,特别是IMA ADPCM编码,包括编码格式、码表、编码解码过程,并给出了编码和解码的例子,揭示了其在音频压缩中的作用。
摘要由CSDN通过智能技术生成

PCM 是声音模拟信号数字化的一种基础技术, 就是把时间连续取值连续的模拟信号变换成离散取值的数字信号, 熟悉ADC(模拟数字转换)的应该很好理解, 过程就是采样, 量化和编码.

1. 采样

用固定的频率, 对模拟信号提取样本值, 人耳能够感觉到的最高频率为20kHz, 根据奈奎斯特采样定律, Nyquist rate, 只需要每秒进行40k次采样, 就能覆盖人耳的听觉范围, 也就是说采样高于40k每秒对于普通人来说, 听觉基本上没有提升了.

In signal processing, the Nyquist rate, named after Harry Nyquist, is a value (in units of samples per second or hertz, Hz) equal to twice the highest frequency (bandwidth) of a given function or signal. When the function is digitized at a higher sample rate (see § Critical frequency), the resulting discrete-time sequence is said to be free of the distortion known as aliasing. Conversely, for a given sample-rate the corresponding Nyquist frequency in Hz is one-half the sample-rate. Note that the Nyquist rate is a property of a continuous-time signal, whereas Nyquist frequency is a property of a discrete-time system.

人类语音的频率在300 - 3000 Hz之间, 成年男性的语音基频在85-155Hz, 女性在165-255Hz, 同时会产生丰富的谐振频率, 在通信上, 需要保证 300 - 3400Hz 的频率范围才能满足正常通话, 对于这个频率范围, 需要使用 8K每秒的采样率. 通常电话的采样率为8k和16kHz.

The voiced speech of a typical adult male will have a fundamental frequency from 85 to 155 Hz, and that of a typical adult female from 165 to 255 Hz.[3] Thus, the fundamental frequency of most speech falls below the bottom of the voice frequency band as defined. However, enough of the harmonic series will be present for the missing fundamental to create the impression of hearing the fundamental tone.

日常音频信号常见的采样率为8K, 16k, 22.05k, 32k, 44.1k, 48k, 192k. 常见的无线电广播最高采样率为22.05K, CD最高采样率为44.1k, DVD最高采样率为48k, Hi-Res音频采样率可以高达192k.

2. 量化和编码

量化和编码就是把采样得到的信号幅度转换成数字值(ADC), 再组织成固定尺寸的序列. PCM实际上就是一个大数组, 数组中每个值, 代表了当前时间点上的模拟量强度, 在播放时在对应的时间点上被转换为模拟量输出(DAC).

在量化的过程中会产生误差, 一般而言, ADC的精度越高, 失真越小. 常见的量化位数为8bit, 16bit, 24bit. 模数转换都会有误差和底噪, 对于ADC而言, 除了精度, 还有转换的实现方式, 电压基准, 电磁环境等都会对转换效果造成影响.

DPCM, Differential Pulse Code Modulation, 差分脉冲编码调制

PCM 保存的是最原始的模数转换结果, 是不压缩的, 数据量比较大, 存储和通讯都会占用很大资源, 需要将数据压缩以减少通信带宽和存储的资源消耗.

将音频PCM的数组展开观察可以看到, 数据值与相邻的值通常是比较连续的, 不会突然很高或者突然很低, 两点之间差值不会太大, 所以这个差值可以用很少的几个位(比如4bit)表示. 这样只需要知道起始点的值和每个点的差值, 就可以还原得到原来的序列. 记录的差值序列就是DPCM数据, 这样数据量会小很多.

以8k采样率为例, 如果量化精度为16bit, 则1秒的数据量为8000 * 16 bit = 128kb, 如果用4bit的表示差值, 则1秒的 PCM 数据转成 DPCM 只需要约 32kb.

ADPCM, Adaptive Differential Pulse Code Modulation, 自适应差分脉冲编码调

DPCM存在一个问题, 音频信号虽然比较连续性, 但是存在差值较大的情况, 例如差值超过4bit表示的范围(-15, 15) 就无法很好还原原来的PCM序列, 这时候如果增大差值宽度, 例如用6bit, 8bit表示, 可以减小这个问题, 但数据量也增大了.

ADPCM 的出发点就是解决 DPCM 的差值宽度问题, 通过定义一个差值表(例如IMA ADPCM 中使用 89个固定差值, 取值从7到32767), 将差值的范围放宽到16bit, 此时差值在数组中的编号只需要6bit就可以表示(0 - 88), 再进一步只记录编号的变化值, 就将变化量压缩到了4bit.

ADPCM算法是一个统称, 有 YAMAHA, Microsoft, IMA 等标准, 下面以嵌入式开发中最常见的 IMA ADPCM 为例进行说明

IMA ADPCM 编码

在了解编解码算法前, 先了解 IMA ADPCM 的编码格式.

16bit的 IMA ADPCM 编码产生的数据为一个数组, 数组中每个数都是4个bit(值范围为0x00到0x0F), 因为C语言编程中变量的最小单位是byte, 所以通常表示为 uint8_t 数组, 数组中每个元素存储2个 ADPCM 编

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jh035

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值