采用微控制器 (MCU) 来实施语音记录器
eeskill 2023-12-01


引言


采用微控制器 (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)。









图 2 显示了一小段录制音频流,并通过两个示意图给出了模拟音频输入采样(PCM 值)与连续采样(DPCM 值)间差值的比较。









PCM 值的范围在 26 到 203 之间,总共 177 个步长。编码的 DPCM 值范围在-44 至 46之间,总共 90 个步长。尽管量化器步长仅为 1,但这种 DPCM 编码已经实现了输入数据的压缩功能。只需选择较大的量化器步长即可将编码 DPCM 值的范围进一步缩小。





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





ADPCM 是 DPCM 的一个变体,编码器步长会有差异。语音输入信号的强度差异体现在不同的扬声器器上,也体现在语音输入信号的语音和非语音部分上。量化器步长对每个采样都进行适应调节,确保高低输入信号强度都能实现同样的编码效率。图 3 显示了采用步长调节技术的修订版 DPCM结构图。









ADPCM 编码器通过解码 ADPCM 代码进行信号估算 (Se),这就是说,解码器是 ADPCM 编码器的一部分,因此已经编码的音频数据流只能用解码器进行重放,这样解码器就必须对编码器加以跟踪。



最初的编码器和解码器信号估算等级以及步长大小调节等级必须在开始编码或解码前就加以定义,否则,编码或解码的值就会超过范围。





MSP430 片上信号链





MSP430 系列微控制器支持多种片上外设。为了实现完整的片上信号链解决方案,MSP430 至少必须提供 1 个 A/D 转换器模拟输入和 1 个 D/A 转换器。下面我们将介绍两种 MSP430 解决方案。









MSP430F169 片上信号链解决方案





MSP430F169 包括 1 个集成 12 位 SAR A/D 转换器,作为一种硬件乘法器模块,它能高效支持数字滤波器,此外 MSP430F169 还包括 1 个集成 12 位 D/A 转换器模块。图4给出了 MSP430F169 信号链电路图。



上述配置也适合采用外部串行闪存的情况,从而可以满足音频数据的存储需求。外部闪存可通过 MSP430 的 I2C 或 SPI 接口来连接。MSP430F169 DMA 模块可自动将接收到的数据传输给 RAM,从而大幅降低了 CPU 的负载。





MSP430FG4618 片上信号链解决方案





我们用 MSP430FG4618 可以实现另一种片上信号链解决方案。MSP430F169 可支持 60 KB 的集成闪存,而 MSP430FG4618 则可支持 116 KB 的闪存。MSP430FG4618 的另一优势在于,它还集成了运算放大器模块。运算放大器可用于放大扩音器的输入及数模转换器的模拟输出。图 5 显示了 MSP430FG4618 信号链电路图。具体配置采用的是TI推出的 MSP430FG4618/F2013 试验板。该评估板可与相关代码示例配合使用。









扩音器的输出信号非常小,必须放大。MSP430 的运算放大器可用于不同的运算模式。如果用于 PGA 模式,那么最大只能放大到 15 倍,对扩音器放大器来说还不够。因此,需要通过外部组件来加大增益。图 5 中的运算放大器 OA0 即用于通用放大器模式。放大器共有 8 种设置方式,可以使增益-带宽乘积和转换率等性能与电流消耗达到最佳平衡。图中的所有放大器 OA0、OA1 及 OA2 均采用了高性能模式(快速模式)。



如欲了解有关运算放大器使用的更多详情,敬请参见 MSP430FG4618/F2013 试验板用户指南。



利用通用串行通信接口 (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() 函数就能进行回放。以下代码段显示了如何完成上述工作。





#include “ADPCM.h”



void main(void)



{ // 应用软件初始化



while(1) // 主循环



{ // 应用软件



if (P1IN & 0x01)



record();



if (P1IN & 0x02)



play();



}



}



void record(void)



{ // 初始化后,以便 A/D 转换器、定时器、放大器等的录制



ADPCM_Init(); // 须在开始录制之前完成



// 开始录制



}



void play(void)



{ //初始化后,以便 A/D 转换器、定时器、放大器等的录制



ADPCM_Init(); //须在开始录制之前完成



// 开始回放



}



接下来,我们用 IAR Embedded Workbench KickStart version 3.42A 来测量 ADPCM 函数执行的次数。测量时,采用的是默认优化设置。



ADPCM_Encoder() 函数调用需要114~126个循环。



ADPCM_Decoder() 函数调用需要99~109个循环。



请注意,这只包含压缩/解压缩算法。要实现录制和回放功能,还需要更多代码。



参考文献:



1. MSP430x4xx 系列用户指南 (SLAU056)



2. MSP430F169 产品说明书 (SLAS368)



3. MSP430FG4618 产品说明书 (SLAS508)



4. 基于 TMS32010 的 32kbps ADPCM (SPRA131)



5. 基于 MSP430F13x 的低成本 12 位语音编解码器设计 (SLAA131)



6. MSP430FG4618/F2013试验板用户指南(SLAU213




引言





采用微控制器 (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)。









图 2 显示了一小段录制音频流,并通过两个示意图给出了模拟音频输入采样(PCM 值)与连续采样(DPCM 值)间差值的比较。









PCM 值的范围在 26 到 203 之间,总共 177 个步长。编码的 DPCM 值范围在-44 至 46之间,总共 90 个步长。尽管量化器步长仅为 1,但这种 DPCM 编码已经实现了输入数据的压缩功能。只需选择较大的量化器步长即可将编码 DPCM 值的范围进一步缩小。





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





ADPCM 是 DPCM 的一个变体,编码器步长会有差异。语音输入信号的强度差异体现在不同的扬声器器上,也体现在语音输入信号的语音和非语音部分上。量化器步长对每个采样都进行适应调节,确保高低输入信号强度都能实现同样的编码效率。图 3 显示了采用步长调节技术的修订版 DPCM结构图。









ADPCM 编码器通过解码 ADPCM 代码进行信号估算 (Se),这就是说,解码器是 ADPCM 编码器的一部分,因此已经编码的音频数据流只能用解码器进行重放,这样解码器就必须对编码器加以跟踪。



最初的编码器和解码器信号估算等级以及步长大小调节等级必须在开始编码或解码前就加以定义,否则,编码或解码的值就会超过范围。





MSP430 片上信号链





MSP430 系列微控制器支持多种片上外设。为了实现完整的片上信号链解决方案,MSP430 至少必须提供 1 个 A/D 转换器模拟输入和 1 个 D/A 转换器。下面我们将介绍两种 MSP430 解决方案。









MSP430F169 片上信号链解决方案





MSP430F169 包括 1 个集成 12 位 SAR A/D 转换器,作为一种硬件乘法器模块,它能高效支持数字滤波器,此外 MSP430F169 还包括 1 个集成 12 位 D/A 转换器模块。图4给出了 MSP430F169 信号链电路图。



上述配置也适合采用外部串行闪存的情况,从而可以满足音频数据的存储需求。外部闪存可通过 MSP430 的 I2C 或 SPI 接口来连接。MSP430F169 DMA 模块可自动将接收到的数据传输给 RAM,从而大幅降低了 CPU 的负载。





MSP430FG4618 片上信号链解决方案





我们用 MSP430FG4618 可以实现另一种片上信号链解决方案。MSP430F169 可支持 60 KB 的集成闪存,而 MSP430FG4618 则可支持 116 KB 的闪存。MSP430FG4618 的另一优势在于,它还集成了运算放大器模块。运算放大器可用于放大扩音器的输入及数模转换器的模拟输出。图 5 显示了 MSP430FG4618 信号链电路图。具体配置采用的是TI推出的 MSP430FG4618/F2013 试验板。该评估板可与相关代码示例配合使用。









扩音器的输出信号非常小,必须放大。MSP430 的运算放大器可用于不同的运算模式。如果用于 PGA 模式,那么最大只能放大到 15 倍,对扩音器放大器来说还不够。因此,需要通过外部组件来加大增益。图 5 中的运算放大器 OA0 即用于通用放大器模式。放大器共有 8 种设置方式,可以使增益-带宽乘积和转换率等性能与电流消耗达到最佳平衡。图中的所有放大器 OA0、OA1 及 OA2 均采用了高性能模式(快速模式)。



如欲了解有关运算放大器使用的更多详情,敬请参见 MSP430FG4618/F2013 试验板用户指南。



利用通用串行通信接口 (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() 函数就能进行回放。以下代码段显示了如何完成上述工作。





#include “ADPCM.h”



void main(void)



{ // 应用软件初始化



while(1) // 主循环



{ // 应用软件



if (P1IN & 0x01)



record();



if (P1IN & 0x02)



play();



}



}



void record(void)



{ // 初始化后,以便 A/D 转换器、定时器、放大器等的录制



ADPCM_Init(); // 须在开始录制之前完成



// 开始录制



}



void play(void)



{ //初始化后,以便 A/D 转换器、定时器、放大器等的录制



ADPCM_Init(); //须在开始录制之前完成



// 开始回放



}



接下来,我们用 IAR Embedded Workbench KickStart version 3.42A 来测量 ADPCM 函数执行的次数。测量时,采用的是默认优化设置。



ADPCM_Encoder() 函数调用需要114~126个循环。



ADPCM_Decoder() 函数调用需要99~109个循环。



请注意,这只包含压缩/解压缩算法。要实现录制和回放功能,还需要更多代码。



参考文献:



1. MSP430x4xx 系列用户指南 (SLAU056)



2. MSP430F169 产品说明书 (SLAS368)



3. MSP430FG4618 产品说明书 (SLAS508)



4. 基于 TMS32010 的 32kbps ADPCM (SPRA131)



5. 基于 MSP430F13x 的低成本 12 位语音编解码器设计 (SLAA131)



6. MSP430FG4618/F2013试验板用户指南(SLAU213)





标签 :


MSP430语音/音频压缩/解压


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 对话周祖成教授 - 清华大学与西门子EDA的合作之旅


  • 相关技术文库
  • 模拟
  • 模电
  • 运放
  • 放大
  • 如何理解运放平衡电阻

    平衡电阻的目的是为了减小运放输入偏置电流在电阻上形成的静态输入电压而带来误差详细看书。

    前天
  • 如何使用二极管并联LDO

    使用二极管并联LDO首先来看通过二极管并联LDO的电路图。

    前天
  • 运算放大器和比较器的区别

    运算放大器和电压比较器在原理符号上确实是一样的,都有5个引脚,其中两个引脚为电源+和电源-,还有两个引脚为同相输入端(+)和反向输入端(-),最后一个引脚是输出端。

    前天
  • AD采样的内部结构

    AD采样实现原理

    前天
  • 分析几个三极管镜像恒流源电路

    在改进型差动放大器中,用恒流源取代射极电阻RE,既为差动放大电路设置了合适的静态工作电流,又大大增强了共模负反

    前天
  • 实际项目中,如何选择运算放大器?

    当然,性能越好的运放,价格也越高,根据不同使用场合选用不同的运放,确保最佳的性价比也是作为一个工程师的必备技能。

    前天
  • 信号继电器有哪些作用?

    继电器是一种电控制器件,在很多电路中都有继电器的使用。为增进大家对继电器的认识,本文将对继电器的原理、作用,以及信号继电器的分类予以介绍。如果你对继电器、信号继电器具有兴趣,不妨和小编一起继续往下阅...

    02-21
  • 电容界的强强联手:电解与薄膜的完美搭配

    电容是常用电子器件之一,针对不同用途,市场上推出了各式电容。为增进大家对电容的了解,本文将对电解电容和薄膜电容的搭配问题予以介绍。如果你对电容相关知识具有兴趣,不妨继续往下阅读哦。 在一个电器...

    02-21
  • IMX386揭秘:让您的照片跃出屏幕,惊艳世界!

    IMX386是一个对角线6.294毫米(1/2.86型)12兆像素CMOS有源像素型叠加型图像传感器与方形像素阵列。采用Exmor RS技术实现高速图像采集。通过柱状并行A/D转换电路和高灵敏度低噪声图像(与传统CMOS图像传感器相比),...

    02-21
  • 收藏!19个常用的5V转3.3V技巧

    必看的19个5V转3.3V技巧

    02-21
  • 低端运放电流检测方法

    低端运放电流检测方法分析下原理:运用运放的虚短特性,既得到了:V+ = V-; 运用运放的虚断特性,既

    02-21
  • 解锁电子世界的秘密武器:揭秘运算放大器的魔力

    什么是运算放大器?运算放大器是具有很高放大倍数的电路单元,具有带载能力强、低输出电阻特点。运算放大器的种类繁多,应用非常广泛。接下来简单给大家介绍一下运算放大器的应用及种类。 运算放大器的应用 1.电流源...

    02-21
下载排行榜
更多
评测报告
更多
广告