一、PCM

1.定义
  PCM 是声音模拟信号数字化的一种基础技术, 就是把时间连续取值连续的模拟信号变换成离散取值的数字信号, 熟悉ADC(模拟数字转换)的应该很好理解, 过程就是采样, 量化和编码。脉冲编码调制 是使用最为广泛的调制方法。在 PCM的调制过程中将输入的模拟信号进行取样量化和编码。这种方法通过用脉冲编码来代表取样后的模拟信号的幅度。即用二进制的大小来代表取样后的信号幅度。在接收端再将这些编码的二进制数还原为原来的模拟信号。

(1)采样
  用固定的频率, 对模拟信号提取样本值, 人耳能够感觉到的最高频率为20kHz, 根据奈奎斯特采样定律, Nyquist rate, 只需要每秒进行40k次采样, 就能覆盖人耳的听觉范围, 也就是说采样高于40k每秒对于普通人来说, 听觉基本上没有提升了。
  人类语音的频率在300 - 3000 Hz之间, 成年男性的语音基频在85-155Hz, 女性在165-255Hz, 同时会产生丰富的谐振频率, 在通信上, 需要保证 300 - 3400Hz 的频率范围才能满足正常通话, 对于这个频率范围, 需要使用8K每秒的采样率. 通常电话的采样率为8k和16kHz.
  日常音频信号常见的采样率为8K, 16k, 22.05k, 32k, 44.1k, 48k, 192k. 常见的无线电广播最高采样率为22.05K, CD最高采样率为44.1k, DVD最高采样率为48k, Hi-Res音频采样率可以高达192k.
注:
  共振:物体有自己的固有频率,当外来振动频率与固有频率相同时,会产生最强的振动。此时的振幅是最大的。共振有着不同的称号:1.在力学中,称为共振 2.在声学中,称为共鸣 3.在电学中,称为谐振。

(2)量化和编码
  量化和编码就是把采样得到的信号幅度转换成数字值(ADC), 再组织成固定尺寸的序列. PCM实际上就是一个大数组, 数组中每个值, 代表了当前时间点上的模拟量强度, 在播放时在对应的时间点上被转换为模拟量输出(DAC)。在量化的过程中会产生误差, 一般而言, ADC的精度越高, 失真越小. 常见的量化位数为8bit, 16bit, 24bit. 模数转换都会有误差和底噪, 对于ADC而言, 除了精度, 还有转换的实现方式, 电压基准, 电磁环境等都会对转换效果造成影响。

2.基本原理
  PCM是一种波形编码的形式,它将模拟信号进行抽样量化输出数字电平序列,得到二进制信号,再通过并串转换器转换成串行脉冲信号,并且用脉冲对模拟信号的幅度进行编码,这就是脉冲编码调制。如下,是一个简易的PCM通信系统框图。

  通过对量化PAM信号编码得到了PCM信号,也就是把每一个抽样量化的采样值用一组数据量表示。当然设计者确定了每一个量化级的具体表示代码,如表所示为一个8级量化的并以格雷码表示的3位PCM码的示例。

  为了便于数字运算,在编码器中先将输入的8位PCM码c(n)转换成14位线性码s1(n)。然后,同预测信号sp(n)相减产生差值信号d(n),再对d(n)进行自适应量化,产生4bit ADPCM代码I(n)。一方面把I(n)送给解码器,另一方面把I(n)进行本地解码得到量化后的差值信号dq(n),再同预测信号sp(n)相加得到本地重建信号sr(n),自适应预测器采用二阶极点、六阶零点的混合预测器,它利用sr(n)、dq(n)以及前几个时刻的值,对下一时刻将要的信号s1(n+1)进行预测,计算出sp(n+1)。为了使量化器能适应语音、带内数据及信令等具有不同统计特性以及不同幅度的输入信号,自适应要依输入信号的特性自动改变自适应速度参数来控制量阶。这一功能有量化器定标因子自适应、自适应速度控制、单音及过渡检测3个功能单元完成。

2.特性


二、DPCM(差分脉冲编码调制)

  差分编码采用预测编码技术‚从输入中减去预测值‚然后对预测误差进行量化‚最终的编码就是预测值与实际值之间的差值。解码器用以前的数据对当前样值进行预测‚然后用误差编码重构原始样值。这种方法使用的比特数较少.但它的性能决定于预测编码方法以及它对信号变
化的适应能力。

  PCM 保存的是最原始的模数转换结果, 是不压缩的, 数据量比较大, 存储和通讯都会占用很大资源, 需要将数据压缩以减少通信带宽和存储的资源消耗.
  将音频PCM的数组展开观察可以看到, 数据值与相邻的值通常是比较连续的, 不会突然很高或者突然很低, 两点之间差值不会太大, 所以这个差值可以用很少的几个位(比如4bit)表示. 这样只需要知道起始点的值和每个点的差值, 就可以还原得到原来的序列. 记录的差值序列就是DPCM数据, 这样数据量会小很多.以8k采样率为例, 如果量化精度为16bit, 则1秒的数据量为8000 * 16 bit = 128kb, 如果用4bit的表示差值, 则1秒的 PCM 数据转成 DPCM 只需要约 32kb。
  DPCM存在一个问题, 音频信号虽然比较连续性, 但是存在差值较大的情况, 例如差值超过4bit表示的范围(-15, 15) 就无法很好还原原来的PCM序列, 这时候如果增大差值宽度, 例如用6bit, 8bit表示, 可以减小这个问题, 但数据量也增大了.
  ADPCM 的出发点就是解决 DPCM 的差值宽度问题, 通过定义一个差值表(例如IMA ADPCM 中使用 89个固定差值, 取值从7到32767), 将差值的范围放宽到16bit, 此时差值在数组中的编号只需要6bit就可以表示(0 - 88), 再进一步只记录编号的变化值, 就将变化量压缩到了4bit.

三、ADPCM(自适应差分脉冲编码调制)

1.定义
  自适应差分脉码调制是指具有自适应预测和量化功能的差分脉码调制。其量化器的量化级(阶距)能随信号值变化作自适应调整,以提高量化信噪比;同时其预测器的预测系数能随信号统计特性的变化作自适应调整,以减小预测误差,降低传输误码率。
  自适应差分脉冲编码调制(ADPCM),是一种性能很好的波形编码算法,它综合了差分脉冲编码调制(DPCM)的差分特性和自适应脉冲编码调制(APCM)的自适应特性。ADPCM具有算法比较简单、延迟低、重建新号音质高等优点,因而被广泛应用于数字语音处理领域。ADPCM算法将16bit的PCM抽样数据有效压缩成4bit ADPCM数据,用于存储或传输。

2.算法原理
ADPCM的核心思想:
其一,随着输入信号的幅度变化,让量化间隔的大小进行自适应的调整,从而达到改善量化效果的目的;
其二,用以前的样本值去估计下面输入抽样值的预测值,从而使实际抽样值与预测值尽可能的接近,即差值尽可能小。

  ADPCM算法的量化值并不是表示采样点的幅值,而是采样点处的抽样值与前一个采样点预测值的差值。ADPCM是一种波形编码技术,利用输入信号的前后相关性,自适应量化间隔来对PCM数据进行压缩。在实际的体系应用中,一般是根据前面的多个抽样值来预测下一个输入的抽样值,这样才能获得更加准确的预测值,减小了误差。由于每次抽样都会产生非线性的预测误差,因此才称为自适应差分脉冲编码调制。在算法的完成过程当中选用了量化步长索引调整表和索引值对应的量化步长表两个常数表格。量化步长表的作用是以常数的形式确定量化步长值和下标;而索引调整表则是依据表里了的误差值来调整抽样预测值的下标,再以此来调整预测值的大小。

3.编码与解码
编码:
  输入为16bit抽样PCM信号X(n),它与上一次抽样的预测值X(n-1)相减求差值d(n),然后差值d(n)和当前的量化步长q(n)通过一个编码器,并对该差值进行量化输出得到4bit位宽的ADPCM压缩码L(n)。输出L(n)的同时,用它来调整,更新量化步长q(n+1),并且计算此编码周期的当前抽样的预测值X(n)(也是译码输出值)。下面新一级PCM信号输入进行相同的操作,这样持续的将PCM信号编码成ADPCM信号。如下是ADPCM编码器的原理图。


  图1显示了ADPCM编码过程的方框图。将一个线性输入样本X (n)与该输入样本X(n-l)的先前估计值进行比较。差异,d (n),以及目前的步长,ss (n),提出了编码器逻辑。下面描述的这个逻辑将产生一个ADPCM输出示例。该输出样本也被用于更新步长计算ss(n+l),并被提供给解码器来计算输入样本的线性估计。
  编码器接受来自比较器和步长的差分值d (n),并计算一个4位的ADPCM代码。下面是伪代码计算的表示。
伪代码的实现:
let B3 = B2 = B1 = B0 = 0
if (d(n) < 0)
then B3 = 1
d(n) = ABS(d(n))
if (d(n) >= ss(n))
then B2 = 1 and d(n) = d(n) - ss(n)
if (d(n) >= ss(n) / 2)
then B1 = 1 and d(n) = d(n) - ss(n) / 2
if (d(n) >= ss(n) / 4)
then B0 = 1
L(n) = (10002 * B3) + (1002 * B2) + (102 * B1) + B0

解码:
  如下所示为ADPCM译码器的原理图,可见是编码的逆过程,输入为4bitADPCM信号L(n),将它和当前的量化步长(第一个数为初始量化步长)送入一个译码器,求出差值d(n),与此同时输入的L(n)还要用来计算调整得到下一级的量化步长q(n+1)。下面将差值d(n)与上一级预测值X(n-1)相加得到16bit PCM译码输出信号,将此同时将此PCM输出信号作为下一级预测值。

  不管是编码还是译码,即无论是PCM信号压缩成ADPCM信号,都需要用ADPCM的值来计算更新量化步长q(n),并且是通过两次查表来实现的。首先,通过量化步长索引调整表(表3.3),查出ADPCM值对应的量化步长索引值,然后将此索引值同之前的索引值相加得到对应的量化步长(表3.4)的下标,通过此下标就查到了新的量化步长。这样就完成了量化步长的调整。


  图2显示了ADPCM解码过程的方框图。向解码器提供了一个ADPCM样本。解码器计算先前的线性输出估计与预期的输出估计之间的差值。这个差异被加到之前的估计中,以产生线性输出估计。输入的ADPCM样本也给给步长计算器来计算步长估计。
  解码器接受ADPCM代码值、L (n)和步长值。它计算一个再现的差分值,并累积一个估计的波形值,x。这里是一个伪代码算法:
伪代码:
d(n) = (ss(n)B2)+(ss(n)/2B1)+(ss(n)/4*BO)+(ss(n)/8)
if (B3 = 1)
then d(n) = d(n) * (-1)
X(n) = X(n-1) + d(n)

4.步长的计算
  Ml_values_table用于将2位编码字(B2B1B0)映射为量化步长索引,该索引用于根据先前量化的样本计算当前样本的步长。它是一个查找表,为每个可能的2位编码字提供量化步长索引。该表共有8个条目,因为有2^3 = 8个可能的2位编码字。

  step_sizes_table指定每个索引值的量化步长。它是一个查找表,为每个量化步长索引提供步长。该表共有49个条目,因为索引值范围从0到48。步长的选择是对数递增的,因此较小的幅度使用较小的步长,较大的幅度使用较大的步长。这样可以在保持良好的信噪比的同时,更有效地利用可用的比特率。

  对于编码和解码过程,ADPCM算法都会根据最新的ADPCM值来调整量化器的步长。下一个样本的步长,n+l,用以下公式计算:

这个方程可以有效地实现为一个两阶段的查找表。首先,ADPCM代码的大小被用作索引来查找如表1所示的调整因素。然后,将使用该调整因子来移动表2中的一个索引指针。然后,索引指针将指向新的步长。值大于3将会增加步长。小于4的值会减小步长。

四、抽样定理

  有一个时间连续信号 f(t),其频带限制在(0,fh)的频率之内,如果在以时间间隔小于等于 1/(2fh)对该信号进行等间隔抽样,那么根据所得到的抽样值就能完整的恢复出原始信号。换言之,如果连续信号 f(t)有一个最高频率,并且其值不会超过 fh,则这个信号一定是一个周期性信号,当抽样频率大于等于两倍的信号最高频率(fS≥2fh)时,抽样值就包含了原始信号的全部信息,信息没有丢失,当在需要时,就可以根据这些抽样值信息来还原出原始的连续信号,这就是抽样定理。


五、脉冲振幅调制(PAM)

  脉冲振幅调制(PAM),是一种脉冲载波的幅度调制方法,其幅值随着基带信号的变化而变化。假如前面的抽样定理使用冲激脉冲作为脉冲载波,则此时抽样定理就是脉冲调幅。
  PAM 一般分为两种方式。一种是“曲顶”的脉冲振幅调制,是指抽样信号 fS(t)的脉冲顶部保持了 f(t)的变化规律;另一种脉冲顶部不符合 f(t)的变化规律即是“平顶”的脉冲振幅调制。曲顶脉冲调幅采用的抽样方式一般称为自然抽样,而将平顶脉冲振幅调制的抽样方式称为瞬时抽样。
  如图 3-3(a)为平顶抽样方法得到的抽样信号,可以看到每一个抽样脉冲的幅度都正比于瞬时抽样值,但抽样脉冲都是矩形的。如图 3.3(b)为抽样信号的生成原理,先是将原始信号 f(t)和δT(t)相乘,得到理想的抽样信号 FS(ω),然后通过一个脉冲产生电路,其输出就是所需要的平顶抽样信号 fH(t)。

六、模拟信号的量化

  对模拟信号抽样以后,得到的抽样值还是随着原始信号的幅度的变化而连续变化的。如果直接将这些抽样值通过噪声信道传输,接收端不能对这些抽样信号进行准确的评估。这里要求发送端将抽样信号用规定的有限个数字电平来表示,并且电平的间隔一定要比干扰噪声大,此时接收端才能准确的计算出所发送的抽样。
  量化就是模拟信号的抽样值有限个数字电平来表示的过程,而且这些数字电平是预先规定好的。总之,抽样即将时间、取值都连续的模拟信号转换成时间离散、取值连续的抽样信号,而量化则是把取值连续的抽样变成有限个数字电平组成的取值离散的抽样信号。由于量化的这一特性,必然会有量化误差的存在,还要度量量化误差,一般用均方误差的方法。由于量化误差的影响相当于噪声干扰,因此又称其为量化噪声。下面介绍了两种常见的量化方法。

(1)均匀量化

(2)非均匀量化
  与均匀量化相对应的就是非均匀量化,即量化间隔的大小不是恒定的。当输入信号抽样值很小时,量化间隔也小;而输入大信号抽样值时,量化间隔则同样相对较大。非均匀量化相对均匀量化,有着突出的优势。
  首先,当输入量化器的信号概率密度不均匀的时候,非均匀量化器可以产生非常好的平均信号量化噪声功率比;其次,非均匀量化器的量化噪声功率的均方根正比于信号的抽样值的大小。所以,无论是大信号还是小信号,它们的量化噪声大致相同,即输入如果为任意非均匀的信号,则量化电平可以保持一个近似恒定的信噪比。
  在实际应用中,通常是先把抽样值压缩,然后再对其进行均匀量化,以这样的方式实现非均匀量化。所说的压缩实际上就是一个可以将线性的输入变量 x 转换成非线性输出变量 y 的非线性变换电路,如下式

七、WOX格式

1.定义
  VOX文件是一种声音文件格式,通常用于存储低质量的音频数据,例如电话录音、语音邮件和语音提示等。VOX文件使用ADPCM编码来压缩音频数据,以减小文件大小并提高传输效率。
  VOX文件的基本格式包括文件头和数据块。文件头包含文件格式信息和声音参数,例如采样率、声道数、位深度和压缩类型等。数据块包含经过ADPCM编码的音频数据,以及用于解码音频数据的量化表和状态信息。
  VOX文件的编码方式是在ADPCM编码器中进行的,编码器将原始音频数据转换为ADPCM编码输出,并将输出写入VOX文件的数据块。解码VOX文件时,解码器将读取文件头和数据块,并使用量化表和状态信息对ADPCM编码输出进行解码,还原原始音频数据。
  由于VOX文件使用ADPCM编码进行压缩,因此其音质通常比较低,但文件大小较小,适合在带宽和存储空间受限的环境中使用。VOX文件可以使用各种音频编辑器和播放器进行打开和编辑,但需要支持ADPCM解码的软件才能正确解码音频数据。

2.格式

T (i)是从文件中字节数“i”的文件开始的以秒为单位的时间偏移量。SR是每秒样本的采样率。

每个样本中的编码是自适应微分脉冲码调制(ADPCM)。这是一种差分编码方案,其中每个样本近似于当前输入值和前一个输入值之间的差异。差值的大小部分的权重是自适应的(非线性的)。也就是说,它可以在每个样本后发生改变。

符号:阳性(0)或阴性(1)个样本。
大小:从之前的样本中发生变化(0到7)。

2.将WAV文件转换为VOX文件需要进行以下步骤:
1.使用音频编辑器或转换工具打开WAV文件。
2.将WAV文件的采样率、声道数和位深度等参数设置为VOX文件的要求。通常,VOX文件的采样率为8000 Hz,声道数为1(单声道),位深度为4位。
3.使用ADPCM编码器将WAV文件转换为ADPCM编码输出。可以使用现有的ADPCM编码器软件或自己实现ADPCM编码器。
4.将ADPCM编码输出写入VOX文件的数据块中,并添加文件头。VOX文件的文件头包含文件格式信息和声音参数,例如采样率、声道数、位深度和压缩类型等。可以使用现有的VOX文件编辑器或自己实现VOX文件生成器。
5.保存VOX文件,并使用支持ADPCM解码的播放器进行播放和测试。

ADPCM(自适应差分脉冲编码调制)相关推荐

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

    关于ADPCM ADPCM(Adaptive Differential Pulse Code Modulation, 自适应差分脉冲编码调制) 是一种音频信号数字化编码技术, 音频压缩标准G.722, ...

  2. 【语音处理】基于自适应差分脉冲编码调制(ADPCM)的实现研究附Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步进步,matlab项目目标合作可私信.

  3. 两路语音 两路计算机数据综合,脉冲编码调制解调实验摘要.doc

    2012-2013 第二学期 开放实验项目 题 目:两路话音+两路计算机数据综合 传输系统实验 学生姓名 专业名称: 电子信息工程 指导教师: 2013年 5月 20日 脉冲编码调制解调实验 实验原理 ...

  4. PCM(脉冲编码调制)、iLBC编解码、opus(声音编码格式)、VP8视频压缩格式、H.264数字视频压缩格式

    目录 PCM(脉冲编码调制) 发展史 工作原理 iLBC编解码 基本介绍 技术优势 Opus(声音编码格式) 特性 播放 技术细节 VP8视频压缩格式 简介 突破创新 技术分析 H.264数字视频压缩 ...

  5. 脉冲编码调制pcm matlab,基于MATLAB的脉冲编码调制PCM

    内容简介: 课程设计 基于MATLAB的脉冲编码调制PCM,共35页,9502字 摘要 本课题结合MATLAB软件的Simulink仿真功能与S-函数的仿真扩展功能,完成了对脉冲编码调制(PCM)系统 ...

  6. 网络工程师(软考)学习笔记8--数字调制技术及脉冲编码调制

    笔者在早些时候已经通过了软件考试的网络工程师,因为以前学习的时候比较赶,当时也是备考研究生入学考试,很多概念也是模糊不清的,现在想重新复习网络工程师的教程,理清概念,同时也是为了下一阶段网络规划师打好 ...

  7. 七、脉冲编码调制:采样、量化、编码 ——网络工程师成长之路

    介绍脉冲编码调制:采样.量化.编码的概念和具体过程 脉冲编码调制概念 脉冲编码调制技术: 将模拟信号转化为数字信号的过程,(虽然是实际上是解调操作) 在PCM将模拟数字转化为数字信号的过程中,分为采样 ...

  8. 脉冲编码调制基本知识概念

    1:波形声音   波形声音时最常用的Windows多媒体特性.波形声音设备可以通过麦克风捕捉声音,并将其转化为数值,然后把它们储存到内存或者磁盘上的波形文件中,波形文件的扩展名为:.wav.这样声音就 ...

  9. 脉冲编码调制pcm matlab,基于MATLAB的脉冲编码调制(PCM)

    内容简介: 本科毕业设计 基于MATLAB的脉冲编码调制(PCM) 脉冲编码调制|模拟信号|数字信号|MATLAB软件|数字温度计 文件格式:word+PPT 一套完整的毕业设计,包括任务书.开题报告 ...

最新文章

  1. 我用kafka两年踩过的一些非比寻常的坑
  2. 2019年上半年收集到的人工智能大神与大咖观点文章
  3. 图像切割之(一)概述
  4. python websocket server_Python Websocket服务端
  5. java 数组 参数 ppt,Java自学课件-数组.ppt
  6. react-native项目打包速度优化
  7. 牛客练习赛60 ~ 斩杀线计算大师
  8. Qt 图形特效(Graphics Effect)介绍
  9. (十九)【AAAI2021】Knowledge-Enhanced Hierarchical Graph Transformer Network for Multi-Behavior Recommend
  10. Python入门(05) -- 类
  11. java中static和this_理解Java中this和static的含义
  12. Effective Python笔记
  13. Remoting压缩信道的编程配置方式
  14. 什么是接口?如何定义接口?如何实现接口?
  15. java自学路线图(超全超详细)
  16. windows下用wget下载数据
  17. 登录验证码(前后端分离、不分离)
  18. 深入浅出TCP三次握手 (多图详解)
  19. 笔记———计算机网络原理(三)
  20. Windows XP 源代码在线泄露

热门文章

  1. Google 桌面 Linux 版 入门指南 Ubuntu 特刊
  2. 【英语】VOA60-second science听力
  3. 密歇根安娜堡大学的计算机科学教授,密歇根大学安娜堡分校计算机科学与工程研究生offer及申请要求...
  4. css clip-path
  5. 【花开朝颜复夕颜】—记火影中挚爱的女忍者
  6. PEP8 Python代码编程规范(摘录整理于官网)
  7. JSON pretty化
  8. php 生成斜体字,JavaScript italics方法入门实例(把字符串显示为斜体)
  9. 部门新来的00后真是卷王,工作没1年,入职20K
  10. win10此电脑桌面显示(桌面显示)