通过波形文件数据,进行MFCC特征提取,做相关滤波、加窗、fft变换等,得到13维mfcc特征,若在13维基础上继续做一阶二阶差分可得到24维mfcc特征
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 97341 2010-05-13 16:43 MFCCDebuggetmfcc.obj
文件 135239 2010-05-13 16:36 MFCCDebugmfcc.exe
文件 507032 2010-05-13 16:36 MFCCDebugmfcc.ilk
文件 14126 2010-05-08 09:02 MFCCDebugmfcc.obj
文件 5896884 2010-05-08 09:02 MFCCDebugmfcc.pch
文件 525312 2010-05-13 16:36 MFCCDebugmfcc.pdb
文件 2624 2010-05-12 09:36 MFCCDebugmfcc.res
文件 54496 2010-05-12 15:15 MFCCDebugmfccDlg.obj
文件 105357 2010-05-08 09:02 MFCCDebugStdAfx.obj
文件 459776 2010-05-13 16:43 MFCCDebugvc60.idb
文件 487424 2010-05-13 16:43 MFCCDebugvc60.pdb
文件 15184 2010-05-17 09:51 MFCCgetmfcc.cpp
文件 58 2010-05-08 16:15 MFCCgetmfcc.h
文件 35812 2010-05-12 09:36 MFCCmfcc.aps
文件 1289 2010-05-17 10:26 MFCCmfcc.clw
文件 2035 2010-05-05 16:36 MFCCmfcc.cpp
文件 4246 2010-05-06 16:39 MFCCmfcc.dsp
文件 514 2010-05-05 16:36 MFCCmfcc.dsw
文件 1302 2010-05-05 16:36 MFCCmfcc.h
文件 115712 2010-05-17 10:29 MFCCmfcc.ncb
文件 57856 2010-05-17 10:29 MFCCmfcc.opt
文件 679 2010-05-13 16:43 MFCCmfcc.plg
文件 5457 2010-05-12 09:36 MFCCmfcc.rc
文件 11024 2010-05-12 10:59 MFCCmfccDlg.cpp
文件 1833 2010-05-08 15:09 MFCCmfccDlg.h
文件 3543 2010-05-05 16:36 MFCCReadMe.txt
文件 1078 2010-05-05 16:36 MFCC
esmfcc.ico
文件 396 2010-05-05 16:36 MFCC
esmfcc.rc2
..A.SH. 3072 2010-05-06 15:47 MFCC
esThumbs.db
文件 866 2010-05-08 15:09 MFCC
esource.h
............此处省略8个文件信息
#include “stdafx.h“
#include “getmfcc.h“
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#include
using namespace std;
typedef struct _TWavHeader
{
int rId; //标志符(RIFF)
int rLen; //数据大小包括数据头的大小和音频文件的大小
int wId; //格式类型(“WAVE“)
int fId; //“fmt“
int fLen; //Sizeof(WAVEFORMATEX)
short wFormatTag; //编码格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等
short nChannels; //声道数,单声道为1,双声道为2
int nSamplesPerSec; //采样频率
int nAvgBytesPerSec; //每秒的数据量
short nBlockAlign; //块对齐
short wBitsPerSample; //WAVE文件的采样大小
int dId; //“data“
int wSampleLength; //音频数据的大小
}TWavHeader;
const int FS=16;
const int FrmLen=20*FS; //窗口长度
const unsigned long FFTLen=512; //参与FFT运算的512个数据
const double PI=3.1415926536;
const int FiltNum=25; //滤波器组数,一共25组
const int PCEP=13; //MFCC的阶数,最后得到的关于的13个MFCC的系数
const int GmmNum=8;
const double infinite=1e+32;
double Hamming[FrmLen];
vectorxishu;
typedef struct _GmmPara
{
double weight; //存放权值
double mean[PCEP]; //存放均值
double variance[PCEP]; //存放方差
}GmmPara;
GmmPara para[GmmNum];
void InitHamming();
void HammingWindow(short* buffloat* data);
float GetSTE(short* data);
int GetZcr(short *data);
void compute_fft(float *buffervector >& vecList);
void FFT(const unsigned long & ulN vector >& vecList); //FFT的实际程序
void display(const unsigned long & ulN vector >& vecList);
void InitFilt(float *FiltCoe1 float *FiltCoe2 int *Num); //初始化滤波器
void CFilt(float *spdata float *FiltCoe1 float *FiltCoe2 int *Num float *Envector >& vecList);
void MFCC(float *En); //计算MFCC的13个系数
void cluster();
void EM();
float CalculateLikelihood();
void WritePara();
int getmfcc(char *pathCString Name)
{
TWavHeader waveheader;
FILE *sourcefile;
short buffer[FrmLen];
float data[FrmLen]; //加窗后得到的数据
int index=0count=0;
float energy=0.0sum=0.0;
float FiltCoe1[FFTLen/2+1]; //左系数
float FiltCoe2[FFTLen/2+1]; //右系数
int Num[FFTLen/2+1]; //决定每个点属于哪一个滤波器,一般而言,每个点会包含在相邻的两个滤波器中,这里是与该点相关的第二个滤波器
float En[FiltNum+1]; //频带能量
vector > vecList;
ofstream outfile1(Name); //建立音频文件所对应的.txt文件,用于存储提取MFCC的内容
sourcefile=fopen(path“rb“); //打开要提取的音频文件
fread(&waveheadersizeof(struct _TWavHeader)1sourcefile);
//从文件sourcefile中读入1个_TWavHeader字节的数据项到waveheader所确定的地址中
InitHamming();//初始化汉明窗
InitFilt(FiltCoe1FiltCoe2Num); //初始化MEL滤波系数
/*int fread( void *buffer size_t size size_t num FILE *stream );
函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数)
并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流.
函数的返回值是读取的内容数量...
*/
while(fread(buffersizeof(short)FrmLensourcefile)==FrmLen)
{
Hamm
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 97341 2010-05-13 16:43 MFCCDebuggetmfcc.obj
文件 135239 2010-05-13 16:36 MFCCDebugmfcc.exe
文件 507032 2010-05-13 16:36 MFCCDebugmfcc.ilk
文件 14126 2010-05-08 09:02 MFCCDebugmfcc.obj
文件 5896884 2010-05-08 09:02 MFCCDebugmfcc.pch
文件 525312 2010-05-13 16:36 MFCCDebugmfcc.pdb
文件 2624 2010-05-12 09:36 MFCCDebugmfcc.res
文件 54496 2010-05-12 15:15 MFCCDebugmfccDlg.obj
文件 105357 2010-05-08 09:02 MFCCDebugStdAfx.obj
文件 459776 2010-05-13 16:43 MFCCDebugvc60.idb
文件 487424 2010-05-13 16:43 MFCCDebugvc60.pdb
文件 15184 2010-05-17 09:51 MFCCgetmfcc.cpp
文件 58 2010-05-08 16:15 MFCCgetmfcc.h
文件 35812 2010-05-12 09:36 MFCCmfcc.aps
文件 1289 2010-05-17 10:26 MFCCmfcc.clw
文件 2035 2010-05-05 16:36 MFCCmfcc.cpp
文件 4246 2010-05-06 16:39 MFCCmfcc.dsp
文件 514 2010-05-05 16:36 MFCCmfcc.dsw
文件 1302 2010-05-05 16:36 MFCCmfcc.h
文件 115712 2010-05-17 10:29 MFCCmfcc.ncb
文件 57856 2010-05-17 10:29 MFCCmfcc.opt
文件 679 2010-05-13 16:43 MFCCmfcc.plg
文件 5457 2010-05-12 09:36 MFCCmfcc.rc
文件 11024 2010-05-12 10:59 MFCCmfccDlg.cpp
文件 1833 2010-05-08 15:09 MFCCmfccDlg.h
文件 3543 2010-05-05 16:36 MFCCReadMe.txt
文件 1078 2010-05-05 16:36 MFCC
esmfcc.ico
文件 396 2010-05-05 16:36 MFCC
esmfcc.rc2
..A.SH. 3072 2010-05-06 15:47 MFCC
esThumbs.db
文件 866 2010-05-08 15:09 MFCC
esource.h
............此处省略8个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)