Professional Documents
Culture Documents
MFCC On Tiva
MFCC On Tiva
* MFCC.h
*
* Created on: Dec 4, 2014
*
Author: Loc Le
*/
#ifndef MFCC_H_
#define MFCC_H_
#define PART_TM4C123GH6PM
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_adc.h"
#include "inc/hw_gpio.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "driverlib/ssi.h"
#include "driverlib/timer.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/fpu.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
#include "math_helper.h"
#include <math.h>
#include "arm_math.h"
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif
#define NUM_SAMPLES
me samples
#define NUM_ADC
es (32 Frames)
#define NUM_FRAME
me
#define NUM_POINT
points
#define NUM_FILTER
filter
#define NUM_CEPSTRUM
CC
#define
#define
#define
#define
SAMPLING_FREQ
BIT_ORDER_FFT
iFFTflag
DECAY_FACTOR
80
4000
// Number of fra
// Number of voice sampl
50
// Number of fra
128
// Number of FFT
23
// Number of Mel
12
// Number of pfeature MF
8000
1
// Fs = 8kHz
0
0.992
#define
#define
#define
#define
#define
do_not_run 2
yes 1
no 0
mode_training 0
mode_run 1
#define
#define
#define
#define
#define
INT_MIN
INT_MAX
X_array
Y_array
Length
0
65535
12
12
12
float
float
float
float
float
g_ADCOutput [NUM_ADC];
g_fFFTInput[NUM_POINT];
g_fFFTResult[NUM_POINT*2];
g_MELoutput[NUM_FRAME][NUM_FILTER];
g_MFCCoutput[NUM_FRAME - 1][NUM_CEPSTRUM];
uint32_t g_ulADCValue;
d ADC Value
uint32_t g_ulCount = 0;
nt samples
uint32_t g_ulCount_1 = 0;
nt frame
volatile uint8_t DataReady;
n full samples
float DataRecieve;
float ground;
volatile uint8_t slince = do_not_run;
volatile uint8_t ready = do_not_run;
char mode[11];
int i = 0;
int j = 0;
int k = 0;
int t = 0;
int p;
float temp;
float temp0;
float sum_FFT;
float energy;
char test[20];
float matrix[X_array][Y_array];
float data[Length];
float templates[Length];
float result[40];
float result_1[10];
//*****************************************************************************
// SUBROUTINE HEADER
//*****************************************************************************
void SysCtl_Config();
void FPU_Config();
void LED_Config();
void BUTTON_Config();
void TIMER_Config();
void ADC_Config();
void UART_Config();
void Clear();
float cal_energy (float input[NUM_SAMPLES]);
void cal_pre_emphasis(void);
void DSP_init(void);
void DSP_process(void);
void Mel_filter_bank(void);
void Normalized_FFT(void);
void overlap(void);
//void Log_operation(void);
void cepstrum_calculation(void);
void ftoa(float f,char *buf);
void MFCC_run(void);
_CTL_END );
ADCSequenceEnable(ADC0_BASE, 3);
ADCIntEnable(ADC0_BASE, 3);
IntEnable(INT_ADC0SS3);
IntMasterEnable();
}
void UART_Config()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
//Enable UART0
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
//Enable GPIO Port A
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
//PA0,PA
1: UART 0 Pins
GPIOPinConfigure(GPIO_PA0_U0RX);
//PA0-UART0-RX
GPIOPinConfigure(GPIO_PA1_U0TX);
//PA1-UART0-TX
UARTConfigSetExpClk(UART0_BASE,
//UART0
SysCtlClockGet(),
//Processor Clock
9600,
//Baud rate 9600
UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_
NONE);
//Data 8 bit,1 Stop bit, no Parity
UARTFIFOLevelSet(UART0_BASE, UART_FIFO_TX4_8, UART_FIFO_RX4_8); //set FI
FO level to 8 characters
UARTFIFOEnable(UART0_BASE); //enable FIFOs
IntEnable(INT_UART0); //cho php ngt UART
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); //ch cho php RX v TX ng
UARTStdioConfig(0,9600,SysCtlClockGet()); //tells uartstdio functions to
use UART0
}
//-------MFCC-----------------------------------------------------------------void Clear()
{
for(t=0 ; t<sizeof(mode);t++)
mode[t] = 0;
for(t=0 ; t<NUM_ADC;t++)
g_ADCOutput[t] = 0;
for(t=0 ; t<NUM_POINT;t++)
g_fFFTInput[t] = 0;
for(t=0 ; t<NUM_POINT*2;t++)
g_fFFTResult[t] = 0;
for (t=0; t<NUM_FRAME; t++)
{
for(k=0; k<NUM_FILTER; k++)
{
g_MELoutput[t][k] = 0;
}
}
sum_FFT = 0;
for (t=0; t<NUM_FRAME; t++)
{
for(k=0; k<NUM_CEPSTRUM; k++)
{
g_MFCCoutput[t][k] = 0;
}
}
}
float cal_energy (float input[NUM_ADC])
{
int t;
temp = 0;
float output;
for (t=0; t<NUM_ADC; t++)
{
temp = temp + input[t] * input[t];
}
output = log(temp);
return(output);
}
void cal_pre_emphasis (void)
{
temp = 0;
temp0 = 0;
for (t=0; t<NUM_ADC ; t++)
{
temp = temp0;
temp0 = g_ADCOutput[t];
g_ADCOutput[t] = temp0 - 0.97*temp;
}
}
void DSP_init(void)
{
status = arm_rfft_init_f32(&fftStructure, &cfftStructure, NUM_POINT, iFF
Tflag,BIT_ORDER_FFT);
}
void DSP_process(void)
{
//temp = 0;
// And do the forward FFT transform
//
arm_rfft_f32(&fftStructure, g_fFFTInput, g_fFFTResult);
//
// Calculate the complex magnitude of the reusult
//
arm_cmplx_mag_f32(g_fFFTResult, g_fFFTResult, NUM_POINT);
for(t=0; t<NUM_POINT; t++)
{
sum_FFT = sum_FFT + g_fFFTResult[t] * g_fFFTResult[t];
}
/*for(t=0; t<NUM_POINT; t++)
{
g_fFFTResult[t] = g_fFFTResult[t] / temp;
}*/
}
void Mel_filter_bank(void)
{
g_MELoutput[g_ulCount_1][0] = g_fFFTResult[0] + g_fFFTResult[1];
g_MELoutput[g_ulCount_1][1] = g_fFFTResult[0] + g_fFFTResult[1] + g_fFFT
Result[2];
g_MELoutput[g_ulCount_1][2] = g_fFFTResult[1] + g_fFFTResult[2] + g_fFFT
Result[3] + g_fFFTResult[4];
g_MELoutput[g_ulCount_1][3] = g_fFFTResult[2] + g_fFFTResult[3] + g_fFFT
Result[4] + g_fFFTResult[5];
}
}
}
void overlap(void)
{
for (t=0; t<NUM_FRAME - 1; t++)
{
for(k=0; k<NUM_FILTER; k++)
{
g_MELoutput[t][k] = g_MELoutput[t][k] + g_MELoutput[t+1]
[k];
}
}
}
/*void Log_operation(void)
{
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_FILTER; k++)
{
g_MELoutput[t][k] = log(g_MELoutput[t][k]);
}
}
}*/
void cepstrum_calculation(void)
{
temp = 0;
for (t=0; t<NUM_FRAME - 1; t++)
{
for (p=0; p<NUM_CEPSTRUM; p++)
{
g_MFCCoutput[t][p] = 0;
for (k=0; k<NUM_FILTER; k++)
{
//rad = (k-0.5)*p*PI/k;
temp = log(g_MELoutput[t][k]) * cos_dct[p][k];
//temp = input[n][k] * cos(rad);
g_MFCCoutput[t][p]= g_MFCCoutput[t][p] + temp;
}
}
}
}
void ftoa(float f,char *buf)
{
int pos=0,ix,dp,num;
if(f <= -100000000 || f >= 100000000)
buf[pos++]='0';
else
{
if (f<0)
{
buf[pos++]='-';
f = -f;
}
dp=0;
while (f>=10.0)
{
f=f/10.0;
dp++;
}
for (ix=1;ix<8;ix++)
{
num = (int)f;
f=f-num;
if (num>9)
buf[pos++]='#';
else
buf[pos++]='0'+num;
if (dp==0) buf[pos++]='.';
f=f*10.0;
dp--;
}
}
}
void MFCC_run(void)
{
while(DataReady == 0);
if(DataReady == 1)
{
//energy = cal_energy(g_ADCInput);
cal_pre_emphasis();
// calculate energy
// calculate emphasis
test[10]
test[11]
test[12]
test[13]
test[14]
test[15]
test[16]
test[17]
test[18]
test[19]
=
=
=
=
=
=
=
=
=
=
0;
0;
0;
0;
0;
0;
0;
0;
0;
0;
}
}*/
g_ulCount=0;
DataReady = 0;
for(t=0 ; t<sizeof(mode);t++)
mode[t] = 0;
for(t=0 ; t<NUM_ADC;t++)
g_ADCOutput[t] = 0;
for(t=0 ; t<NUM_POINT;t++)
g_fFFTInput[t] = 0;
for(t=0 ; t<NUM_POINT*2;t++)
g_fFFTResult[t] = 0;
for (t=0; t<NUM_FRAME; t++)
{
for(k=0; k<NUM_FILTER; k++)
{
g_MELoutput[t][k] = 0;
}
}
sum_FFT = 0;
}
}
//-------DTW------------------------------------------------------------------float min( float x, float y, float z ) // return minimum among integer x, y and
z
{
float min = 0;
if( ( x <= y ) && ( x <= z ) ) min = x;
if( ( y <= x ) && ( y <= z ) ) min = y;
if( ( z <= x ) && ( z <= y ) ) min = z;
return min;
}
float min_4( float x1, float x2, float x3, float x4 ) // return minimum among in
teger x, y and z
{
float min = 0;
if(( x1 <= x2 ) && ( x1 <= x3 ) && ( x1 <= x4 )) min = x1;
if(( x2 <= x1 ) && ( x2 <= x3 ) && ( x2 <= x4 )) min = x2;
if(( x3 <= x1 ) && ( x3 <= x2 ) && ( x3 <= x4 )) min = x3;
if(( x4 <= x1 ) && ( x4 <= x2 ) && ( x4 <= x3 )) min = x4;
return min;
}
void Total_cost(void)
{
int x,y;
for(x=0; x < X_array; x++)
// local-cost matrix
{
for(y=0; y < Y_array; y++)
{
matrix[x][y] = (templates[x]-data[y])*(templates[x]-data
[y]) ;
}
}
for(x=1; x < X_array; x++) // global-cost of first column (predCol[0])
matrix[x][0] = matrix[x][0] + matrix[x-1][0];
for(y=1; y < Y_array; y++)
// global-cost
{
matrix[0][y] = matrix[0][y] + matrix[0][y-1];
for(x=1; x < X_array; x++)
{
matrix[x][y] = matrix[x][y] + min(matrix[x-1][y-1],matri
x[x][y-1],matrix[x-1][y]);
}
}
}
void DTW_run(void)
{
for (k=0; k<sizeof(result); k++)
{
result[k] = 0;
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num1_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[0] = result[0] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num1_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[1] = result[1] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num1_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[2] = result[2] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num1_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[3] = result[3] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num2_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[4] = result[4] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num2_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[5] = result[5] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num2_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[6] = result[6] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num2_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[7] = result[7] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num3_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[8] = result[8] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num3_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[9] = result[9] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num3_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[10] = result[10] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num3_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[11] = result[11] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num4_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[12] = result[12] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num4_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[13] = result[13] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num4_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[14] = result[14] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num6_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[20] = result[20] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num6_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[21] = result[21] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num6_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[22] = result[22] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num6_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[23] = result[23] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num7_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[24] = result[24] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num7_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[25] = result[25] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num7_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[26] = result[26] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num7_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[27] = result[27] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num8_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[28] = result[28] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num8_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[29] = result[29] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num8_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[30] = result[30] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num8_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[31] = result[31] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num9_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[32] = result[32] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num9_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[33] = result[33] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num9_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[34] = result[34] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num9_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[35] = result[35] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num10_1[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[36] = result[36] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num10_2[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[37] = result[37] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num10_3[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[38] = result[38] + matrix[X_array-1][Y_array-1];
}
for (t=0; t<NUM_FRAME - 1; t++)
{
for (k=0; k<NUM_CEPSTRUM; k++)
{
if(g_MFCCoutput[t][k] <= -1000 || g_MFCCoutput[t][k] >=
1000)
data[k] = 0;
else
data[k] = g_MFCCoutput[t][k];
templates[k] = num10_4[t*NUM_CEPSTRUM + k];
}
Total_cost();
result[39] = result[39] + matrix[X_array-1][Y_array-1];
}
}
#endif /* MFCC_H_ */