这一节继续Hm(k)的计算,还是看代码:
k=4,应该不难理解吧!上一节有解释。这是Hm(k)的程序验证。
我们用Xa(k)=实部+j*虚部,代表第a帧快速傅里叶变换结果,
|Xa(k)|=math.sqrt(实部^2+虚部^2),
|Xa(k)|^2=实部^2+虚部^2,
而mel短时(256字节)功率谱怎么表达呢?
s(m)=ln∑Hm(k)*|Xa(k)|^2;m就是26组,所以这就是第a帧26组mel短时(256字节)功率谱,那么∑的上下限是多少呢?每一组的上下限显然不同,上限=程序中frequency_boundary[2];下限=程序中frequency_boundary[0];这是要注意的,很多mfcc的公式介绍,这里是错误的。有26组s(m),就有26组上下限。
上面程序中注释掉的power[k]=|Xa(k)|^2/256 ; 如下图,第a帧要计算128次:
以下是开音有效帧fft和降维后mel短时功率谱的的对比,轻松一下,上是fft,下是功率谱,以便观摩:
以上均是方便清楚观察而有同比例放大。从对比观察看,上下图基本一致,取对数让振幅变换没那么剧烈了(削弱),而且Hm(k)使得高频能看见了(拔高),128维也到了26维(简并,是否想到图像处理的直方图均衡化呢?),平滑性和周期性凸显(频谱的包络是主要是低频成分,已经显现,而频谱的细节部分主要是高频,也已简并)。
这一节到此,如果你对mfcc有兴趣,我会继续展开他。。。。。。