资源简介
通过波形文件数据,进行MFCC特征提取,做相关滤波、加窗、fft变换等,得到13维mfcc特征,若在13维基础上继续做一阶二阶差分可得到24维mfcc特征
代码片段和文件信息
#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 MFCC\Debug\getmfcc.obj
文件 135239 2010-05-13 16:36 MFCC\Debug\mfcc.exe
文件 507032 2010-05-13 16:36 MFCC\Debug\mfcc.ilk
文件 14126 2010-05-08 09:02 MFCC\Debug\mfcc.obj
文件 5896884 2010-05-08 09:02 MFCC\Debug\mfcc.pch
文件 525312 2010-05-13 16:36 MFCC\Debug\mfcc.pdb
文件 2624 2010-05-12 09:36 MFCC\Debug\mfcc.res
文件 54496 2010-05-12 15:15 MFCC\Debug\mfccDlg.obj
文件 105357 2010-05-08 09:02 MFCC\Debug\StdAfx.obj
文件 459776 2010-05-13 16:43 MFCC\Debug\vc60.idb
文件 487424 2010-05-13 16:43 MFCC\Debug\vc60.pdb
文件 15184 2010-05-17 09:51 MFCC\getmfcc.cpp
文件 58 2010-05-08 16:15 MFCC\getmfcc.h
文件 35812 2010-05-12 09:36 MFCC\mfcc.aps
文件 1289 2010-05-17 10:26 MFCC\mfcc.clw
文件 2035 2010-05-05 16:36 MFCC\mfcc.cpp
文件 4246 2010-05-06 16:39 MFCC\mfcc.dsp
文件 514 2010-05-05 16:36 MFCC\mfcc.dsw
文件 1302 2010-05-05 16:36 MFCC\mfcc.h
文件 115712 2010-05-17 10:29 MFCC\mfcc.ncb
文件 57856 2010-05-17 10:29 MFCC\mfcc.opt
文件 679 2010-05-13 16:43 MFCC\mfcc.plg
文件 5457 2010-05-12 09:36 MFCC\mfcc.rc
文件 11024 2010-05-12 10:59 MFCC\mfccDlg.cpp
文件 1833 2010-05-08 15:09 MFCC\mfccDlg.h
文件 3543 2010-05-05 16:36 MFCC\ReadMe.txt
文件 1078 2010-05-05 16:36 MFCC\res\mfcc.ico
文件 396 2010-05-05 16:36 MFCC\res\mfcc.rc2
..A.SH. 3072 2010-05-06 15:47 MFCC\res\Thumbs.db
文件 866 2010-05-08 15:09 MFCC\resource.h
............此处省略8个文件信息
相关资源
- 北京化工大学计算方法(C/C++)讲义
- GBT 28169-2011 嵌入式软件 C语言编码规范
- XUnZip Zip解压缩.rar
- Windows_API_函数大全 C/C++
- C语言程序设计教材习题参考答案.do
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- 高效FFT的C/C++代码实现包括基2的DIF和
- c/c++开发网络验证和本地验证
- 操作系统存储管理实验报告c/c++
- C++编写的万年历源码
- C语言进阶源码---基于graphics实现图书
- 井字棋三连棋的AI实现,C/C++
- 《水果忍者》设计报告.doc
- MFC实现的红绿灯程序
- Win32简易画图程序
- C++网络爬虫项目
- 泡泡堂(炸弹人)小游戏C/C++完整源码
- 使用C/C++读取BITMAP的内容
- VC图像处理-用Canny算子提取边缘
- C/C++视频教程
- 个人总结的一些C/C++编码规范
- 高斯消去法求解线性方程组C/C++程序输
- celrityC/C++源码查看工具
- 网络编程MFC 实验四 FTP客户端功能实现
- C/C++语言大作业、小游戏
- 完整的C/C++时序的B+树数据库系统实现
- qt2048/c++2048
- Eclipse C/C++ 自动补全的cdt补丁
- gmm mfcc说话人识别
- MongoDB C/C++开发使用案例Demo
评论
共有 条评论