作者:徐飞洋 李玉晓
来源:《现代信息科技》2020年第09期
摘 要:隨着语音识别算法的成熟和集成电路工艺的发展,设计了一种基于现场可编程门阵列实现对垃圾智能分类的装置。装置采用FPGA芯片作为控制芯片,利用片内资源搭建逻辑电路,处理语音芯片采集的语音信号。系统调用IP核构建软核处理器对语音数据进行识别,识别结果用LCD和LED进行信息反馈。测试结果表明,该装置在语音识别功能上表现出良好的性能,语音识别正确率在90.0%以上,且实现了将识别出来的垃圾进行分类处理。 关键词:语音识别;FPGA;垃圾分类;嵌入式系统
中图分类号:TP391.4 文献标识码:A 文章编号:2096-4706(2020)09-0022-04 Intelligent Garbage Sorting Device Based on FPGA XU Feiyang,LI Yuxiao
(School of Science,Jiangxi University of Science and Technology,Ganzhou 341000,China)
Abstract:With the maturity of speech recognition algorithm and the development of integrated circuit technology,a device based on field programmable gate array(FPGA) is designed to realize garbage intelligent classification. The device uses FPGA chip as the control chip,uses the on-chip resources to build the logic circuit,and processes the voice signals collected by the voice chip. The system calls IP core to build soft core processor to recognize voice data,and LCD and LED are used for information feedback. The test results show that the device has good performance in speech recognition function,the correct rate of speech recognition is more than 90.0%,and it realizes the classified disposal of the identified garbage.
Keywords:speech recognition;FPGA;garbage classification;embedded system 0 引 言
随着城市化建设步伐的推进,生活垃圾处理已是不可避免的一个问题。实施垃圾分类处理,可以有效改善城乡环境,垃圾也能变废为宝。分类垃圾桶是目前最为常用的垃圾分类装置,其结构形式单一采用传统的开放式或手动封盖式,用户体验差,卫生条件不好。同时,广大人民群众对垃圾分类知识掌握程度不高,导致人民群众难以长期坚持执行垃圾分类,阻碍了垃圾分类工作的进一步推广和应用。
笔者基于校内江西省教育厅科学技术研究项目及大学生创新创业项目,对一种新的智能垃圾分类装置进行了研究。为解决现有垃圾分类存在的问题,本文设计一种基于现场可编程门阵列(Field Programmable Gate Array,FPGA)的智能垃圾分类装置[1]。通过投放者说出待投放的垃圾名称,自动判断投放的垃圾类别,并对投放者进行信息提示,引导投放者将垃圾投放到正确的位置。可以有效解决投放者因未培训或培训不足,而不能正确选择垃圾类别带来的问题,同时在一定程度上可以抑制环境的污染。 1 总体方案设计
本文SOPC系统设计基于语音识别理论知识[2,3]和嵌入式系统开发[4]技术,实现一种根据投放者说出垃圾的名称,自动判断投放的垃圾类别,并对投放者进行信息提示的装置。使用Verilog HDL硬件描述语言[5]在FPGA内部搭建各个功能模块,并使用嵌入式软核的方式进行对语音识别算法的处理,整体系统硬件结构框图如图1所示[6,7]。按下录音按键,利用WM8978芯片作为语音数据采集和处理芯片,并将实时录制的语音数据缓存在SDRAM中。选用EP4CE10F17C8芯片,利用内部资源搭建与各个功能模块的操作接口,调用IP核搭建Nios Ⅱ软核处理器,用于处理语音识别算法和对外部器件进行控制。LCD显示屏和LED灯作为识别结果的信息反馈,对用户进行提示。外部扩展大容量的SDRAM和FLASH芯片,分别在系统中承担程序运行和数据储存的工作。 2 部分硬件设计 2.1 语音采集控制模块
WM8978是一个低功耗、高质量的立体声多媒体数字信号编译码器。该芯片内部集成了AD/DA转换器和语音信号处理器,带有灵活的音频线输入,麦克风输入和音频输出处理。可通过I2S或PCM音频接口(I2S/PCM AUDIO INTERFACE)与FPGA进行音频数据传输。 在硬件电路中,如图2所示,LIP、LIN、RIP和RIN连接到麦克风(MIC)作为音频输入,L2/GPIO2和R2/GPIO3通过音频线作为音频输入(LINE_IN),ROUT1和LOUT1作为输出接口(PHONE),输出给外接耳机,ROUT2和LOUT2为喇叭接口。WM8978的MODE引脚接地,选择的是两线接口模式,等同于I2C接口,FPGA以此来配置WM8978。FPGA与芯片引脚序号7-11并口连接,同时FPGA通过I2S MCLK接口输出12 MHz时钟作为WM8978芯片主时钟,进行音频数据输入、输出的控制操作。
2.2 LCD显示模块
TFT-LCD(Thin Film Transistor Liquid Crystal Display,薄膜晶体管液晶显示器)能够低电压驱动,具有功耗低,使用寿命长,环保特性好等特点,是设计用户友好型图形界面的优良载体。
本设计选用ATK-3.5'TFTLCD,是一款高性能3.5寸电阻触摸屏,分辨率为320*480。该产品自带GRAM,无需外加驱动器,因而FPGA可以轻易驱动。采用Intel 18080接口,根据相应的操作时序来控制显示。
图3中,芯片功能引脚序号1~4,用来控制向LCD屏读写命令或数据;引脚6~21与FPGA并口连接,进行待写指令、数据的双向传输;LCD_BL接口控制液晶的背光效果。LCD基本使用流程:硬复位→初始化序列→设置坐标→写GRAM指令→写入颜色数据,然后在LCD显示屏上面就可以打印出要提示的结果信息。 3 部分软件设计
3.1 写入语音模型和识别列表
提前在PC机上训练好预识别词汇模型,本实验对可回收垃圾:“报纸”“塑料瓶”“易拉罐”;有害垃圾:“灯泡”“电池”“酒精”;厨余垃圾:“剩菜”“骨头”“蛋壳”;其他垃圾:“贝壳”“陶瓷”“毛巾”这12个词汇分别进行模型训练,如表1所示。对训练好的模型进行编号,制成C语言头文件供程序调用。在程序中给每一个编号匹配对应词汇的汉语拼音字符串,将每一个词汇所属的垃圾类别用英文名称表示,应用实例如表1所示。最后,系统识别结果将在LCD屏上打印词汇的汉语拼音和所属垃圾类别的英文名称,同时将所属垃圾类别对应的LED灯点亮。 3.2 FPGA内部搭建
在基于FPGA的系统开发过程中,如果采用纯硬件描述语言去实现这些比较复杂的系统,工作量是十分巨大的。本文通过Qsys来调用官方所提供的IP核的方法,根据需求搭建硬件环境,加速系统设计。图4为FPGA内部架构图。
(1)Nios Ⅱ处理器是一个32位精简指令集(Reduced Instruction Set Computer,RISC)架构的软核处理器,内部包含了算术逻辑单元,可以进行语音识别算法的实现。Nios Ⅱ还提供JTAG接口,供下载和调试程序。
(2)系统利用Qsys提供的存储器控制IP核,来对SDRAM芯片和FLASH芯片进行读写操作,极大方便了存储芯片的使用。
(3)PIO IP核为总线端口和通用I/O端口提供了一个存储器映射(Memory-mapped)接口。PIO的I/O端口可以连接到片内用户逻辑(Verilog语言完成的电路部分),也可以连接到与外部器件相连的FPGA引脚。利用PIO IP核,搭建外设模块的逻辑功能电路,用于实现系统与外设的简单通信。
初始化上电后,程序从外部的FLASH将数据和语音模型转移到SDRAM中。此时,其他模块全部处于复位状态中。等系统装载程序完成后,释放其他的复位信号,Nios Ⅱ处理器工作于系统时钟频率下。 3.3 识别程序
装置上电启动后,录制好待识别的词汇后,按下识别功能按键,装置就可以进行语音识别。语音识别算法在Nios Ⅱ SBT for Eclipse工具中完成,包括编写、编译和调试程序。关键程序如下:
for(i=0;i<((number-6000)/2.2);i+=6) {
x[j++]= *(ram_disp);
if(abs(*(ram_disp))>abs(max)) {
max =abs(*(ram_disp)); }
ram_disp += 6; }
//滑动窗口滤波 for(i=1;i //归一化处理 for(i=0;i xn[0]=xx[0]; //預加重处理 for(i=1;i fn=(m - FRAMESIZE + INC) / INC; mfcc=MFCC(xn,FS,FRAMESIZE,INC,m,fn);//梅尔倒谱提升方法对信号提取特征 result=viterbi_max(I, mfcc,fn-4);//维特比算法得出识别结果编号 4 系统测试实例 4.1 录入语音数据分析 将录制好的语音数据打印在Eclipse工具的控制台上,对数据用MATLAB[8]播放与绘图分析[7],绘图结果如图5所示。结合图像(a)(b)进行分析,测试结果表明,FPGA正常状态下录制的语音中掺杂着严重的噪声和毛刺,导致识别正确率下降。为此,系统需要对语音信号采用滑动窗口滤波处理,提高整体识别性能。 4.2 系统识别结果 正确率是衡量一个语音识别系统重要的性能指标,是设计能否达到需求的标准。测试环境要求: (1)测试周围环境安静,没有较大的背景噪音。 2.2 LCD显示模块 TFT-LCD(Thin Film Transistor Liquid Crystal Display,薄膜晶体管液晶显示器)能够低电压驱动,具有功耗低,使用寿命长,环保特性好等特点,是设计用户友好型图形界面的优良载体。 本设计选用ATK-3.5'TFTLCD,是一款高性能3.5寸电阻触摸屏,分辨率为320*480。该产品自带GRAM,无需外加驱动器,因而FPGA可以轻易驱动。采用Intel 18080接口,根据相应的操作时序来控制显示。 图3中,芯片功能引脚序号1~4,用来控制向LCD屏读写命令或数据;引脚6~21与FPGA并口连接,进行待写指令、数据的双向传输;LCD_BL接口控制液晶的背光效果。LCD基本使用流程:硬复位→初始化序列→设置坐标→写GRAM指令→写入颜色数据,然后在LCD显示屏上面就可以打印出要提示的结果信息。 3 部分软件设计 3.1 寫入语音模型和识别列表 提前在PC机上训练好预识别词汇模型,本实验对可回收垃圾:“报纸”“塑料瓶”“易拉罐”;有害垃圾:“灯泡”“电池”“酒精”;厨余垃圾:“剩菜”“骨头”“蛋壳”;其他垃圾:“贝壳”“陶瓷”“毛巾”这12个词汇分别进行模型训练,如表1所示。对训练好的模型进行编号,制成C语言头文件供程序调用。在程序中给每一个编号匹配对应词汇的汉语拼音字符串,将每一个词汇所属的垃圾类别用英文名称表示,应用实例如表1所示。最后,系统识别结果将在LCD屏上打印词汇的汉语拼音和所属垃圾类别的英文名称,同时将所属垃圾类别对应的LED灯点亮。 3.2 FPGA内部搭建 在基于FPGA的系统开发过程中,如果采用纯硬件描述语言去实现这些比较复杂的系统,工作量是十分巨大的。本文通过Qsys来调用官方所提供的IP核的方法,根据需求搭建硬件环境,加速系统设计。图4为FPGA内部架构图。 (1)Nios Ⅱ处理器是一个32位精简指令集(Reduced Instruction Set Computer,RISC)架构的软核处理器,内部包含了算术逻辑单元,可以进行语音识别算法的实现。Nios Ⅱ还提供JTAG接口,供下载和调试程序。 (2)系统利用Qsys提供的存储器控制IP核,来对SDRAM芯片和FLASH芯片进行读写操作,极大方便了存储芯片的使用。 (3)PIO IP核为总线端口和通用I/O端口提供了一个存储器映射(Memory-mapped)接口。PIO的I/O端口可以连接到片内用户逻辑(Verilog语言完成的电路部分),也可以连接到与外部器件相连的FPGA引脚。利用PIO IP核,搭建外设模块的逻辑功能电路,用于实现系统与外设的简单通信。 初始化上电后,程序从外部的FLASH将数据和语音模型转移到SDRAM中。此时,其他模块全部处于复位状态中。等系统装载程序完成后,释放其他的复位信号,Nios Ⅱ处理器工作于系统时钟频率下。 3.3 识别程序 装置上电启动后,录制好待识别的词汇后,按下识别功能按键,装置就可以进行语音识别。语音识别算法在Nios Ⅱ SBT for Eclipse工具中完成,包括编写、编译和调试程序。关键程序如下: for(i=0;i<((number-6000)/2.2);i+=6) { x[j++]= *(ram_disp); if(abs(*(ram_disp))>abs(max)) { max =abs(*(ram_disp)); } ram_disp += 6; } //滑动窗口滤波 for(i=1;i //归一化处理 for(i=0;i xn[0]=xx[0]; //预加重处理 for(i=1;i fn=(m - FRAMESIZE + INC) / INC; mfcc=MFCC(xn,FS,FRAMESIZE,INC,m,fn);//梅尔倒谱提升方法对信号提取特征 result=viterbi_max(I, mfcc,fn-4);//维特比算法得出识别结果编号 4 系统测试实例 4.1 录入语音数据分析 将录制好的语音数据打印在Eclipse工具的控制台上,对数据用MATLAB[8]播放与绘图分析[7],绘图结果如图5所示。结合图像(a)(b)进行分析,测试结果表明,FPGA正常状态 下录制的语音中掺杂着严重的噪声和毛刺,导致识别正确率下降。为此,系统需要对语音信号采用滑动窗口滤波处理,提高整体识别性能。 4.2 系统识别结果 正确率是衡量一个语音识别系统重要的性能指标,是设计能否达到需求的标准。测试环境要求: (1)测试周围环境安静,没有较大的背景噪音。 因篇幅问题不能全部显示,请点此查看更多更全内容