学习AD7606采集音频数据的方法并掌握MP3音频编码的原理,并实现AD7606采集音频数据进行MP3编码并保存到SD卡。
硬件原理图,找到AD采集,可查看相关控制引脚,同时可看到ADC输入的V1V8通道分别对应CON29CON36口。
A/D转换,即模数转换,是指将一个输入电压信号转换为一个输出的数字信号。一般分为四个步骤进行:取样、保持、量化和编码。前两个步骤在取样-保持电路中完成,后两步骤则在ADC中完成。
TL6748-PlusTEB实验箱上的AD采集是基于 ADI AD7606 芯片进行设计的,具体特性如下:
八通道;
16bit采样;
支持串行和并行读取方式;
支持全部通道 200K 采样率并行采集和转换;
支持真正±10V 或±5V 的双极性信号输入。
AD7606上8个通道的数据是同时采集,轮流转换的。
模数转换模块接到启动转换信号后,按照排序器的设置,开始转换第一个通道的数据;经过一个采样时间的延迟后,将采样结果放入转换结果寄存器保存;按顺序进行下一个通道的转换;如果为连续转换方式则从新开始转换过程;否则等待下一个启动信号。
音频编解码的主要对象是音乐和语音,音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算法。本实验中使用的MP3格式属于有损音乐压缩格式。音频编解码的目的是减少传输的信息量和减少储存的信息。
MP3是一个数据压缩格式,它丢弃掉脉冲编码调制(PCM)音频数据中对人类听觉不重要的数据(类似于JPEG是一个有损图像压缩),从而达到了小得多的文件大小。
MP3音频可以按照不同的位速进行压缩,提供了在数据大小和声音质量之间进行权衡的一个范围,MP3格式使用了混合的转换机制将时域信号转换成频域信号。
特点:
(1)音质还原较好,压缩比比较高:10:1~12:1。
(2)软硬件支持好,应用领域广泛:随声听、MP3。
(3)文件体积较小,有利网络传输:网络主流音频格式。
(4)多次编辑后,音质会急剧下降。
(5)实现片内存储器、片内外设以及外部存储器之间的数据传输。
MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。它被设计用来大幅度地降低音频数据量。利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的文件,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。
从信息论的观点来看,描述信源的数据是信息和数据冗余之和,即:数据=信息+数据冗余。音频信号在时域和频域上具有相关性,也即存在数据冗余。将音频作为一个信源,音频编码的实质是减少音频中的冗余。
自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字信号。
PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志。最常见的方式是通过脉冲编码调制PCM(Pulse Code Modulation) 。
PCM脉冲编码调制是Pulse Code Modulation的缩写。脉冲编码调制是数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。
(1)采样率(sampleRate):采样率越高声音的还原度越好。
(2)比特率(bitrate):每秒钟的数据量,越高音质越好。
(3)声道数(channels):声道的数量,通常只有单声道和双声道,双声道即所谓的立体声。
(4)比特率控制模式:
CBR:constant bitrate,固定比特率,压缩出来的体积会很大,音质最好。
VBR:Variable Bitrate,动态比特率,压缩时根据音频数据即时确定使用什么比特率,兼顾了音质和体积大小,以质量为前提兼顾文件大小。
ABR:Average Bitrate,平均比特率,是VBR的一种插值参数,做为 VBR和CBR的一种折衷选择。
MP3编码一般会使用libmp3lame库,这是一个开源的MP3编码库。适合嵌入式移植和开发。通过lame库实现MP3编码的流程是初始化编码参数、设置编码参数、初始化编码器、编码PCM数据、结束编码,最后销毁编码器。
第一个是设置设置被输入编码器的原始数据的采样率
第二个是设置最终MP3编码输出的声音的采样率,如果不设置则和输入采样率一样
第三个是设置被输入编码器的原始数据的声道数
第四个是设置最终MP3编码输出的声道模式,如果不设置则和输入声道数一样。
第五个是设置比特率控制模式,默认是CBR,但是通常我们都会设置VBR
第六个是设置CBR的比特率,只有在CBR模式下才生效
第七个是设置VBR的比特率,只有在VBR模式下才生效
接着看一下初始化编码器的接口,根据设置好的参数建立编码器
然后调用接口将PCM数据送入编码器,获取编码出的MP3数据。本实验中的双声道数据是交错在一起输入的,所以使用lame_encode_buffer_interleaved接口。
编码结束前需要刷新编码器缓冲,获取残留在编码器缓冲里的数据。
最后,编码结束后要销毁编码器释放资源。
SYS/BIOS 是一个可扩展的实时的操作系统(可拓展的实时内核)。
(1)具有非常快速的响应时间(在中断和任务切换时达到较短的延迟),响应时间的确定性。
(2)SYS/BIOS提供了抢占式多线程,硬件抽象,实时分析和配置工具。
(3)优化的内存分配和堆栈管理(尽量少的消耗和碎片)。
(4)SYS/BIOS的设计是为了最大限度地减少对内存和CPU的要求.
能够实现系统的模块化并可裁剪。
(5)用于实时调度和同步的应用程序或实时的设备。
TASK任务模块是操作系统中最基本的模块,每个任务是一个单独的线程,各个线程(任务)具有各自的优先级。SYS/BIOS任务对象是被任务模块管理的线程。
(1)任务模块动态调度和抢占任务是基于任务的优先级和任务当前执行的状态的。这确保了处理器总是给予最高优先级的线程准备运行。
(2)SYS/BIOS的系统组件可以动态及静态创建任务,可以通过调用Task_create()动态创建Task对象,也可以在配置中静态创建Task对象。
(3)动态和静态创建任务的主要区别是:动态创建的线程可以在运行时删除,而静态创建的任务占用更少的内存资源。
cfg Script脚本语言。
点击“app.cfg->Open With-> XDCscript Editor”,可修改配置。
var Task = xdc.useModule('ti.sysbios.knl.Task');
var task0Params = new Task.Params();
task0Params.instance.name = "task0";
Program.global.task0= Task.create("&taskMain", task0Params);
程序流程设计中首先要进行外设使能,接着初始化AD7606,进行管脚复用配置,初始化EMIFA,然后配置AD7606,接着进行按键中断检测,当按键按下时开始采集音频信号,进行MP3编码并将数据保存到SD卡上,编码完成后指示灯亮起即可。
本实验使用的硬件接口为AD接口和SD卡座,所需硬件为实验板,音频线,SMA转音频母口线,手机或电脑,SD卡,读卡器,仿真器和电源。
(1)使用SMA转音频母口线连接ADC的V1通道和音频线的一头,音频线的另一头连接手机或电脑,并播放音乐,采集时建议音乐音量放到最大,如果音量太低采集后播放可能会听不到音乐。
(2)将SD卡插入实验板的SD卡槽。
(3)将拨码开关拨到DEBUG模式01111,连接实验箱电源,拨动电源开关上电。
导入工程,选择Demo文件夹下的对应工程
编译工程,生成可执行文件
将CCS连接实验箱并加载程序
点击运行程序
运行程序后,LED此时是熄灭状态,按下USER0,开始采集音频数据,同时 LED2闪烁,标记正在采集数据和编码。
编码过程大约需要 1 分钟。编码结束后,LED2常亮。
实验箱断电后,取下 SD 卡。
通过读卡器将SD卡插入电脑可查看 SD 卡目录下的内容,可查看保存的 song.mp3 文件。
打开并播放 MP3 文件.