引言
采用微控制器 (MCU) 来实施语音记录器比较简单。许多 MCU 均采用集成模数 (A/D) 转换器。扩音器将捕获到的声音提供给放大器,然后再馈送给 A/D 转换器的模拟输入。可将录制的声音存储在闪存或 RAM 等存储器中,按下按钮就能触发 MCU 以播放录制到的声音,其原理是将存储的数据先提供给数模 (D/A) 转换器,然后再提供给音频功率放大器。
利用 MSP430 很容易实现这种语音记录器。MSP430 微控制器利用集成外设来实现片上模拟信号链。此外,MSP430 的 CPU 处理能力非常强大,足以执行录制声音的压缩。
压缩与解压缩算法
举例来说,实现语音记录器的最简单办法就是将 A/D 转换器转换结果(如 12 位采样)直接存储在闪存中。音频数据大多数时间都不使用整个 A/D 转换器范围,也就是说,冗余数据也存储在闪存中。压缩算法可去除这些冗余信息,从而减小所存储数据的容量。
自适应差分脉冲代码调制 (ADPCM) 就是此种类型的压缩算法。ADPCM 算法存在各种类型,但都使用量化器差分编码与量化器中自适应量化阶步长方案。在进一步讨论 IMA ADPCM 算法用于相关代码之前,我们首要来简单介绍一下差分 PCM 编码。
差分脉冲代码调制 (DPCM)
DPCM 通过使用当前采样与前一个采样的差值来对模拟音频输入信号进行编码。图 1 显示了DPCM 编码器与解码器的结构图。在本例中,我们用信号估算 Se(n) 而非前一个输入来决定信号差值 d(n),从而确保了编码器使用的信息与解码器相同。如果编码器使用的是上一个输入采样的话,那么就会造成量化的累积错误,从而使重建信号与原始输入信号不同。通过采用如图 1 所示的信号估算,我们能避免重建信号 Sr(n) 与原始输入信号出现差异。重建信号 Sr(n) 是预测器 (predictor) 的输入,其决定了下一个信号估算 Se(n+1)。
利用通用串行通信接口 (USCI) 可将音频数据存储到外部闪存中。我们也可通过 I2C 总线或 SPI 总线与外部存储器相连。
MSP430 性能
相关代码文件中有一些 *.wav 文件示例,可表明解码 ADPCM 数据的质量。我们可在 PC 上用媒体播放器等软件来比较这些文件,这样就能体验 ADPCM 压缩算法的实际质量了。请注意,通过提高音频采样率和音频采样大小(解析度),我们可以进一步提高音频质量。
使用相关代码
相关代码中包含了两个软件项目,这两个版本都基于第三部分中所介绍的内容,也都采用 IMA ADPCM 算法。
ADPCM函数的使用非常简单。首先,必须在应用代码中包含ADPCM.h首标文件。该首标文件定义了ADPCM.c文件的ADPCM函数。在每次音频数据的录制或重放工作之前,必须调用 ADPCM_Init() 函数。该函数定义了信号估算(Se)的起始值以及用作量化器步长调节的步长指针。编码器和解码器通过设置可实现同步。调用ADPCM_Encoder (int value)函数就能进行编码,每个音频采样调用 ADPCM_Decoder() 函数就能进行回放。以下代码段显示了如何完成上述工作。
一周热门 更多>