PartsandCircui
文章编号:1002-8684(2007)S2-0027-04
T基于ADPCM算法的语音录放系统
优化设计与FPGA实现
徐朝炯,李
平,高
峰
(电子科技大学微电子与固体电子学院,四川成都610054)
摘【
论文・・
要】介绍了自适应差分脉冲编码调制技术ADPCM的编解码原理和结构,利用硬件描述语言设计并仿真了
IMA-ADPCM编解码器及相关电路,以完成语音的录放功能。通过优化编解码器的电路结构,使系统资源消耗减小
了1/3。实验平台以Altera的FPGA开发板为基础,实现了语音的录放,语音回放效果达到预期目标。关键词】自适应差分脉冲编码调制;语音编解码器;优化;FPGA【
中图分类号】TN912【
文献标识码】A【
DesignandOptimizationofVoiceRecord/PlaybackSystemBasedonADPCMandtheImplementationonFPGA
XUChao-jiong,LIPing,GAOFeng
(CollegeofMicro-ElectronicsandSolid-stateElectronics,UESTofChina,Chengdu610054,China)
【Abstract】Inthispaper,theprincipleandarchitectureoftheencoderandthedecoderofAdaptiveDifferential
PulseCodeModulation(ADPCM)areintroduced.Then,theVLSIimplementationofIMA-ADPCMencoder/decoderandrelatedcircuitsisproposedwithVerilogHDLdedicatedlyforvoicerecord/playbackapplication.Theresultandexplanationarepresentedaftersimulation.
Basedonourworking,
resourceconsumptionisreduced1/3by
optimizingthestructureoftheencoderanddecoder.Finally,asimulationplatformisestablishedonthefoundationofAltera′sUP3educationkit.Thefunctionofvoicerecord/playbackisrealizedandtheperformancegainsourends.
【Keywords】ADPCM;voiceencoder/decoder;optimize;FPGA
1
引言
自适应差分脉冲编码调制(ADPCM)是一种音频
是将相邻两个样本相减,然后对这个差值编码,由于被量化对象的变化范围减小了很多,记录信号的容量也就减少了,基于这种原理的编码技术叫做差分脉冲编码调制(DPCM)。ADPCM是一种比DPCM更高效的编码方式,它可自适应的改变量化步长,并且根据当前值进行预测,用于下次编码,使实际样本和预测值之差总是最小[1]。可选的幅度差的量化比特位数有8bit,
有损压缩编码方式,它的特点是文件体积小,音质较佳。在录音应用领域,音质效果要求并不高的地方,
ADPCM音频格式可基本胜任;另外,这种简单的波形编码方式相对于其他的音频编码格式来说,实现难度较小。目前,市场上MP3播放器大多采用了G.726标准的ADPCM实时压缩算法,对语音支持24Kbit/s或
4bit和2bit。
ADPCM编码的结构框图如图1所示。在编码器中,输入样本X[n]与前一次样本X[n-1]的预测信号
32Kbit/s的编码速率,在32MByte的Flash中可连续录制2个多小时语音。此外,由于ADPCM具有良好的话音质量和抗干扰性能,在卫星通信、ISDN中得到了广泛应用。
Xp[n-1]求差,得到差值D[n],D[n]经过自适应量化器后得到ADPCM编码C[n];为了得到Xp[n-1]需要先将编码信号C[n-1]反量化为样本差值Dq[n-1],然后和上一次的预测样本Xp[n-2]相加,最后将和送入自适应预测器得到预测值Xp[n-1]。其解码器相对简单一些,ADPCM编码C[n]经过自适应反量化器恢复出差值Dq[n],然后
2ADPCM算法基本原理
由于音频信号具有主观冗余和客观冗余,去掉这
些人耳感知不到的信息,对听觉效果基本没有影响,这样就可达到压缩的目的。最简单的消除冗余度的方法
电声技术
#\"!Parts
器件与电路
andCircuit
测值Xp[i]来得到更好的预测,所以该预测器并不是自适应的。
自适应量化器
与上一次输出Y[n-1]的预测值求和,就可恢复出第n个样本值Y[n]。
X[n]
\"D[n]C[n]
3
3.1
语音录放系统的设计与优化
设计前的考虑
由于ADPCM算法目前在语音录音领域应用较
Xp[n-1]自适应预测器
Xp[n]
\"Dq[n]
Dq[n]
自适应反量化器
多,而且基于该算法的语音录音系统实现起来比较容易,因此设计拟定的目标为通过ADPCM编解码器对短时语音进行录音,并能实现语音的回放。
设计中采用8bitAD/DA,4bitADPCM编码,系统工作频率8kHz,那么PCM信号的码率为8kHz×8bit=
(a)ADPCM编码器
C[n]
自适应反量化器
\"Y[n]
Y[n-1]
自适应预测器
(b)ADPCM解码器
64Kbit/s,ADPCM编码的码率8kHz×4bit=32Kbit/s,由此可知压缩率为64Kbit∶s/32Kbit/s=2∶1;另外,由于采用4bitADPCM编码,每秒需32Kbit/4bit=8K个存储单元(每个存储单元4bit),即4KByte的存储空间。由于设计中采用的FPGA(CycloneEP1C6Q240C8)内部只有90Kbit存储空间,此外还需要为算法中使用的步长表和修正表[5]预留一定存储空间,所以计划录音时间2s,那么录音编码会占用空间32Kbit/s×2s=64Kbit,即64Kbit/4bit=16K个存储单元,那么存储器的地址线为14bit。
图1ADPCM编解码结构框图
在由差值信号得到ADPCM编码过程中,由于量化器可根据差值信号的幅度自动调节步长,所以称它是自适应的。当信号变化很大时,步长也增大;当信号变化缓慢时,步长也跟着减小。同样,在由ADPCM编码反量化的过程中,反量化器会通过ADPCM编码选择一个索引,然后根据索引调整步长,所以ADPCM采用的是非均匀量化。
这里有两点值得注意,一是在编码器中为了得到预测值,采用了反量化器,而反量化器的输出Dq[n]似乎可由输入差值D[n]来代替。由反量化器得到Dq[n]的方式是为了将编码值反馈到前级,以抑制突变信号(变二是自适应预测器化超出两倍步长)造成的错误累加。
的预测效果影响着ADPCM编码质量,好的预测器根据当前值X[n]以及前几次的值调整预测值,以尽可能地减小编码过程造成的误差,但是系统复杂度和资源消耗也会相应增加。
笔者采用的是IMA(InteractiveMultimediaAsso-
3.2系统框图与工作过程
系统(如图2所示)主要由编码器Encoder、存储器
解码器Decoder、控制单元Control、时钟Clock这RAM、
5个模块组成。在播放(play)和录音(record)2个按键的作用下,由Control部分产生存储器使能信号CS、地址信号Addr和读写控制信号WE,编码器的使能信号
En_en和复位信号RE_RST或者解码器的使能信号En_de和复位信号PL_RST。
Clk(14.318MHz)时钟
ciation)ADPCM算法,该算法是一种简单快捷的方法,可在20MHz的386级PC上对44.1kHz,16bit立体声的声音进行实时解码[2]。著名的WestWood在它的许多游戏,如沙丘II、命令与征服、红色警戒等中保存声音的数据文件(AUD格式)大多使用IMA-ADPCM压缩。另外,该压缩方式在手机铃声和MP3中的WAV录音中得到了很好的应用。这种编码方式的秘密在于它的预测器相当简单,它直接使用上一次的预测值Xp[n-1]与反量化值Dq[n]的和作为下一个预测值。简单地说,它的预测器就是一个延迟单位。由于没用任何其他预
PCM
编码器
4bit
存储器
4bit
解码器
PCM
En_enRE_RSTAddrWECS播放
控制单元
En_dePL_RST
录音
图2基于FPGA的语音编/解码系统结构图
工作过程为:
录音过程:按录音键,录音过程开始→在约1个时钟周期里编码器复位,之后编码器和存储器开始正常工作→对输入的8bitPCM信号编码并写入存储器
RAM→录音键松开,录音结束。
!电声技术#\"器件与电路
PartsandCircui
播放过程:按播放键,播放过程开始→在约1个时钟周期里解码器复位,之后解码器和存储器开始正常工作→循环读RAM并由解码器解码输出8bitPCM信号→播放键松开,播放结束。
T3.3.5系统仿真
在对系统仿真过程中,先将编码器直接与解码器
控制单相连,搭建一个最小系统,而不用考虑存储器、元和时钟分频;当仿真通过后,再加入这些模块对整个系统进行仿真;当系统功能仿真通过后,再进行时序仿真。
图3(a)为编码器和解码器工作的仿真图,该仿真模型中只有编码器和解码器,其控制信号直接由测试向量提供。由这个模型可直接将被编码的信号与解码信号进行比较,以判断这2个模块是否正常工作。图中CLK_8K为系统时钟,PCM_IN为测试文件中编写的8bitPCM输入信号,code为编码器输出的4bit编码,PCM_OUT为解码器输出的8bitPCM信号。由图可以看出解码信号PCM_OUT与输入信号PCM_IN非常接近,如当输入依次为2h,5h,9h,Bh,Fh,10h,10h,
3.3电路设计与仿真
笔者采用硬件描述语言[3]对电路模块进行设计,使
用QuartusII进行综合,通过ModelSim进行的功能仿真和时序仿真。为便于观察,给出的仿真图是在Active
HDL环境下进行的。
3.3.1
编码器设计
将量化步长表和索引修正表单独设计成2个模块,以便于后面直接调用。输入PCM信号减去预测信号,由差值正负可首先得到ADPCM编码的最高位,该差值经过3次与步长、1/2步长、1/4步长的比较得到剩下的3位编码;得到的ADPCM编码再经过与刚才量化过程相反的步骤恢复出差值;将这个恢复出来的差值与上一个预测值相加,便得到新的预测值,延迟一个周期,用于计算下一个差值。
Fh,Dh,Ah…时,对应输出为1h,5h,9h,Ah,Eh,Fh,10h,Fh,Eh,Ah…,说明编码器/解码器工作正常。
系统整体的仿真(如图3(b)所示)共分为2部分:第1部分为录音(编码和存储编码),此时RECORD=‘(录音键按下),EN_en=‘(编码器使能),CS=‘,0’1’1’(存储器使能并且写数据);第2部分为播放WE=‘1’(读存储器和解码),此时PLAY=‘(播放键按下),0’(解码器使能),CS=‘,WE=‘(存储器使EN_de=‘1’1’0’能并且读数据)。为方便观察,输入/输出PCM信号都是以模拟方式显示。由图可直观地看出,解码信号能够很好地将输入信号恢复。
3.3.2解码器设计
解码仍然使用上面提到的量化步长表和索引修正
表;解码过程与编码过程求预测值的过程相似,将
ADPCM编码反量化,其过程与编码器中量化的过程相反,由低3位编码修正步长,然后由这3位编码决定是否将步长与1/2步长、1/4步长累加,得到的和经过修正由编码最高位决定其正负,为正时不变,为负时变为补码,这个反量化出来的差值再与上一个恢复出来的
PCM信号相加就可恢复出本次PCM信号。3.3.3
控制单元设计
由录音/播放信号可得到一系列编码/解码/存储的控制信号;由于录音/播放信号为异步输入,所以需要分别使用2级触发器对它们进行同步;得到的录音同步信号先对编码器清零,并将编码器和存储器使能,此时解码器不工作;得到的播放同步信号先对解码器清零,并将解码器和存储器使能,此时编码器不工作。另外控制器内还要设计一个计数器,为存储器提供读写地址。
3.3.4存储器和时钟设计
由前面的分析可知RAM为64Kbit的存储空间,共
分为16K个单元,地址线为14bit,数据线为4bit,由于设计的目标具有非实时性,所以采用单口RAM。整个系统使用8kHz时钟,所以需要设计一个分频器,时钟源为开发板上时钟管理芯片输出的14.318MHz的时钟。
3.4电路优化与结果比较
在编码器中,有一个量化器和一个反量化器,在设
计中可以将这2个模块的工作用1个模块来完成。量化过程是从信号的差值转换为编码,这个过程中需要
电声技术
#\"!Parts
器件与电路
andCircuit
将步长移位,用差值分别与它们进行比较得到编码。而反量化过程,是从编码出发,经过查表得到步长,将步这2个过程编长移位后,由编码控制将它们进行累加。
码是相同的,查表得到的步长也是相同的。量化时,当差值比步长或者被移位的步长大时,该位(低3位中的某一位)的编码为1,否则为0;反量化时,当该位编码为1时,需要将步长或者移位的步长累加,编码为0时所以可以在量化的同时,对步长或者移位则不用累加。
的步长进行累加,完成反量化过程。
另外,前面提到过解码的过程与编码器中求预测值的过程很相似。编码器中由编码反量化得到一个差值,然后将这个差值与上一次的预测值相加得到本次预测值;解码器也是由编码反量化得到差值,然后将差值与上一次的输出求加,得到本次的输出。所以从理论上讲,解码器可以复用编码器的资源。从系统实现来看,由于录音与播放不是同时进行的,所以解码器与编码器电路不会发生冲突。复用时需要注意,录音和播放都要使用复用的单元,而且其输入编码,可能来自量化器,也可能来自存储单元。
将原来的设计与经过优化的版本使用FPGA开发工具QuartusII综合,选用的器件为CycloneEP1C6Q-
实验表明,播放出来的语音信号能够较好地与被录的语音信号匹配,可以录音2s,并能实现连续播放。
图4
外围电路
放大/滤波
PCM_IN8bitPCM_OUT8bit
UP3
EP1C6Q240C8
AD/DA功率放大
基于FPGA的语音录放实验平台
5
结论
笔者介绍了ADPCM算法的基本原理,并使用
VerilogHDL对以IMA-ADPCM编解码器为基础的语音录放系统进行了设计与优化,然后使用QuartusII综合。结果表明,通过解码器复用编码器单元使资源减少了32.7%。最后通过FPGA实验实现了语音的录放功能,播放效果较为理想。后续工作是利用噪声整形和插值滤波等技术改善语音质量。
参考文献
[1]林福宗.多媒体技术基础[M].2版.北京:清华大学出版
社,2002.
240C8,共有5980个逻辑单元(LogicElements),得到的结果为表1所示。
表1
综合结果比较
合并量化器与
反量化器
复用编码器实现解码
[2]SALOMOND.数据压缩原理与应用[M].2版.吴乐南,
译.北京:电子工业出版社,2003.
[3]李平.电子设计自动化快速入门教程[M].北京:高等教
育出版社,2003.作者简介
最初版本
资源消耗所占比例/%
3977
3886
2674
徐朝炯,硕士,主要研究方向为数字音频压缩、数字前端设计;李平,教授,主要研究方向为超大规模集成电路;
高峰,硕士,主要研究方向为数字音频压缩,数字前端设计。
4FPGA实验
为实现语音的录放,实验中使用传声器输入,然后
[责任编辑]史丽丽[收稿日期]2007-02-10
!!!!!!!!!!!!!!!!\"将语音信号放大,并将高于4kHz的信号(语音信号的频带大致为200Hz ̄4kHz)的滤除,之后将语音信号使用8bitAD量化,送入FPGA。播放时,从FPGA输出
8bitPCM信号,然后使用8bitDA转换得到模拟语音信号,再经过功率放大由扬声器输出。
本实验使用的主要芯片有:8bitAD(AD0804,转换时间<100!s,误差±1LSB);8bitDA(DAC0800,建立时间100!s,误差±1LSB,差分电流输出);运算放大器
!!!!!!!!!!!!!!!!!!!!\"
大连COCO酒吧应用玛田产品大连COCO酒吧一家集文化﹑餐饮﹑人文风情于一体的大型酒吧。酒吧采用8只玛田MARTIN波前技术W8C系列,12只MARTIMF12,4只MARTINS18,12只MARTIN波前技术WSX系列等音响设备。
!!!!!!!!!!!!!!!!\"TL084,功率放大芯片LM386;AlteraUP3开发板,FPGA采用CycloneEP1C6Q240C8,时钟芯片P16C106[7]。
\"电声技术$#!!!!!!!!!!!!!!!!!!!!\"
因篇幅问题不能全部显示,请点此查看更多更全内容