×
单片机 > 单片机程序设计 > 详情

基于G.729语音压缩编译码算法的嵌入式语音存储系统设计

发布时间:2020-06-06 发布时间:
|

    为了有效地节省语音数据的传输带宽和存储系统的磁盘空间,需要在保证语音质量的前提下尽可能降低其编码比特率。本设计采用经过优化的G.729语音压缩编译码算法,以ARM处理器为载体,开发的嵌入式语音存储系统可实现语音信号的海量存储,而且处理速度快、可靠性好、扩展方便。通过严格的测试和评估,该系统能够实现对大量语音数据的压缩和记录,各项指标基本达到了预期的水平。


    1 系统控制核心

    嵌入式操作系统软硬件结构框图如图1所示,由硬件层、驱动层、系统层和应用层组成。硬件层包括嵌入式处理器最小系统、存储器(SD RAM、Flash、ROM等)、通用设备接口和I/O接口(A/D、D/A、I/O等),其中Linux实时操作系统和应用程序都可以固化在ROM中。硬件层的核心是嵌入式处理器,在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式处理器最小系统。中间的驱动层将上层软件和底层硬件分离开,为其连接提供接口。系统层主要负责软件硬资源的分配、内存管理、任务调度、文件处理等,是软件层的核心。应用层为用户提供编程接口,实现各种应用功能。

   

    1.1 系统软件核心

    Linux操作系统的内核主要由进程调度、内存管理、虚拟文件系统、网络接口、进程间通信五个子系统组成,各个子系统之间都存在着不可分割的依赖关系。内核为设备驱动提供支持,实现设备控制与应用;设备驱动为上层提供标准接口,完成硬件细节的封装。可以根据设计需要对内核模块进行适当的裁减,制作出理想、实用的操作系统。

    1.2 系统硬件核心

    Samsung公司的S3C2440A处理器是一款以手持设备为主而设汁的芯片。这款处理器支持NOR Flash和NAND Flash启动方式,内部集成LCD、I2C总线、AC97、Camera等控制器。提供丰富的接口资源,方便与外设连接,易于扩展。

    2 G.729算法概述

    2.1 G.729编码原理

    G.729编码标准采用CS-ACELP语音压缩编码技术,其核心原理是线性预测和二级量化。每个10 ms的语音帧包含80个采样点,在每个这样的语音中都要进行线性预测(LP)分析,计算出LP滤波器系数,再转换为线性谱对参数(Line SpeCTRum Pari,LSP),并使用有两个阶段

    的预测矢量量化器(Vector Quantization,VQ)进行18比特量化。然后编码器以原始语音和合成语音的误差感觉加权最小为准则采用A-B-S(Analysis-By-Synthesis,分析合成)方法搜索激励信号,激励参数(固定码书参数和自适应码书参数)每个子帧(5 ms帧长,40个采样点)确定一次,感觉加权滤波器的系数由未量化的LP系数产生。

    2.2 G.729解码原理

    解码是编码的逆过程,其原理为:首先从获得的码流中提取出参数的索引,这些参数包括LP滤波器系数、自适应码书矢量以及固定码书矢量和增益,它们分别解码后,可获得一个LSP系数、两个音节延迟、两组自适应码书和固定码书增益等对应于10 ms语音帧的编码器参数。

    然后将LSP系数进行内插操作,转换为每个5 ms子帧的LP滤波器系数,再对每个子帧进行如下操作:

    ①经各自增益缩放的自适应矢量和固定码本矢量相加,得到重建的激励信号;

    ②将激励信号通过LPC合成滤波器,得到重建语音;

    ③重建的语音信号经过各种滤波器的后续处理,实现信号的放大和改善。

    2.3 G.729算法优化

    在G.729编码算法中,采用量化码本结构。其基本原则如下:首先计算出K维码本里的各个码字矢量的平均值并存储起来;然后求出输入信号矢量平均值和各个码字矢量平均值的均方误差值;最后用遍历法找到这些均方误差中的最小值Dmin,与之相对应的码字即为最佳逼近码字。采用这种搜索方法加快了编码速度,减少了搜索时间,并没有改变矢量量化的精度。

    3 系统硬件结构

    系统硬件结构框图如图2所示。S3C2440A作为整个系统的主控芯片,DC电源、复位电路、时钟电路作用于系统的每个部分;存储模块包括SDRAM、Flash以及外接的CF或SD卡等;调试模块包括JTAG接口、RS232接口以及网络接口三个部分;音频模块的主要工作由编解码器UDA1 341完成,扩展接口由USB接口、IDE接口构成,交互模块由TFT LCD和触摸屏构成。其中,音频模块和IDE扩展接口是研究的重点。

   

    3.1 系统外围电路

    系统设计的外围电路都是ARM最小系统所必需的。电源电路为系统提供能量,是系统工作的基础。设计电源电路时要考虑的因素很多,主要包括输入及输出的电压范围、输出纹波大小、电池兼容和电磁干扰等,系统采用DC-DC转换芯片LM1117将5 V的电压转换成1.3 V、2.5 V、3.3 V后供系统使用。采用复位芯片MAX811产生的复位信号,既能保证上电复位的时间,又能保留手动复位的特点。时钟电路为系统提供工作时钟,主时钟采用12 MHz晶振作为时钟源,RTC时钟采用32.768 kHz晶振作为时钟源。通过JTAG接口,可以访问芯片内部的所有部件,是实现系统开发、调试的高效手段。为了减小系统体积,采用10针简化的JTAG接口,其接口电路如图3所示。

   

    SDRAM存储器选择Samsung公司的K4S561632E-UC75,其存储容量为32 MB,具有存取速度快、成本低廉的特点,主要用来存放执行代码和变量,是系统启动之后主要进行存取操作的存储器。Flash存储器选择Samsung公司的K9F1208U0CNAND Flash存储器,其存储容量为64 MB,可以擦写一百多万次,具有很长的使用寿命,把启动程序、内核代码等固化到Flash闪存中能加速系统的启动、提高系统的稳定性和可靠性。

    3.2 音频采集与处理模块

    该模块采用Philips公司生产的音频芯片UDA1341TS,它支持I2S数据总线格式,且具有低功耗、低电压及DSP语音功能等特征。I2S(Inte grate Interfaceof sound)是Philips公司提出的串行数字音频总线协议,音频数据与控制信号、时钟信号分开传输,避免了由时钟带来的抖动问题,因此系统中可省略消除抖动的器件。

   

    音频芯片与主控芯片的连接如图4所示。I2S音频接口包括5根信号线,其中音频模块的同步时钟CDCLK由S3C2440A提供,该时钟控制音频的A/D、D/A采样速率。串行时钟SCLK,也叫位时钟(BCLK),即每一个SCLK脉冲对应一位数字音频数据。帧时钟LRCK用于左有声道的切换,LRCK为1表示正在传输的是左声道的数据,为0则表示正在传输的是右声道的数据。DATAI是串行数据输入信号线,DATAO是串行数据输出信号线,所传输的音频数据用二进制补码表示。L3总线接口包括3根信号线:L3MODE/GPB2是微处理器接口模式信号线;L3CLOCK/GPB4是微处理器接口时钟信号线;L3DATA/GPB3是微处理器接口数据线。L3总线接口主要用于传输控制信号,相当于混音器控制接口,可以调节输入/输出音频信号的音量、低音提升、控制去加重等。

    3.3 IDE硬盘控制模块

    IDE接口是硬盘和光驱普遍使用的外部接口,接口采用16位数据总线并行传送,体积小、速度快,兼容性强。IDE接口主要有可编程输入输出(Programming Input Output,PIO)和直接内存访问(Direct MCMory ACCess,DMA)两种传输模式。PIO模式占用大量的系统资源,数据传输速率较低;DMA模式需要额外的驱动程序或设置,系统资源占用少、执行效率较高。本设计选择DMA模式。

   

    S3C2440A与硬盘接口如图5所示。其接口信号分为片选信号、数据信号和控制信号3个部分。硬盘上寄存器分为两组,分别由/CS0和/  CS1选中其中的一组,A0~A2引脚用于组内寄存器寻址,包括数据寄存器、错误寄存器、扇区计数器、扇区号寄存器、低柱面号寄存器、高柱面寄存器、状态寄存器和命令寄存器。数据线D0~D15用于数据的双向传输。/DIOR、/DIOW是读写控制信号;/Reset是硬盘复位信号;DMARQ(DMA请求信号)和/DMACK(DMA应答信号)是专用于DMA模式的信号。

    4 系统软件实现

    4.1 语音数据的采集

    语音采集部分主要是完成UDA1341TS驱动程序的编写,其初始化相关代码如下:

   

    端口初始化包括L3总线接口和I2S接口的设置,首先将与L3接口相连的通用I/O口GPB2、GPB3、GPB4设置为输出模式,然后设置与I2S控制器输出信号相关的GPIO引脚,将GPE0~GPE4这5个引脚设置为I2S接口的信号模式。UDA1341TS芯片初始化部分包括L3接口时序和协议的模拟,完成采样速率、数据格式等参数的设置。系统采样速率为8 kHz,使用时钟为384 fs,数据输入格式设置为MSB-JustifLED模式。接下来通过“audio_init_dma()”申请DMA通道,输出音频缓冲区的DMA通道设为通道2,输入音频缓冲区的DMA通道设为通道1。若初始化失败会返网相应的错误标志,初始化成功后方可进行后续操作。

    4,2 IDE接口函数

    硬盘驱动程序实现分为设备初始化、打开设备、设备I/O操作和释放设备等几部分。要完成硬盘数据交换的工作,就需要对寄存器进行频繁的读写操作,为了方便在程序中的调用,把这些和硬件操作密切相关的操作都写成了接口函数,其函数说明略——编者注。

    4.3 系统主程序流程

    主进程开始后首先初始化采样参数,包括采样速率、采样点数、数据存储格式及采样通道,若初始化不成功会返回相应的错误标志,并作出相应的出错处理,成功后可继续下一步操作。然后通过键值判断数据的存储区是选择Flash还是选择硬盘,并初始化相应的存储区,这是保证系统在没有外扩硬盘的情况下也能正常运行,只不过是数据存储量较小而已;若选择操作硬盘,但硬盘未连接,仍然会返回相应的错误标志,并进入出错处理函数继续执行。接下来根据键值判断是否进行压缩处理,若进行压缩处理,则相应的编解码标志置位;根据该标志确定是否启动编解码进程,即系统能存储未压缩的数据,也能存储压缩后的数据,可以根据需要进行适当的选择。启动A/D转换进程并进行语音数据的存储,相当于录音的过程;数据存储完成后,即录音结束后,启动D/A转换进程进行语音播放。录音和播放可以同时进行,为了测试方便,这里把这两个过程分离开来。

    总的来说,系统主进程创建了A/D、D/A转换进程和编解码进程,结合Linux的共享机制和进程间通信等手段,实现了语音信号的采集、压缩、存储、回放等环节。

    系统主程序流程图略——编者注。

    5 系统测试与结果分析

    系统测试内容主要包括语音质量、语音存储时长、语音压缩效率三个方面。语音质量是指经传输、处理后音频信号的保真度,是衡量语音编码算法优劣的关键指标。其评价方法分为主观评定和客观评定两类。系统采用的主观评定方法是平均意见得分(Mean OPINion Score,MOS),即以主观打分来度量,其评价标准分为5个等级,MOS评价标准如表2所列。客观评定选择信噪比为评价指标,信噪比(Signal Noise Ratio,SNR)定义为信号与量化噪声的方差的比值,计算公式为:

    

   

    其中分别为信号方差和噪声方差。通过测试系统的主观评价指标MOS可以达到3.8分,接近于电话语音质量,与原始语音的区别不明显;系统的客观评价指标SNR为58 dB,噪声的影响在可以接受的范围内。语音时长的统计,依赖于扩展IDE硬盘的容量,测试选择3G容量的硬盘;记录未经压缩的语音数据为750个小时,而记录压缩后的语音数据可达7500多个小时;可见语音压缩的效率可以达到10多倍,已达到理想的效果。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址