資源簡介
通過波形文件數據,進行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(大?。┲付ǖ淖止潝担?br/>并把它們替換到由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個文件信息
評論
共有 條評論