⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 melbankm.c

📁 本程序是提取语音MFCC参数的必经步骤
💻 C
字号:
#include "stdio.h"
#include "math.h"
#define pi 3.1415926
#define filterNum   24
#define frameSize   512
#define fs 22050 //采样频率
//#include "melbankm.c"
/*
本程序是为了测试三角滤波器组产生的系数是否正确
*/

void melbankm(void)

{

//#pragma DATA_SECTION(matrixmel, ".melarea")
//#pragma DATA_SECTION(matrix_index, ".melarea")

	float matrixmel[filterNum+1][55];//当滤波器个数为24时,最多的一个占用(256-202)个mel频率点
	short int 	matrix_index[filterNum+2];

	short int  start[filterNum+1],center[filterNum+1],stop[filterNum+1];
	
	short int  fh= 0.5*fs;
	float maxmelfreq=1127*log(fh/700.0+1);
	float sideWidth=(float)maxmelfreq/(filterNum+1);//MEL频率的节距


	int index=0;


	puts("开始产生Mel三角滤波器组系数。。。。。。\n");
	
	
	for(index=0;index<filterNum+2;index++)//共有fiterNum+2个节点,每个滤波器占用3个
		{
			float j=0;

			j=700*(exp(index*sideWidth/1127.0)-1)/fs*frameSize;
			matrix_index[index]=(int)(j)+1;//存放MEL频率点,共有frameSize/2个
		//	printf("matrix_index[%d]=%d\n",index,matrix_index[index]);
		}


	for(index=1;index<=filterNum;index++)//滤波器组下标从1开始,直到filterNum
		{
		
			start[index]=matrix_index[index-1];//start,center,stop下标对应滤波器组号,即从1开始
			center[index]=matrix_index[index];//存放滤波器组的相应开始、中间、结束点的MEL频率
			stop[index]=matrix_index[index+1];
		}
	
	
	for(index=1;index<=filterNum;index++)//给每个滤波器中的各点给值
		{
			int k=0,i=0;
			
   			for (k=start[index],i=0;k<=center[index];k++,i++)
      			{	matrixmel[index][i] = (k-start[index])/(float )(center[index]-start[index]);
 				//	printf("matrixmel[%d][%d]=%f\n",index,i,matrixmel[index][i]);
 				}
 				//matrixmel[index][i]存放:index表示第index个三角滤波器,i=0表示存放这个滤波器
 				//的开始点的MEL频率(是均匀分布的)
 				//matrixmel[0][i]不存放数
 				
   			for (k=center[index]+1;k<=stop[index];k++,i++)
   				{	matrixmel[index][i]= 1-(k-center[index])/(float )(stop[index]-center[index]);
   				//	printf("matrixmel[%d][%d]=%f\n",index,i,matrixmel[index][i]);
   					//一定要加float转换,不然只会产生整数,没有小数
 				}
			
		}

  puts("Mel三角滤波器组系数已生成。\n"); 
  
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -