一种基于串行FFT的低功耗MFCC语音特征提取电路的制作方法

文档序号:20911801发布日期:2020-05-29 13:05阅读:317来源:国知局
一种基于串行FFT的低功耗MFCC语音特征提取电路的制作方法

本发明公开了一种基于串行fft的低功耗mfcc语音特征提取电路,涉及语音特征信号处理和集成电路设计领域,属于计算、推算或计数的技术领域。



背景技术:

随着当前时代智能化的逐渐发展,语音交互在智能领域上的重要性也愈加增强,语音交互设备也开始在我们生活中扮演了重要角色,如智能手机的语音助手,门禁系统和车载系统等。而语音交互的关键是语音识别,语音特征提取又是语音识别的关键技术,以较小的功耗实现对音频特征信号的低损失提取能够有效地提升语音识别系统的识别准确率。

目前,传统的语音特征提取算法包含了动态时间规划(dtw,dynamictimewarping)、线性预测编码(lpc,linearpredictivecoding)、梅尔倒频谱分析(mfcc,mel-frequencycepstralcoefficients)等,其中,性能和提取精度较好的为梅尔频率倒谱分析。该算法通过对音频的预处理、分帧加窗、快速傅里叶变换(fft,fastfouriertransform)、梅尔对数运算以及离散余弦变换(dct,discretecosinetransform),最终得到音频的结果,但是传统的mfcc算法对于硬件的适配性很差,其中,fft运算过程以及梅尔滤波运算所需的大量乘加运算和存储面积增大了硬件的实现难度和代价。而且由于智能设备面临供电续航的局限性,传统的语音提取算法已经不适合当前智能设备的使用,因此,本发明设计了mfcc语音特征提取电路,通过优化其中的fft和梅尔滤波算法架构和预处理模块的乘加方式,极大减小了语音特征提取电路的运算量和存储量,使其更适应智能设备的低功耗要求。



技术实现要素:

本发明的发明目的是针对上述背景技术的不足,提供了一种基于串行fft的低功耗mfcc语音特征提取电路,在低功耗mfcc电路架构下,通过优化其乘加运算方式,并采用串行fft算法以及优化的梅尔滤波架构,以降低一定的速度来极大地减小电路的面积以及功耗,从而解决了语音特征提取算法在硬件上的高功耗和大存储量问题。

本发明为实现上述发明目的采用如下技术方案:

一种基于串行fft的低功耗mfcc语音特征提取电路包括:预处理模块,分帧加窗模块、fft模块、梅尔滤波模块以及对数和dct模块;

预处理模块,其功能等同于一个高通滤波器,该模块保证了信号在频谱上的信噪比,并且减小了人声高频部分的衰减。预处理模块对串行输入的语音序列的具体操作为输入的数据与语音序列中相邻时间的前一个数据相减后再累加前一数据向右移位4位后的值得到预加重后的语音信号。

分帧加窗模块,其功能为将一段长音频分割为若干帧送入后续模块处理。输入的语音序列每t(t为小数,常取20到40)毫秒的数据作为一帧,一帧的数据点数(数据点数为帧长乘以采样率)为t(t为整数,为了满足后续fft模块,t常取2的n次方),数据精度为a比特(a为大于1的整数),帧与帧之间重叠s(s为小数,常取t的一半)毫秒,重叠部分的点数为s(s为整数,通常为t的一半)。由于相邻两帧之间有重叠数据,因此相邻帧的重叠部分的数据需要使用一个s*a比特的静态随机存储器存储,以备在下一帧中使用,每一帧数据与存储在只读存储器中的汉明窗函数值相乘,即可得到该模块的输出。

fft模块,其功能为将一帧的时域信号转换为频域信号。fft模块由n/2(n为上述t中2的指数项)个基22单路径延迟反馈(radix-22singledelayfeedback,简称radix-22sdf)单元组成,每个radix-22sdf单元内包含两次蝶形运算以及一次与旋转因子的乘积运算,其中,蝶形运算是对两个输入的实数交叉相加减得到一组新的实数,而旋转因子预先存储在只读存储器中。由分帧加窗模块输出的数据以自然顺序串行流入fft模块,经历了n/2个radix-22sdf单元运算之后,最终数据以比特置换(位翻转为高位和对称的低位进行翻转)的顺序依次输出。

梅尔滤波模块,其功能为对每一帧的频域信号进行梅尔滤波运算。具体操作为,首先对fft模块输出的实部虚部数据进行平方相加运算,得到频域的能量值,然后将能量值和预存在静态随机存储器的m阶梅尔滤波组(m为整数,通常取20到40)的函数值进行相乘,并对相乘之后的整帧信号的值进行累加,最终每帧得到m个梅尔值。

对数和dct模块,其功能为对上述滤波器组数据进行压缩表示。首先利用查找表(通过寻找输入数据位中最高位‘1’出现的位置,查找对应的对数值)的方式对m个梅尔值取以2为底的对数值,然后再进行dct变换。dct变换的具体实现为输入数据与余弦系数相乘后累加计算,余弦系数储存在只读存储器中,最终输出l阶dct变换结果(l为整数,通常小于m),该结果为电路输出的特征值。

基于串行fft的低功耗mfcc语音特征提取电路的语音特征提取电路的进一步优化方案,在预加重模块中,用下述优化公式替换原公式,其中,datain和dataout分别表示本操作的输入数据和输出数据,k表示数据的位置,从1开始:

dataout[k]=datain[k]-datain[k-1]+datain[k-1]>>4(优化公式),

最终将原本数学公式上的乘加运算,优化为移位加运算,降低了片上系统在实现乘法运算时的额外功耗以及存储量。

作为基于串行fft的低功耗mfcc语音特征提取电路的进一步优化方案,采用流水线式的串行fft算法实现傅里叶变换。该算法通过串接的基22单路径延迟反馈单元实现了时域数据的逐层傅里叶变换,在牺牲了一定吞吐量和速度下,大大减小了电路面积以及功耗。其具体流程为:

步骤一:首先,第一个radix-22sdf运算单元中的第一个蝶形运算(简称bf1)部分中含有一个大小为t/2*a比特的存储器,输入的一帧t个数据,将第1个数据到第t/2个数据作为第一组数据,第t/2+1个数据到t个数据为第二组数据,先将第一组数据依次存入存储器中,然后随即到来的第二组数据与已经存储在存储器中的第一组数据依次做第一次蝶形运算,第一次记蝶形运算后得到一组t长度的数据,由于下一个蝶形运算(简称bf2)部分只会处理t/2个数据,所以先将bf1输出的t个数据中的后t/2个数据返回存入bf1中的t/2长度的存储器里,以此替换之前存储的第一组数据,再将bf1输出的t个数据中的前t/2个数据送入bf2进行蝶形运算,同理,bf2采用与bf1相同的数据处理方式实现蝶形运算,bf2完成对bf1输出的t个数据中的前t/2个数据的蝶形运算完后,再将bf1中的存储器存入的第一组t/2个数据送入bf2中进行蝶形运算。

步骤二:第一个radix-22sdf运算单元中的bf2部分含有一个大小为t/4*a比特的存储器,bf1部分输出的t/2个数据,首先存前t/4个数据进入到bf2的存储器中,和bf1部分类似,接下来的后t/4个数据与已存储的前t/4个数据做第二次蝶形运算,再返回第二次蝶形运算结果的第二组数据更新t/4*a比特的存储器,输出第二次蝶形运算结果的第一组数据至乘法器,第二次蝶形运算结果经乘法器与旋转因子相乘后得到第一层傅里叶变换结果,旋转因子的值存在了一个大小为t/4*a比特的存储器中,所有的radix-22sdf单元中的旋转因子乘积单元皆可以调用相同存储器中的数值。

步骤三:接下来的各radix-22sdf单元仍然重复上述操作,每个radix-22sdf单元中蝶形运算模块对应的存储器大小会逐次减半,直至第n/2个radix-22sdf单元中的bf1的存储器单元大小为2*a比特,bf2将直接输出fft模块的复数结果,最终数据是按照比特置换的顺序流出的,由于在梅尔滤波之后,整帧数据乘加求和,因此顺序不影响结果,该模块将不会调整顺序,因此可以节省控制逻辑部分的硬件消耗。

作为基于串行fft的低功耗mfcc语音特征提取电路的进一步优化方案,在取对数模块中,通过查找表的方式实现对数运算,此对数运算可以不采用传统的坐标旋转数字计算方法(coordinaterotationdigitalcomputer,简称cordic)进行运算,而是采用寻找输入数据的最高位‘1’出现的位置,以此查找出对应的对数值。

本发明采用上述技术方案,具有以下有益效果:

(1)本发明通过优化fft和梅尔滤波算法架构,能够通过面积小且存储少的硬件电路有效地提取出音频的特征值,通过串行方式实现的fft的存储量下降到并行方式实现的fft的1/n(n为t的指数项,t为一帧的点数,即一帧fft的输入数据量,常取2的n次方),计算量也随之大幅度下降。

(2)利用查找表的优化取对数方式,减轻对数运算的复杂性,降低了功耗。

(3)预处理模块中对乘法运算进行了近似运算的处理,利用移位运算代替了乘法运算,降低了运算的功耗。

附图说明

图1为本发明的示意图。

图2为本发明的系统架构图。

图3为本发明分帧加窗模块电路的结构框图。

图4为本发明fft模块电路的结构框图。

图5为本发明梅尔滤波模块电路的结构框图。

图6为本发明对数和dct模块电路的结构框图。

具体实施方式

下面结合附图对发明的技术方案进行详细说明,以帧长256个点、步长128个点、20阶梅尔值、10阶dct值(t=256,s=128,m=20,l=10)为例说明本发明的具体实现,但不限于本发明的范围。图1为本发明的示意图。

如图2所示,本发明设计的基于串行fft的低功耗mfcc语音特征提取电路主要分为四个模块:分帧加窗模块、fft模块、梅尔滤波模块、取对数模块和dct模块。电路输入时钟信号、语音模数转换(adc)采样数据信号、输出语音特征值,该电路的工作可分为以下几个步骤:

步骤1:如图3所示,从电路启动开始,语音adc采样端开始以8k采样率开始对音频进行采样,系统首先需要使用一个异步先进先出存储器(fifo)对数据进行缓存,异步fifo的数据输出将作为预加重模块的输入,数据在进入模块后通过寄存器以及移位和加运算实现了预加重操作。预加重操作的公式如下:

dataout[k]=datain[k]-datain[k-1]+datain[k-1]>>4,

其中,k从1开始,表示数据的位置。

步骤2:分帧加窗模块里的分帧操作不会对数据本身进行运算,只对其进行分割重组输出,所以利用一个存储器和一个多路选择器即可实现数据的分帧,数据每次保存前一帧数据的后半帧。分帧后的数据会经过一个乘法器与存有汉明窗的系数相乘。

步骤3:如图4所示,经过分帧加窗后的数据流水线进入fft模块。首先,因为傅里叶变换的点数为256个,所以需要4级radix-22sdf单元,每个radix-22sdf单元包含一个bf1运算单元、一个bf2运算单元和一个旋转因子乘法单元,串行fft模块运算公式如下:

在上述公式中,(k1+2k2+4k3)表示输出信号的顺序,k1取0、1,k2取0、1,k3取0到63的整数。等号右式中求和符号内部的公式的实际意义为蝶形运算的数学解释。其中,x(n3)+(-1)k1x(n/2+n3)作为bf1蝶形运算,作为bf2蝶形运算,而为旋转因子。数据一共经历4轮radix-22sdf单元运算,最终依次输出比特置换顺序的fft结果。

步骤4:如图5所示,fft出来的复数首先实部虚部取平方求和,输出的模值和存储在存储器中的梅尔滤波器的函数值相乘并累加,最终输出一帧20阶梅尔值。

步骤5:如图6所示,梅尔值输出后需要对其取对数,通过寻找数据最高位‘1’出现的位置,以查找表的方式来实现功能,以一个八位二进制数为例10001111,它的最高位‘1’出现的位置是第7位,因此对应的对数值为7。取完对数之后的梅尔值需要进行dct变换,dct变换的公式如下:

s(m)为梅尔值取2为底的对数值,l为dct阶数,m为梅尔阶数,其在硬件上可以通过数据和相对应的余弦值相乘累加计算,最终输出10阶dct值,作为这一帧的特征值。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1