您的当前位置:首页正文

基于ADPCM算法的语音录放系统优化设计与FPGA实现

2021-03-10 来源:尚车旅游网
器件与电路

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

引言

自适应差分脉冲编码调制(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.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的语音录放实验平台

结论

笔者介绍了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]。

\"电声技术$#!!!!!!!!!!!!!!!!!!!!\"

因篇幅问题不能全部显示,请点此查看更多更全内容