语音与音频压缩/解压缩技术

2019-07-23 13:50发布

本应用报告将介绍 IMA 自适应差分脉冲代码调制 (ADPCM) 的压缩/解压缩算法,讨论在 MSP430 上使用 ADPCM 库的相关步骤。我们在介绍 ADPCM 库的使用时,将给出两种均采用 MSP430 微控制器片上信号链解决方案的语音记录器实例。
1 引言
  采用微控制器 (MCU) 来实施语音记录器比较简单。许多 MCU 均采用集成模数 (A/D)转换器。扩音器将捕获到的声音提供给放大器,然后再馈送给 A/D 转换器的模拟输入。可将录制的声音存储在闪存或 RAM等存储器中,按下按钮就能触发 MCU 以播放录制到的声音,其原理是将存储的数据先提供给数模 (D/A) 转换器,然后再提供给音频功率放大器。
  利用 MSP430 很容易实现这种语音记录器。MSP430 微控制器利用集成外设来实现片上模拟信号链。此外,MSP430 的 CPU 处理能力非常强大,足以执行录制声音的压缩。

2 压缩与解压缩算法
  举例来说,实现语音记录器的最简单办法就是将 A/D 转换器转换结果(如 12 位采样)直接存储在闪存中。音频数据大多数时间都不使用整个 A/D 转换器范围,也就是说,冗余数据也存储在闪存中。压缩算法可去除这些冗余信息,从而减小所存储数据的容量。
  自适应差分脉冲代码调制 (ADPCM) 就是此种类型的压缩算法。ADPCM 算法存在各种类型,但都使用量化器差分编码与量化器中自适应量化阶步长方案。在进一步讨论 IMA ADPCM 算法用于相关代码之前,我们首要来简单介绍一下差分 PCM 编码。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
1988020566
1楼-- · 2019-07-24 06:23
  上述配置也适合采用外部串行闪存的情况,从而可以满足音频数据的存储需求。外部闪存可通过 MSP430 的 I2C 或 SPI 接口来连接。MSP430F169 DMA 模块可自动将接收到的数据传输给 RAM,从而大幅降低了 CPU 的负载。
3.2  MSP430FG4618 片上信号链解决方案
  我们用 MSP430FG4618 可以实现另一种片上信号链解决方案。MSP430F169 可支持 60 KB 的集成闪存,而 MSP430FG4618 则可支持 116 KB 的闪存。MSP430FG4618 的另一优势在于,它还集成了运算放大器模块。运算放大器可用于放大扩音器的输入及数模转换器的模拟输出。图 5 显示了 MSP430FG4618 信号链电路图。具体配置采用的是 TI 推出的 MSP430FG4618/F2013 试验板。该评估板可与相关代码示例配合使用。
1988020566
2楼-- · 2019-07-24 11:32


                                       图  5. MSP430FG4618 片上信号链解决方案
1988020566
3楼-- · 2019-07-24 16:13
  扩音器的输出信号非常小,必须放大。MSP430的运算放大器可用于不同的运算模式。如果用于 PGA 模式,那么最大只能放大到 15倍,对扩音器放大器来说还不够。因此,需要通过外部组件来加大增益。图 5 中的运算放大器 OA0 即用于通用放大器模式。放大器共有 8种设置方式,可以使增益-带宽乘积和转换率等性能与电流消耗达到最佳平衡。图中的所有放大器 OA0、OA1 及 OA2均采用了高性能模式(快速模式)。
  如欲了解有关运算放大器使用的更多详情,敬请参见 MSP430FG4618/F2013 试验板用户指南。
  利用通用串行通信接口 (USCI) 可将音频数据存储到外部闪存中。我们也可通过 I2C 总线或 SPI 总线与外部存储器相连。

4  MSP430 性能
  相关代码文件中有一些 *.wav 文件示例,可表明解码 ADPCM 数据的质量。我们可在 PC上用媒体播放器等软件来比较这些文件,这样就能体验 ADPCM压缩算法的实际质量了。请注意,通过提高音频采样率和音频采样大小(解析度),我们可以进一步提高音频质量。
4.1 使用相关代码
  相关代码中包含了两个软件项目,这两个版本都基于第三部分中所介绍的内容,也都采用 IMA ADPCM 算法。
1988020566
4楼-- · 2019-07-24 19:21
 精彩回答 2  元偷偷看……
1988020566
5楼-- · 2019-07-25 00:30
void play(void)
{ //初始化后,以便 A/D 转换器、定时器、放大器等的录制
  ADPCM_Init(); //须在开始录制之前完成
  // 开始回放
}
  接下来,我们用 IAR Embedded Workbench™ KickStart™ version 3.42A 来测量 ADPCM 函数执行的次数。测量时,采用的是默认优化设置。
  ADPCM_Encoder() 函数调用需要 114~126 个循环。
  ADPCM_Decoder() 函数调用需要 99~109 个循环。
smilingangel
6楼-- · 2019-07-25 04:27
采用微控制器 (MCU) 来实施语音记录器比较简单。许多 MCU 均采用集成模数 (A/D)转换器。扩音器将捕获到的声音提供给放大器,然后再馈送给 A/D 转换器的模拟输入。

一周热门 更多>