新知mfcc语音识别esp8266继电器开关灯(成为一个DIYer,六)

回过头看自己的博文,傅里叶语音识别全家福,识别的重任最后落在了重音口琴的肩上,do,re,mi,fa,sol,la,xi,这是我不愿意看到的,但其他尝试都是差强人意,而口琴在音准方面比起我们的口发音实在是好多了,心知肚明,不知多少次日夜的测试啊!这点小小的成绩,真是不容易,还有电脑风扇的噪音,偶尔摩托噪音,飞机飞过噪音,广播噪音,人的噪音干扰,但口琴还真没让你失望,其实是fft,在此基础上,你押宝终于有回报了,就是mfcc,人说,山穷水尽疑无路,柳暗花明又一村,mfcc就是有心人的花,我想其他人能到此一游,也会有如此感叹吧!另外发现自己的傅里叶算法,在这里也得到了全面的验证,怎么说呢?难不成是一种必然的暗示?

与傅里叶相遇,是人生幸事,那么在这个AI时代,与mfcc相遇,则是必然,那么就趁热打铁吧!mfcc讲的人很多,而且非常优秀,他的关键就在mel这个人的理论上,代码实现上,关键在采样频率,mel分组和fft的映射关系上,知道这个映射关系,就可以计算Hm(k)了。而公式中其他部分,傅里叶已经搞定了。

按mel的计算公式,有人已经举例:

1,8khz取样率映射到mel频率上是2834.99,最小取300,对应mel频率上是401.25.(我们真的要取8k个样本点吗?这个300是否合适?他到底指的是什么?是前面300个样本点无用吗?)

2,10个filterbank:m(i)=401.25;622.50;843.75;1065;1286.25;1507.5;1728.74;1949.99;2171.24;2392.49;2613.74;2834.99(mel空间

3,X(i)=300;517.33;781.90;1103.97;1496.04;1973.32;2554.33;3261.62;4122.63;5170.76;6446.7;8k(取样空间)

4,f(i)=9,16,25,35,47,63,81,104,132,165,206,256(fft空间,这是512一帧,那么256一帧是怎么样的呢?)

看图,512一帧的计算公式是:f(i)/x(i)=(256+1)/8000;i在【0,11】取值,其实这是一个比例公式映射关系。

那么300-8k分26组,256一帧的计算公式是:f(i)/x(i)=(128+1)/8000;i在【0,27】取值,看图

这里要注意的是,和你取样2048字节或者4096字节没关系(所以那300字节数据有用),300*129/8000=4.83,mel值映射到8000,fft中小于等于4无用。那么300-4k分26组,怎么计算呢?

看图可知,256一帧的计算公式是:f(i)/x(i)=(128+1)/4000;i在【0,27】取值,需要注意的是,最大mel值也只映射到4000,红色行有指示出来,300*129/4000=9.67,这个值意思是说在fft中,小于等于9的无用。

下面就是Hm(k)的计算了,这个计算要表达的意思是,把高维空间映射到这26维空间来(刚开始看到这个,很是吓人,这该高到多少维才是个结束啊?!最后发现,就是128fft空间映射到26组mel空间),就是降维处理,我们下一节讲,这一节主题先消化。

你有兴趣mfcc,我就继续展开他。。。

忘记画出来show一下,如图:

26个组映射在4-128傅里叶快速变换后空间上(一帧256字节,这里显示了一帧,这里每个f(=0,1,2....127)占8个像素,为看的清楚。第一个mel组从f=4开始)。

发布了66 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ganggangwawa/article/details/104354374