• 大小: 2.02MB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2022-06-06
  • 语言: C/C++
  • 标签: Mfcc  /c++  

资源简介

通过波形文件数据,进行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个文件信息

评论

共有 条评论