基于IDE硬盘的超长时间语音录放系统摘要:选择单片机+ide硬盘的方案,权衡处理器性能和编解码算法复杂度之后选择了adpcm压缩算法,利用winbondw78e52单片机的最小开发板实现基于ide硬盘的大容量语音记录仪,极具性价比。关键词:单片机;adpcm;超长时间语音录放系统0引言基于ide硬盘的大容量语音记录仪可将拾音器获得的语音信号转换为数字信息,编码压缩后以语音文件形式存储于硬盘上,并可检索查询,将选定的语音文件实现高质量的回放。目前,各行业对语音进行录音保存变得越来越普遍,各行业使用的语音记录设备主要包括磁带式语音记录设备、基于pc机的语音记录设备和基于flash芯片的语音记录设备。这些语音记录设备由于体积过大或记录时间较短等缺点在实际应用时满足不了某些用户的特殊需求,因此亟需一种大容量、体积小巧的语音记录设备。1系统硬件与软件资源分配如图1所示:图1系统硬件结构框架系统软件的核心包括两个任务流:录音和放音。录音部分包括读adc转换值、编码、写硬盘;放音部分包括读硬盘、解码、送dac输出模拟音频信号,如图2所示。2系统设计与分析adpcm是在自适应脉冲编码调制(adaptivepulsecodemodulation,apcm)和差分脉冲编码调制(differentialpulsecodemodulation,dpcm)的基础上发展起来的。adpcm综合了apcm的自适应特性和dpcm系统的差分特性,是一种性能比较好的波形编码。它的核心算法是:①利用自适应的思想改变量化阶的大小,即使用小的量化阶(stepsize)去编码小的差值,使用大的量化阶去编码大的差值;②使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。图2系统软件资源分配及系统软件结构流程在数字语音处理中,subadpcm算法的关键是进行子带的分割,即实现数字带通滤波。凌阳的音频压缩算法sacma2000即是采用这种算法,在winbondw78e52的集成开发环境中集成并提供了sacma2000的api函数供调用,经实验发现,调用sacma2000进行录音压缩占用了较多的ram资源,需要花费较多的cpu时钟,如果加入硬盘读写程序,winbondw78e52的cpu时钟频率和2k字的ram将无法满足系统要求。在本系统中,合理的方案是采用adpcm压缩算法。3adpcm压缩算法在winbondw78e52单片机上的改进及实现3.1针对winbondw78e52的10位adc对adpcm进行改进g.721和imaadpcm的输入都是有符号数,最高位为符号位,如果将16位有符号数当成无符号数处理,即相当于在原来的数据上加上0x7fff。winbondw78e52的adc输出范围是0x0000~0xffc0,理论上静音时adc的输出是0x7fc0,即硬件上将双极性的语音输入信号调理成了0~2v的单极性信号,引起adc的输出数据加上了0x7fc0,这一点和将imaadpcm输入信号的16位有符号数当成无符号数处理吻合。如果能将imaadpcm算法的实现改成无符号数运算,那将可以省去将winbondw78e52的adc输出值处理成有符号数。imaadpcm算法在实现的时候,约定初始预测值和index步长调节因子均为0,但是经过上一节介绍的方法改进后,相应地,初始预测值应改为0x7fc0,因为上述的改进方法只是在原数据上加上一个固定的值,将其”抬高”为无符号数,对adpcm编码过程的差值并不产生影响,因此初试index步长调节因子不需改变,仍为0。编解码过程中的溢出判决相应的也要改为下限为0,上限为0xffc0。3.2利用matlab模拟winbondw78e52的硬件条件进行仿真matlab提供了丰富的数据类型和位运算指令,这为利用matlab模拟winbondw78e52的硬件条件进行仿真提供了条件。首先,将语音信号样本处理为16位的无符号整型数据,然后定义uint16类型变量使得与winbondw78e52的数据位宽一致。在运算过程中,matlab自动对数据类型进行检查,因此不需要进行误差补偿。语音信号s(n)的取值范围为-1~+1,在这个范围内,可近似地认为s(n)服从正态分布,从而可知其snr将显著的提高。3.3编解码程序流程图编解码程序流程图如图3、图4所示。图3解码程序流程图4编码程序流程4系统测试4.1编解码程序测试在集成开发环境中对编解码程序进行时延测试。反映的也是处理器和编解码程序的综合效率。考虑到8khz中断间隔125us,因此系统采用的编码帧长为16字,解码帧长为4...