基于FPGA的语音信号实时处理

2011-05-11 05:26:19来源: 微型机与应用
   

摘   要: 介绍一种在语音识别系统中运用FPGA技术对语音信号进行前期实时处理的方法。利用DSP Builder设计信号处理算法的图形化电路模块,运用硬件环(HIL Hardware in the Loop)技术对模块进行软硬件协同仿真。满足设计要求后,再用Signal Compiler 将模块转换成VHDL语言和Quartus II工程文件下载至目标芯片。结果表明此方法可以快速灵活地设计出语音处理模块,语音数据能在要求的时间范围内处理完毕,达到了实时处理的目的。
关键词: 语音识别; FPGA; 实时; 信号处理

    随着语音识别技术的应用越来越广,对其实时性的要求也越来越高。专用的DSP语音芯片虽然有硬件加速功能,但其指令依然是串行计算,在实时性方面有所欠缺。如今,具有并行运算能力的FPGA主频不断提高,加上其设计灵活、功耗低、体积小等优点[1],可以满足语音信号实时处理的要求。目前很多语音处理算法都是基于软件平台的,真正的语音处理硬件实现很少。本文针对非特定人的语音信号,研究当前主流的语音处理算法,并将这些基于软件平台的算法“硬件化”。在保证一定精度的前提下将浮点运算转换成便于FPGA实现的定点运算[2]。


    本文以通过对语音信号滤波、分帧、加窗、能量计算等模块的设计为例,介绍语音信号实时处理的方法,需要运用到MATLAB.、DSP Builder、QUARTUS II、ModelSim等EDA工具联合设计[3]。语音信号经过模数转换进入FPGA以后,对其滤波,因为要对信号进行实时处理,需要采用动态分帧,最后计算出每帧的能量为语音信号的下一步处理如端点检测、特征提取[4]等做好前期准备。


1 实时处理算法分析
    语音数据经过A/D转换之后进入芯片,首先对其进行滤波。为了使信号的频谱趋向平坦,需要对其进行预加重滤波,这里采用一阶FIR滤波器[5]:

    语音信号虽然是一种非平稳信号,但在短时内(10 ms~30 ms)可以看作是平稳的[2],这样就可以对其进行分帧处理。在实时系统中无法确定语音的长度和大小,只能对其进行动态分帧。考虑到帧的连续性,采用交叠分帧,帧移取0.5,硬件中可以用两个FIFO实现,其中FIFO1的读时钟频率是写时钟的两倍,且FIFO2的读写时钟频率与FIFO1读时钟频率相同。
    分帧后的数据需要窗函数对其加权,加窗后的语音信号为sω(n)=s(n)×ω(n)。由于汉明窗在语音频段的平滑特性,因此本文采取汉明窗[4]:

2 硬件模块的实现
    仿真时通过读取hex文件来模拟实时的数据流。通过MATLAB将采样频率16 kHz,宽度8 bit的wav格式音频文件转化成hex文件的数据。部分代码如下[6]:
     ……
      [y,fs,n]=wavread(‘speech.wav’);
      y1=int8(y×(2^n-1)+128);
      [a,b]=size(y1);
      fid=fopen(‘speech.txt’,’wt’);
      for i=1:a;
      line=[num2str(i-1),’:’,num2str(y1(i)),’;’];
      fprintf(fid,’%s\n’,line);
      end
      fclose(fid);
    ……
    在模块中通过地址计数器将ROM中的数据不断读出,然后对数据流进行滤波。其DSP Builder模块实现如图1所示。

    考虑到语音信号的短时平稳性,将256点数据分为一帧写入Dual-Clock FIFO,写入128点后以两倍的写入速度读出,同时以两倍速度写入深度为128的FIFO2。如此循环便可以实现帧的交叠。具体实现如图2所示,左半部分为时钟控制模块。

    为了使每帧的数据点与窗函数的数据点一一对应,在加窗之前搭建了一个时序控制模块。Constant1控制模块延时384个时钟周期,counter是模为256的计数器。将LUT设为17 964-15 073×cos([0:2×pi/255:2×pi])[6]。分帧后的信号取模然后与窗函数相乘再累加便得到其能量,由Multiply Accumulate模块实现[2]。Clock提供基础时钟,PLL产生模块所需要的两个时钟,Signal Compiler对模块进行编译,转化成VHDL语言。具体模块如图3所示。

3仿真测试
    将上述三个子模块和Simulink中的模拟示波器Scope连接在一起,读取ROM中语音”1、2、3”的数据流。结果显示在示波器上,如图4所示。从上到下依次为原始信号、滤波信号、分帧信号、能量信号。

    从图中可以看到设计模块已经可以实时处理数据,达到了设计要求。接下来便可以将其转换成VHDL语言在QUARTUS II中进行仿真,生成pof文件下载到FPGA里面。打开Signal Compiler,Family选择Cyclone II,Device选择ALTERA公司的EP2C5T144C6芯片。点击compile,便可以生成工程文件、VHDL代码及配置文件[1]。


    以上属于软件仿真,具有速度慢、内容不易控制等缺点。ALTERA的DSP Builder提供的HIL模块可以在Simulink模型与FPGA开发板之间通过JTAG通信口建立联系,从而实现基于MATLAB/DSP Builder平台的硬件仿真。打开HIL模块,设置好工程文件speech.pof路径,连接上FPGA开发板,点击Configure FPGA便可以进行硬件仿真。打开示波器查看仿真结果与软件仿真结果吻合。在QUARTUS II中对生成的工程文件进行编译。整个系统使用了306个LE、214个寄存器、62个管脚,非常节省资源。


    通过DSP Builder进行FPGA设计无论是建模还是仿真都非常方便快捷,并可以在外部硬件测试平台不够完善的条件下引入HIL模块进行软硬件联合仿真。相对于传统开发方式,具有更大的优势。在时序仿真时可以看出从语音输入到能量的输出占用640个周期,在100 MHz的工作频率下仅耗时6.4 μs,是在MATLAB下运行速度的50多倍,实时性得到了充分的体现。

关键字:FPGA  语音

编辑:北极风 引用地址:http://www.eeworld.com.cn/FPGA/2011/0511/article_2107.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
FPGA
语音

小广播

独家专题更多

TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
TTI携TE传感器样片与你相见,一起传感未来
富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 

夏宇闻老师专栏

你问我答FPGA设计

北京航空航天大学教授,国内最早从事复杂数字逻辑和嵌入式系统设计的专家。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved