0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA验证所设计的ADPCM算法语音编解码电路

电子设计 来源:郭婷 作者:电子设计 2019-07-02 08:08 次阅读

近年来,多媒体技术逐渐深入到人们的生活中。MP3播放器已经成为流行的便携式音频播放设备,由于MP3编码算法非常复杂,目前,一部分MP3播放器的录音功能主要基于ADPCM算法和DSP来实现。本文阐述了ADPCM语音编解码VLSI芯片的设计方法以及利用FPGA硬件实现。

ADPCM算法及其编解码器原理

ADPCM(Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制)综合了APCM的自适应特性和DPCM系统的差分特性,是一种性能较好的波形编码。它的核心思想是:利用自适应改变量化阶的大小,即使用小的量化阶去编码小的差值,使用大的量化阶去编码大的差值;使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。ADPCM记录的量化值不是每个采样点的幅值,而是该点的幅值与前一个采样点幅值之差。

ADPCM是利用样本与样本之间的高度相关性和量化阶自适应来压缩数据的一种波形编码技术。ADPCM标准是一个代码转换系统,它使用ADPCM转换技术实现64kb/s A律或u律PCM(脉冲编码调制)速率和32kb/s速率之间的相互转换。ADPCM的简化框图如图1所示。

ADPCM编解码器的输入信号是G.711 PCM代码,采样率是8kHz,每个代码用8位表示,因此它的数据率为64kb/s。而ADPCM的输出代码是“自适应量化器”的输出,该输出是用4位表示的差分信号,它的采样率仍然是8kHz,它的数据率为32kb/s,这样就获得了2∶1的数据压缩。

电路的整体结构

基于ADPCM算法,可将语音编解码VLSI芯片分成编码、解码、存储、控制和时钟几个模块。编码模块实现数据压缩功能,将输入的PCM信号转换成ADPCM码;存储模块在控制模块的作用下,保存编码所得的ADPCM码;解码模块实现解压缩功能,将ADPCM码转换得到PCM码;控制模块的作用是控制其他模块的协调工作;时钟模块主要实现对外部晶振的原始时钟信号进行分频,以得到电路系统实际所需的时钟信号。

电路整体结构如图2所示,其中En_en、En_de分别是编码和解码的使能信号,RST则为复位信号。当WE为“1”时,RAM写有效,而当 WE为“0”时,RAM读有效,CS为“1”时,RAM可进行写或者读操作。

基于FPGA验证所设计的ADPCM算法语音编解码电路

(a) ADPCM编码器

基于FPGA验证所设计的ADPCM算法语音编解码电路

(b)ADPCM解码器

图1 ADPCM简化框图

电路设计过程

本文采用Top-down方法进行电路设计。主要设计流程如下:首先基于Verilog HDL运用Active-HDL进行电路的RTL级描述和功能仿真;将经过功能仿真正确的程序在Quartus II开发系统中进行综合和适配;接下来将得到的网表文件(.vo)和具有时延信息的反标文件(.sdo)调入ModelSim SE中,并加入所选器件相应的器件库进行时序仿真;时序仿真通过后,将Quartus II得到的“*.sof”文件通过JTAG配置模式下载到FPGA中进行不可掉电的实际测试,也可将“*.pof”文件通过AS配置模式下载到FPGA中进行可掉电的实际测试。电路系统的顶层程序如下。

基于FPGA验证所设计的ADPCM算法语音编解码电路

图2 电路整体结构图

module ADPCM_TOP ( PCM_OUT,PCM_IN ,RECORD,PLAY,CLK, CLK8K);

parameter ADDR_WIDTH=14;

parameter PCM_WIDTH=8;

input [PCM_WIDTH-1:0] PCM_IN ;

wire [PCM_WIDTH-1:0] PCM_IN ;

output [PCM_WIDTH-1:0] PCM_OUT ;

wire [PCM_WIDTH-1:0] PCM_OUT ;

input CLK, RECORD,PLAY;

output CLK8K;

wire [3:0] code_in,code_out;

wire en_encoder,en_decoder,re_rst,pl_rst,WE,CS,CLK_8K;

wire [ADDR_WIDTH-1:0] ADDRESS;

assign CLK8K =CLK_8K;

CLOCK_GE U0 (CLK,RECORD, CLK_8K);

encoder_new U1 ( PCM_IN,re_rst ,en_encoder, CLK_8K ,code_in );

RAM U2 (ADDRESS,WE,CS,CLK_8K,code_in,code_out);

decoder_new U3 (pl_rst, CLK_8K ,code_out ,en_decoder,PCM_OUT);

controllogic U4 (CS,re_rst,pl_rst,en_encoder,en_decoder,WE,ADDRESS,RECORD,PLAY,CLK_8K);

endmodule

子模块电路设计及仿真

整个语音编解码VLSI芯片包括编码电路、解码电路、存储电路、控制电路和时钟电路几个部分。下面分别具体描述关键电路的设计。

1 编码电路

编码电路实现数据压缩功能,将输入的PCM信号转换成均匀的PCM码,然后与预测信号进行差分,得到的差分信号经过“自适应量化器”进行压缩编码得到ADPCM码,ADPCM码被返回经过“逆自适应量化器”以及“自适应预测器”用来构建下一个预测信号。编码电路仿真波形如图3所示,其中PCM_IN为编码器输入信号(PCM码),CODE为编码后得到的输出信号(ADPCM码)。

基于FPGA验证所设计的ADPCM算法语音编解码电路

图3 编码电路仿真波形

2 解码电路

解码电路实现解压缩功能,将ADPCM码经过“逆自适应量化器”得到量化差分信号,量化差分信号与预测值相加得到重构信号,然后转换成PCM码。解码电路仿真波形如图4所示,其中CODE为解码器输入信号(ADPCM码),PCM_OUT为解码后得到的输出信号(PCM码)。与图3中编解码前的PCM_IN对比,可以看出解码误差很小。

3 其他模块

控制电路控制其他电路模块的协调工作,在编码的同时使能存储器写入信号,使编码电路输出数据可以及时存入存储器;在解码的同时使能存储器读出信号,编码和解码不能同时进行。时钟电路主要实现对外部晶振的原始时钟信号进行分频,以得到电路系统实际所需的时钟信号。本系统采用的外部晶振固有频率为14.318MHz,经过分频后可以获得8kHz时钟。存储电路在控制电路的作用下,保存编码所得的ADPCM码(32kb/s),由于只需验证电路的功能,所以只设定了2s的录音存储空间,即64kb存储容量。

整体电路仿真

在子模块电路仿真正确后,对系统整体进行仿真,可以得到图5所示波形。此次仿真输入信号PCM_IN激励采用Testbench产生。在编码使能信号RECORD为“0”时,开始编码,RECORD跳变到“1”时,编码被屏蔽;此时解码使能信号PLAY为“0”,开始解码,PLAY跳变到“1”时,解码被屏蔽。从图中可以看出编码前输入信号PCM_IN的激励和解码后输出PCM_OUT的响应基本符合。由于ADPCM算法本身是有损压缩,可以确定本电路系统的设计是正确可靠的。

FPGA验证及结论

本文基于FPGA验证所设计的电路。这里选用Altera公司Cyclone系列的EP1C6Q240C8器件,其内部有90kb的存储容量,6k个逻辑单元,2 个PLL。由于电路采用8kHz采样频率,编码后的ADPCM码为4位,设定录音时间为2s,所以需要64kb存储容量;同时,设计需要大约400个左右的逻辑单元。所以选用此低成本的FPGA即可满足设计要求,而且基本上充分利用了内部资源。此芯片的引脚有240 个,能满足外面的引脚连接,而且价格也易于接受。

FPGA验证表明:电路的最大时钟延迟为26.903ns,最高工作频率可达37.17MHz,可以很好地再现被录入的语音,具有较高的保真度和很好的实时性。在电子地图、车载信息终端语音播报、治安报警系统,特别是便携式语音记录装置等方面具有较高的应用价值。同时,也指明了数字语音压缩处理高效设计方法的方向。

基于FPGA验证所设计的ADPCM算法语音编解码电路

图4 编码电路仿真波形

基于FPGA验证所设计的ADPCM算法语音编解码电路

图5 系统仿真波形


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21309

    浏览量

    593129
  • 解码器
    +关注

    关注

    9

    文章

    1073

    浏览量

    40156
  • 存储
    +关注

    关注

    12

    文章

    3854

    浏览量

    84656
收藏 人收藏

    评论

    相关推荐

    FPGA进行视频编解码

             求助用FPGA进行视频编解码,可行吗?尤其在高清领域,FPGA强大的计算能力似乎很有优势,但
    发表于 02-06 09:40

    语音和音频统一编解码算法研究

    最近在研究MPEG-D标准的语音和音频统一编解码算法(USAC),USAC是2011年才开始提出来的,感觉挺有研究意义的,大家有兴趣可以互相交流下
    发表于 07-20 15:38

    振南对ADPCM音频编解码原理的一些通俗阐述【附振南的ADPCM解码原代码】

    写ZN-X开发板整板测试程序的后期,振南开始转向专注于ADPCM音频的解码算法。对于音视频的编解码,振南一直是很感兴趣的。VS1003录音向外输出的数据是经过
    发表于 06-17 14:35

    如何去设计ADPCM语音编解码电路

    ADPCM算法及其编解码器原理是什么?如何去设计ADPCM语音编解码
    发表于 05-06 06:37

    如何采用FPGA实现汽车智能语音报警系统设计?

    本文采用FPGA实现ADPCM(Adaptive Differential Pulse CodeModulation,自适应差分脉冲编码调制)编解码器设计,对语音信息进行压缩存储。从而
    发表于 05-17 06:26

    基于DSP Builder的ADPCM算法实现

    本文对ADPCM 编解码原理进行了分析,并针对语音记录系统的特点,对标准ADPCM 编解码系统进行了简化。提出了一种适合
    发表于 09-16 10:43 24次下载

    G.726语音编解码器在SoPC中的实现

    在对G.726 语音编解码标准分析的基础上给出了基于FPGA 的DSP 设计流程,利用MATLAB/Simulink、DSP Builder 和SOPC Builder 工具设计了G.726
    发表于 11-30 14:59 12次下载

    G.726语音编解码器在SoPC中的实现

    在对G.726语音编解码标准分析的基础上给出了基于FPGA的DSP设计流程,利用MATLAB/Simulink、DSP Builder和SOPC Builder工具设计了G.726语音
    发表于 07-16 15:06 18次下载

    基于ADPCM算法语音报警系统

    介绍了一种采用FPGA硬件实现ADPCM算法的方法,并基于此算法对预先采集的各种报警语音进行压缩编码并存储。在遇到危险时,由单片机做出危险判
    发表于 12-11 15:59 28次下载
    基于<b class='flag-5'>ADPCM</b><b class='flag-5'>算法</b>的<b class='flag-5'>语音</b>报警系统

    基于AMR语音编解码算法的VoIP系统

    本文提出了一种基于AMR语音编解码算法的新VoIP系统,该系统可以根据网络信道质量的好坏来自适应地选择一种最佳的传输速率,从而使得合成后的语音质量有了更加良好的QoS保障。
    发表于 06-24 11:05 1420次阅读
    基于AMR<b class='flag-5'>语音</b><b class='flag-5'>编解码</b><b class='flag-5'>算法</b>的VoIP系统

    ADPCM语音编解码VLSI芯片的设计方法

      ADPCM算法及其编解码器原理   ADPCM(Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制)综合了APCM的自
    发表于 09-03 16:58 2316次阅读
    <b class='flag-5'>ADPCM</b><b class='flag-5'>语音</b><b class='flag-5'>编解码</b>VLSI芯片的设计方法

    基于ADPCM语音压缩算法研究

    摘 要 ADPCM算法目前已成为很受用的语音压缩算法之一。给出PCM概念。讨论DPCM,DM,ADM与ADPCM的 压缩
    发表于 04-08 11:20 84次下载

    RS编解码FPGA实现-说明

    RS编解码FPGA实现-说明RS编解码FPGA实现-说明。
    发表于 05-04 15:59 21次下载

    基于STM8的ADPCM音频解码输出DAC语音的程序源码

    STM8上实现ADPCM音频解码,通过DAC输出语音的程序源码。
    发表于 01-24 15:06 36次下载

    如何使用L9320实现ADPCM语音编解码

    对L9320编解码器的工作原理和使用方法 进行了分析,给出了L9320在便携式语音系统中的典型应用电路.
    发表于 12-20 17:27 24次下载
    如何使用L9320实现<b class='flag-5'>ADPCM</b><b class='flag-5'>语音</b><b class='flag-5'>编解码</b>