• 大小: 6.88MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-25
  • 语言: C/C++
  • 标签: mfcc  

资源简介

师弟师妹们,请收下。这是mfcc的pro的代码,仅供参考

资源截图

代码片段和文件信息

#include “MFCC.h“
#include 
#include 
#include 
#include “fftw3.h“
using namespace std;


void MFCC(const short* waveData int numSamples int sampleRate)
{
float *preemp = new float[numSamples];
preemp[0] = waveData[0];
for(int i = 1; i < numSamples; i++)
{
preemp[i] = waveData[i] - 0.95*waveData[i-1];
//printf(“%f “ preemp[i]);
}
//printf(“\n“);
//calculate the total frames when overlaps exist
int numframes =  ceil((numSamples-frameS_PER_BUFFER)/NOT_OVERLAP)+1;
//printf(“%d\n“ numframes);
float hammingWindow[frameS_PER_BUFFER];
float afterWin[512] = {0.0};
float energySpectrum[512] = {0.0};
float mel[NUM_FILTER] = {0};
float c[13] = {0};
for(int i = 0; i< frameS_PER_BUFFER; i++)
{
hammingWindow[i] = 0.54 - 0.46*cos(2*3.14*i/(frameS_PER_BUFFER-1));
}
//handle all frames one by one
for(int i = 0; i < numframes; i++)
{
int j;
//windowing
for(j=0; jameS_PER_BUFFER&&(j+(i-1)*NOT_OVERLAP) {
afterWin[j] = preemp[j+(i-1)*NOT_OVERLAP]*hammingWindow[j];  
}
//Zero Padding
for(int k = j-1; k < 512; k++) afterWin[k] = 0.0f;
//for(int a = 0; a < 512; a++) printf(“%f “ afterWin[a]);
//printf(“\n“);
//FFT + power
FFT_Power(afterWin energySpectrum);
//for(int a = 0; a < 512; a++) printf(“%f “ energySpectrum[a]);
//printf(“\n“);
//Warping the frequency axis + FilterBank
memset(mel 0 sizeof(float)*NUM_FILTER);
computeMel(mel sampleRate energySpectrum);
//for(int a = 0; a < NUM_FILTER; a++) printf(“%f “ mel[a]);
//printf(“\n“);
//DCT
memset(c 0 sizeof(float)*13);
DCT(mel c);
//for(int k = 0; k < 13; k++) printf(“%f “ c[k]);
//printf(“\n“);
}
delete[] preemp;
}

void FFT_Power(float *in float *energySpectrum)
{
int len = 512;
fftwf_complex *out = (fftwf_complex *)fftwf_malloc(sizeof(fftwf_complex) * len);
fftwf_plan p = fftwf_plan_dft_r2c_1d(len in out FFTW_ESTIMATE); 
fftwf_execute(p); 
for (int i = 0; i < len; i++)  
{  
energySpectrum[i] = out[i][0]*out[i][0] + out[i][1]*out[i][1];  
}
fftwf_destroy_plan(p);
fftwf_free(out);  
}

void computeMel(float *mel const int sampleRate const float *energySpectrum)
{
int fmax = sampleRate/2;
float maxMelFreq = 1127*log(1+fmax/700);
float melFilters[NUM_FILTER][3];
float delta = maxMelFreq/(NUM_FILTER+1);
float *m = new float[NUM_FILTER+2];
float *h = new float[NUM_FILTER+2];
float *f = new float[NUM_FILTER+2];
for(int i = 0; i < NUM_FILTER+2; i++)
{
m[i] = i * delta;
h[i] = 700 * (exp(m[i]/1127) - 1);
f[i] = floor((256+1) * h[i] / sampleRate);  //*********//
}
//get start peak end point of every trigle filter
for(int i = 0; i < NUM_FILTER; i++)
{
melFilters[i][0] = f[i];
melFilters[i][1] = f[i+1];
melFilters[i][2] = f[i+2];
}
delete[] m;
delete[] h;
delete[] f;
//calculate the output of every trigle filter
for(int i = 0; i < NUM_FILTER;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-04-08 14:25  lab1_end_mfcc\
     文件      113644  2015-03-31 12:12  lab1_end_mfcc\audio.wav
     目录           0  2015-04-08 14:25  lab1_end_mfcc\Backup\
     文件         891  2015-03-31 12:12  lab1_end_mfcc\Backup\sound_captrue.sln
     文件       10752  2015-03-31 12:12  lab1_end_mfcc\Backup\sound_captrue.v12.suo
     目录           0  2015-04-08 14:25  lab1_end_mfcc\Debug\
     文件        5748  2015-03-31 12:12  lab1_end_mfcc\Debug\BuildLog.htm
     文件          65  2015-03-31 12:12  lab1_end_mfcc\Debug\mt.dep
     文件      249856  2015-03-31 12:12  lab1_end_mfcc\Debug\portaudio_x86.dll
     文件       11074  2015-03-31 12:12  lab1_end_mfcc\Debug\portaudio_x86.lib
     文件        1474  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.Build.CppClean.log
     文件       35840  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.exe
     文件      285324  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.ilk
     文件        2886  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.log
     文件       21544  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.obj
     文件      470016  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.pdb
     目录           0  2015-04-08 14:25  lab1_end_mfcc\Debug\sound_captrue.tlog\
     文件         592  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\cl.command.1.tlog
     文件        2246  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\CL.read.1.tlog
     文件         560  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\CL.write.1.tlog
     文件        1268  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\link.command.1.tlog
     文件        2898  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\link.read.1.tlog
     文件         604  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\link.write.1.tlog
     文件         223  2015-03-31 12:12  lab1_end_mfcc\Debug\sound_captrue.tlog\sound_captrue.lastbuildstate
     文件       52224  2015-03-31 12:12  lab1_end_mfcc\Debug\vc120.idb
     文件       86016  2015-03-31 12:12  lab1_end_mfcc\Debug\vc120.pdb
     文件       18312  2015-03-31 12:12  lab1_end_mfcc\fftw3.h
     文件     2365756  2015-03-31 12:12  lab1_end_mfcc\libfftw3-3.dll
     文件      246078  2015-03-31 12:12  lab1_end_mfcc\libfftw3-3.lib
     文件     2446144  2015-03-31 12:12  lab1_end_mfcc\libfftw3f-3.dll
     文件      251664  2015-03-31 12:12  lab1_end_mfcc\libfftw3f-3.lib
............此处省略43个文件信息

评论

共有 条评论