梁小龙,刘九龙,欧阳歆,卢 仕,宋 敏,徐 磊
(湖北大学 物理与电子科学学院,湖北 武汉 430061)
生活垃圾分类不合理等问题加重了环境污染[1],国家发改委及住建部于2017年3月发布了《生活垃圾分类制度实施方案》,随着《生活垃圾分类制度实施方案》的不断贯彻落实,越来越多的城市采取了生活垃圾强制分类措施。但垃圾分类给市民带来的烦恼也随之产生:生活垃圾如何分类困扰了大部分人。
为解决生活垃圾分类难的问题,文中设计实现了一种基于FPGA的智能语音垃圾箱。
智能垃圾箱的控制系统主要由FPGA芯片(Artix-7 XC7A75T)、WM8978语音采集电路、SD卡、4路舵机组成。
FPGA芯片作为主控,接收WM8978芯片通过麦克风采集的语音信号,即使用者说出的垃圾名称,然后进行语音识别,识别结果分为4种,即干垃圾、湿垃圾、可回收垃圾与有害垃圾,识别完成后读取存储于SD卡中的4种识别结果的音频文件,语音播报匹配结果,之后控制4路舵机实现相应垃圾箱盖的开合。
所有子电路和模块均连接到FPGA芯片的GPIO口,在FPGA中设计各子电路的控制模块以及其余功能模块,包含WM8978控制模块、FFT模块、识别结果播报模块、舵机控制模块、SD卡读取模块、特征提取与模板匹配模块,分别完成语音信号采集、语音信号预处理、识别结果播报、垃圾箱盖开合控制、SD卡语音播报文件的读取、待处理语音信号的特征提取与模板匹配工作。
系统组成如图1所示。
图1 系统组成
语音识别引擎大致分为2种类型:模板识别和声学语音系统。前者使用已知或经过训练的模板来确定是否匹配,后者使用人体属性比较语音特征(如元音等)[2]。对于垃圾名称的识别,词汇量较小,且为孤立词识别,所以本系统采用模板识别方案,具体语音识别流程如图2所示。
图2 语音识别流程
在本项目中,使用FFT变换对语音信号进行预处理,借助MATLAB制作识别模板,模板数据库包含“菜叶”“纸巾”“药瓶”“易拉罐”4个词汇的特征参量,存储于FPGA的片上ROM中。
语音信号经麦克风采集后被存储为时域信号,时域信号中包含的信息随时间的变化而变化,通过对频域信号进行分析,能获取在时域信号中很难观察的信号特征[3]。由于本文提出的系统仅为语音识别与智能家居产品相结合的尝试,所以采用标准傅里叶变换对信号进行频域分析。
语音信号预处理模块负责完成快速傅里叶变换以及结果取模的语音信号预处理工作,快速傅里叶变换使用Xilinx提供的XFFT IP核进行,取模过程中的开平方运算利用CORDIC IP核的square root完成。
结合XFFT IP核特点,本系统选择8 kHz采样频率,采取16 384个样本点后进行FFT变换。完成FFT变换后,进入CORDIC IP核进行取模运算,输出语音信号的频谱图。
FFT作为DFT的一种快速算法,具有DFT的圆周共轭对称性质,模|F(k)|满足圆周偶对称关系,即在k=N处补上与k=0处相同的序列值后,关于k=N/2成镜像对称[4-5]。
为减少后面特征提取及模板匹配模块的工作量,根据对称性完成预处理后,仅将前一半的数据传输至特征提取与模板匹配模块。
图3展示了语音信号预处理模块仿真图中存储的语音信号时域图。对语音信号预处理模块进行功能仿真前,先使用MATLAB录制一段语音信号,在仿真顶层模块中读取该语音文件,通过adc_data接口传输至语音信号预处理模块,观察该模块中保存的语音信号时域图,缩小后可以看到,与MATLAB获得的时域图保持一致,说明该模块已正确存储语音信号。
图3 FFT模块仿真图1
图4展示了该模块对输入信号进行FFT变换、取模后的输出信号仿真图,将语音信号的频谱图与MATLAB处理结果进行比较,两幅图的形状保持高度一致,说明该模块功能正常。
图4 FFT模块仿真图2
语音识别过程的关键在于特征提取与模板匹配[6]。
本系统中,模板匹配即为频谱图匹配,将输入的语音信号频谱图与各模板比较,与其最相似的频谱图即为识别结果。在特征提取过程中,需提取出频谱图的特征参数,本系统中选用“极大值点位置”作为频谱图的特征参数,算法步骤如下。
(1)存储数据,计算均值。接收待处理语音信号的频谱图,接收完成后计算频谱图中所有点的均值。
(2)寻找极大值点。依次遍历频谱图中的数据点,若某个数据点大于设定的阈值,便认为该点为一个极大值点,将所有极大值点位置依次保存到特征数组中,该数组即为该频谱图的特征参数。
(3)计算相似程度。依次比较特征数组与模板数组各点数据值,设定阈值,进行比较,若两数组某点数据绝对值的差小于该阈值,则相似度加1。
(4)寻找最大相似度模板。与特征数组相似度最高的模板数组即为识别结果。
模块为二段式有限状态机,各状态跳转示意图如图5所示。
图5 特征提取及模板匹配状态跳转图
舵机控制模块接收语音识别模块输出的识别结果,控制相应舵机运动:当接收到识别完成的信号后,根据识别结果打开相应舵机,经过一定时间后关闭此舵机。舵机控制模块工作流程如图6所示。
图6 舵机控制模块流程
识别结果播报模块配合SD卡读取模块的工作,当语音识别完成后,读取识别结果,根据结果选择存储于SD卡中相应音频文件,进行语音播报。
语音模板制作借助MATLAB、特征提取及模板匹配模块完成。FPGA控制模块将得到的特征数组通过串口发送至计算机,对同一词条进行4次相同的操作,即得到4个样本频谱图,在MATLAB中对4个样本频谱图取均值后按照VIVADO片上ROM IP核固化文件格式保存模板。
图7展示了模板制作过程,即对4个样本频谱图取均值后,输出最终模板并保存。
图7 模板制作过程
垃圾箱机械结构如图8所示。4个垃圾箱盖依靠4个独立的舵机开合,内部使用十字隔板将空腔分为4部分,分别用于收集干垃圾、湿垃圾、可回收垃圾和有害垃圾。FPGA开发板、WM8978模块电路、电源电路等均置于垃圾箱底部隔板内。
图8 垃圾箱机械结构示意
测试前,使用手机录制4个特定词汇“菜叶”“纸巾”“药瓶”“易拉罐”的音频,测试时作为语音指令进行随机播放。进行100次整体性能测试,记录测试数据,并计算正确率。测试结果见表1所列。
表1 测试数据
由测试结果可知,该系统具有较高的识别正确率,但仍有改进的空间,使得系统实用性更强,改进方向分为如下2个方面:
(1)使用MFCC法提取特征参数[7-8];
(2)采用隐马尔可夫模型作为语音识别的算法[9-10]。
本设计采用含Artix-7 XC7A75T芯片的FPGA开发板,应用WM8978模块、SD卡、4路舵机实现具备语音指令采集、语音指令识别、识别结果播报、垃圾箱盖自动开合等功能的智能语音垃圾箱。
在国家大力推行生活垃圾分类的背景下,智能语音垃圾箱的出现使生活垃圾的分类更加便捷、高效,由于无需连接互联网,因此可充分保证用户隐私,虽然目前人们对智能垃圾箱的认可度不高,但随着生活垃圾分类政策的不断推行,智能垃圾箱会不断融入我们的生活。