欢迎来到天天文库
浏览记录
ID:59253977
大小:21.42 KB
页数:10页
时间:2020-09-08
《MFCC特征提取(可用程序).docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、/******************************************************MFCC特征提取程序*读取一个音频文件(.wav),将根据帧长分割后的每帧2阶MFCC*系数写在输出文件中,以","为间隔*******************************************************/#include#include#include#include#include#include#include2、omplex>#include//MFCC的特征选取,最后提取了13维左右最后结果保存在文件中usingnamespacestd;#defineSP_EMPHASIS_FACTOR0.97f/*预加重的系数*/typedefstruct_TWavHeader{intrId;//标志符(RIFF)intrLen;//数据大小,包括数据头的大小和音频文件的大小intwId;//格式类型("WAVE")intfId;//"fmt"intfLen;//Sizeof(WAVEFORMATEX)shortwFormatTag;//编码格式,包括WAV3、E_FORMAT_PCM,WAVEFORMAT_ADPCM等shortnChannels;//声道数,单声道为1,双声道为2intnSamplesPerSec;//采样频率intnAvgBytesPerSec;//每秒的数据量shortnBlockAlign;//块对齐shortwBitsPerSample;//WAVE文件的采样大小intdId;//"data"intwSampleLength;//音频数据的大小}TWavHeader;constintFS=16;/*修改帧长*/constlongFrmLen=1024;//可修改帧长constunsi4、gnedlongFFTLen=512;//参与FFT运算的512个数据constdoublePI=3.;constintFiltNum=40;//滤波器组数,一共40组constintPCEP=13;//最后得到的关于的13个MFCC的系数doubleHamming[FrmLen];inttemp_1;//计算次数的vectorMFCCcoefficient;staticdoublelast=0;//一窗数据最后一个点的值,此点用于预加重voidpreemphasis(double*buf,double*result,shortFrmLe5、n);//预加重voidInitHamming();voidHammingWindow(double*result,double*data);voidcompute_fft(double*buffer,vector>&vecList);voidFFT(constunsignedlong&ulN,vector>&vecList);//FFT的实际程序voidInitFilt(double*FiltCoe1,double*FiltCoe2,int*Num);//初始化滤波器voidCFilt(d6、ouble*spdata,double*FiltCoe1,double*FiltCoe2,int*Num,double*En,vector>&vecList);//计算每个滤波器组内的总能量voidMFCC(double*En,double*Cep);//计算MFCC的13个系数intmain(){//TWavHeaderwaveheader;FILE*sourcefile,*MFCCFile;shortbuffer[FrmLen];doubledBuff[FrmLen];doubleresult[FrmLen];//预加7、重结果doubledata[FrmLen];//加窗后得到的数据doubleFiltCoe1[FFTLen/2+1];//左系数doubleFiltCoe2[FFTLen/2+1];//右系数intNum[FFTLen/2+1];//一般而言,每个点会包含在相邻的两个滤波器中,这里是与该点相关的第二个滤波器doubleEn[FiltNum+1];//频带能量doubleCep[PCEP];//MFCC结果//对定义的变量赋初值temp_1=0;inti=0;for(i=0;i8、[i]=data[i]=0.0f;}for(i=0;i
2、omplex>#include//MFCC的特征选取,最后提取了13维左右最后结果保存在文件中usingnamespacestd;#defineSP_EMPHASIS_FACTOR0.97f/*预加重的系数*/typedefstruct_TWavHeader{intrId;//标志符(RIFF)intrLen;//数据大小,包括数据头的大小和音频文件的大小intwId;//格式类型("WAVE")intfId;//"fmt"intfLen;//Sizeof(WAVEFORMATEX)shortwFormatTag;//编码格式,包括WAV
3、E_FORMAT_PCM,WAVEFORMAT_ADPCM等shortnChannels;//声道数,单声道为1,双声道为2intnSamplesPerSec;//采样频率intnAvgBytesPerSec;//每秒的数据量shortnBlockAlign;//块对齐shortwBitsPerSample;//WAVE文件的采样大小intdId;//"data"intwSampleLength;//音频数据的大小}TWavHeader;constintFS=16;/*修改帧长*/constlongFrmLen=1024;//可修改帧长constunsi
4、gnedlongFFTLen=512;//参与FFT运算的512个数据constdoublePI=3.;constintFiltNum=40;//滤波器组数,一共40组constintPCEP=13;//最后得到的关于的13个MFCC的系数doubleHamming[FrmLen];inttemp_1;//计算次数的vectorMFCCcoefficient;staticdoublelast=0;//一窗数据最后一个点的值,此点用于预加重voidpreemphasis(double*buf,double*result,shortFrmLe
5、n);//预加重voidInitHamming();voidHammingWindow(double*result,double*data);voidcompute_fft(double*buffer,vector>&vecList);voidFFT(constunsignedlong&ulN,vector>&vecList);//FFT的实际程序voidInitFilt(double*FiltCoe1,double*FiltCoe2,int*Num);//初始化滤波器voidCFilt(d
6、ouble*spdata,double*FiltCoe1,double*FiltCoe2,int*Num,double*En,vector>&vecList);//计算每个滤波器组内的总能量voidMFCC(double*En,double*Cep);//计算MFCC的13个系数intmain(){//TWavHeaderwaveheader;FILE*sourcefile,*MFCCFile;shortbuffer[FrmLen];doubledBuff[FrmLen];doubleresult[FrmLen];//预加
7、重结果doubledata[FrmLen];//加窗后得到的数据doubleFiltCoe1[FFTLen/2+1];//左系数doubleFiltCoe2[FFTLen/2+1];//右系数intNum[FFTLen/2+1];//一般而言,每个点会包含在相邻的两个滤波器中,这里是与该点相关的第二个滤波器doubleEn[FiltNum+1];//频带能量doubleCep[PCEP];//MFCC结果//对定义的变量赋初值temp_1=0;inti=0;for(i=0;i8、[i]=data[i]=0.0f;}for(i=0;i
8、[i]=data[i]=0.0f;}for(i=0;i
此文档下载收益归作者所有