基于STM32F1的孤立词语语音识别

2018-04-12 11:45李维华伏思达覃家鸿李忠憓
数字通信世界 2018年3期
关键词:梅尔语音频率

胡 凡,李维华,伏思达,覃家鸿,李忠憓

(合肥工业大学,合肥 230001)

语音识别的发展最早开始于上世纪50年代的贝尔实验室,Davis等科学家研究出可以识别出10个英文数字的实验装置。60年代的一系列数字信号处理方法推动了语音识别的发展,如FFT。同时,伴随着计算机技术的发展,语音识别逐渐从硬件工作转移到软件工作,这时的语音识别发展很快,但人们很快就意识到语音识别的困难加深。此后,70年代日本学着提出的动态时间规整技术(DTW)解决不等长语音的对整匹配问题,以及80年代提出的隐马尔可夫模型法(HMM),都是现阶段语音识别的重要算法。

1 硬件设计及预处理

1.1 音频采集电路

首先是对于语音信号的采集,本系统使用电容式咪头采集音频,但MIC的输出电压只有几毫伏到十几毫伏,所以需要加放大电路,可采用三极管或者运放放大。本系统采用三极管阻容耦合二级放大电路,需要注意的是咪头需要一个工作电压,所以直接将VCC接到咪头的正极,然后第一级的耦合电容设置为10uf,这个对三极管基极充电时间有影响,它和集电极的电阻一同构成了RC充电电路,且10uf的电容会把音频信号耦合到基极上,咪头采集到的信号控制在3.3V以内。单片机是无法识别模拟电信号的,所以需要用到A/D采样;人说话的语音信号大多数有效信号集中在100HZ-3400HZ,所以根据香农采样定理,只要A/D采样频率大于等于6800HZ即可,这对于我们STM32F1系列单片机来说是完全可以实现的,接着考虑A/D精度,STM32F1ZET6拥有1~3个12 位逐次逼近型的模拟数字转换器,对于Vref=3.3v来说其最小误差为0.8mv,这是完全可以接受的,这就实现了语音模拟信号的采样量化。

1.2 高频补偿

经过研究,人的发生器官也相当于一个时变线性系统,在8000Hz以上频率时,会有大约6dB/倍频的频率衰减,所以为了平滑频率,需要对信号进行高频预加重,即运用一个6dB/倍频的一阶数字滤波器。

1.3 分帧及加窗处理

很容易理解语音信号具有短时性,但从另一方面看,语音的形成过程与发音器官的运动密切相关的,且发生器官的运动比起声音振动速度来说是缓慢的,所以在一个短时间范围内可以认为其变化很小,借此,我们对语音信号进行短时分析(分帧),一般语音信号在10ms-30ms之间保持稳定,我们去每帧长度为20ms,且为了使语音信号的连续性,每一帧之间混叠窗长的一半;窗函数的选择大致有矩形窗、汉宁窗、哈明窗等,而窗函数的选择要求一般包含两点:一是尽量减少窗函数的旁瓣高度,使能量集中在主瓣。二是主瓣宽度尽量窄,以获得较陡的过渡带;介于以上条件,我们选择哈明窗。由于帧与帧连接处的信号因为加窗而弱化,如果没有帧移,这部分信息就丢失了。

2 软件设计

2.1 端点检测

当系统接收到一段完整的语音信号时,去除语音段前后的噪声对于我们语音参数提取具有重要意义。经研究,当我们在发出语音时,清音和浊音会不断的出现,发现浊音的短时能量明显比环境噪声高,清音的短时平均过零率与环境噪声也有明显的区别,所以利用这个特性,设定短时能量和短时平均过零率的门限值,当某一帧的短时能量或短时平均过零率大于门限值,则可认为进入有效语音段,设定为语音起点,当某一帧的短时能量和短时平均过零率都小于门限值时,认为这是语音末点。

2.2 MFCC语音特征提取

在音频信号的采集过程中,模拟信号通过 A/D 转换后成为数字信号。数字信号为时域的信号,而一般信号分析的方法都是在频域进行分析,所以需要通过傅里叶变换将时域信号转变为频域信号,然后提取其中能反映语音本质特征的参数来进行语音识别。进过几十年的发展,语音特征提取算法大致有三类:

基于线性预测分析的提取方法(LPCC)、基于频谱分析的提取方法(MFCC)、基于其他数字信号处理技术的特征分析方法,本系统采用基于频谱分析的提取方法,Mel频率倒谱频系数MFCC。MFCC特征提取包含两个关键步骤:一是转化到梅尔频率。二是进行倒谱分析。梅尔刻度和频率的赫兹的关系如下:M=2595*log10(1+f/700),由公式可知道梅尔刻度和频率之间是对数关系,低频部分梅尔刻度的分辨率高,高频部分梅尔刻度的分辨率低,这跟人耳的听觉特性是相符的。所以对于有效语音段,进行离散傅里叶变化(DFT),将频谱信号通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组,M通常取22-26。

各f(m)之间在赫兹轴上的间隔随着m值的减小而缩小,随着m值的增大而增宽,但在梅尔刻度却是等距离。最后就是离散余弦变换,进行反傅里叶变换然后通过低通滤波器获得最后的低频信号,这样能量会集中在低频部分。每个三角滤波器会有一个输出,通过以上计算实现了每帧数据从N(FFT点数)点到M点的降维,大大减小了计算量,减小了内存开销、缩减了运算时间。

2.3 特征匹配算法

现阶段,语音识别用到的模型匹配方法主要有动态时间规整(DTW)、隐马尔可夫模型(HMM)和人工神经网络。本系统用于孤立词识别,相比较两算法,HMM需要大量数据,复杂程度远大于DTW,所以在孤立词语音识别中,DTW 算法得到更广泛的应用。笔者觉得,对于一个算法的理解,首先得从它的物理意义开始,在网上很多人的博客里都对这个算法有过通俗的解释,并配以实例,在这我就不多加说明了。主要步骤为初始化矩阵,计算每个数据之间的“距离”,计算累计匹配距离,匹配距离最小的特征模板与输入特征有最大的相似性。

这是在IDE平台上模拟试验的DTW算法:

3 嵌入式平台上的算法设计

首先,一段短时语音信号长度大约为2s以内,我们以8khz的ADC采用频率去采样得到的最大点数为16000,因为STM32F1为12位ADC,所以每个点的数据相当于两个字节,总的算来需要16000*2=32000字节,对于拥有64KB RAM的STM32F103ZET6来说在内存上是可以实现的。ST官方固件库提供的16位、1024点FFT用时2.138 ms,20ms为一帧,算下来总共有100帧,也就是100次1024点的FFT计算,总用时就是213.8ms,加上其他地方的指令、算法运算时间,识别一个指令应该在0.5s以内。至于每帧20ms,按照8khz的采样频率只能得到160个点,采用1024点FFT则需要在尾部补864个零,因为由公式(delta f)=fs/N 补零可以提高频率分辨率。且考虑到ADC采样次数比较多,所以采集到的数据采用DMA的方式传输到设定的数组,这样可以节省指令执行时间。从工程的初始化开始,先是设定单片机运行频率(72MHZ),延时函数初始化(SysTick),ADC、DMA、按键函数部分以及需要用到的引脚的初始化,main()中的主要为一个按键函数来实现何时进行模板训练,何时进行语音识别。工程的主要部分为端点检测、MFCC语音特征提取、以及特征提算DTW的代码实现。想着重提出来说的是DTW算法,算法基于动态规划(DP)的思想,用于于长度不等的序列如何匹配。直接的理解,是warping一个序列后可以与另一个序列重合。这个时候两个序列中所有对应点的距离之和是最小为零。所以从直观上理解,warping的正确性一般指每一个相对应的特征点的对齐,我想这也是动态时间规整算法的核心。这个解释应该很宏观,理解了物理意义,这个算法也变的简单起来。

对于它的起源(DP)我们不去过多的诉说,而它广阔的应用前景,结合cpp面向对象的特性,我想我们可以把这个warping运用的很只能,就像对于人的情感、关系,将两个人综合特征的显现进行“匹配”,或是两代人之间的种种特征(貌似很像DNA检测,不过一个是唯物,一个是格物),这是对“对象”的一个小小改变。

[1]董辰辉,彭雪峰.MATLAB 2008 全程指南.北京:电子工业出版社[M],2009 年 3 月 .

[2]张雪英.数字语音处理及 MATLAB 仿真.北京:电子工业出版社[M],2011年 7 月 .

[3]宋知用.MATLAB在语音信号分析与合成中的应用.北京:北京航空航天大学出版社[M],2013 年 11 月.

[4]顾亚强.非特定人语音识别关键技术研究[J].国防科技大学硕士学位论文,2009 年 11 月 .

[5]徐科军,黄云志,林逸榕,陈强.信号分析处理(第二版).北京:清华大学出版 [M],2006 年 4 月 .

[6]汪冰.小词汇非特定人的孤立词语音识别系统的研究与设计[J].广东工业大学硕士学位论文,2008 年 5 月.

猜你喜欢
梅尔语音频率
基于梅尔频谱分离和LSCNet的声学场景分类方法
振动与频率
魔力语音
基于MATLAB的语音信号处理
基于MQ3与MP3的价廉物美的酒驾语音提醒器
梅尔维尔鲸
女诗人梅尔诗集《十二背后》三人谈
对方正在输入……
“熊”视眈眈
无线电频率的特点