⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fe_misc_lib.cpp

📁 这是一个语音特征提取的程序源码
💻 CPP
字号:
///////////////////////////////////////////////////////////////////////////////
// This is a part of the Feature program.
// Version: 1.0
// Date: February 22, 2003
// Programmer: Oh-Wook Kwon
// Copyright(c) 2003 Oh-Wook Kwon. All rights reserved. owkwon@ucsd.edu
///////////////////////////////////////////////////////////////////////////////

#include "StdAfx.h"#include <malloc.h>
#include <ctime>
#include "FE_feature.h"
#ifdef _WIN32
long Fe::lrand48()
{
	return (long)rand();
}


void Fe::srand48(long seedvar)
{
	srand((int)seedvar);
}
#endif

/************************* memory alloc and free*************************/void *Fe::m_alloc(int size){	void 	*temp;	assert(size>0);	if(( temp = (void *) malloc(size)) == NULL)		err_quit("Memory insufficient\n");	return(temp);}
void *Fe::c_alloc(int num_of_elts, int size){	void	*temp;	assert(size>0);	if(( temp = (void *) calloc(num_of_elts,size)) == NULL)		err_quit("Memory insufficient\n");	return(temp);}
void *Fe::re_alloc(void *block, int size){	void 	*temp;	assert(size>0);	if(( temp = (void *) realloc(block,size)) == NULL)		err_quit("Memory insufficient\n");	return(temp);}
char **Fe::alloc2d(int dim1, int dim2, int size){	int	i;
	assert(size>0);	unsigned nelem = (unsigned) dim1 * dim2;
	assert(nelem>0);	char *p = (char *) c_alloc(nelem, (unsigned) size);
	assert(p);	char **pp = (char **) c_alloc((unsigned) dim1, (unsigned) sizeof(char *));
	assert(pp);	for (i = 0; i < dim1; i++) pp[i] = p + (i * dim2 * size);	return (pp);}

char ***Fe::alloc3d(int dim1, int dim2, int dim3, int size)
{
	int		i;
	assert(size>0);
	unsigned nelem = (unsigned) dim1 * dim2 * dim3;
	assert(nelem>0);
	char *p = (char *) c_alloc(nelem, (unsigned) size);
	assert(p);
	char **pp = (char **) c_alloc((unsigned) dim1*dim2, (unsigned) sizeof(char *));
	assert(pp);
	char ***ppp = (char ***) c_alloc((unsigned) dim1, (unsigned) sizeof(char **));
	assert(ppp);
	for (i = 0; i < dim1; i++) ppp[i] = pp + (i * dim2 * sizeof(char*));
	for (i = 0; i < dim1*dim2; i++) pp[i] = p + (i * dim3 * size);
	return ppp;
}

void Fe::free2d(void **p){	if (p) {		if(p[0]) free(p[0]);		free(p);	}	return;}

void Fe::free3d(void ***p)
{
	if(p){
		if(p[0]) {
			if(p[0][0]) free(p[0][0]);
			free(p[0]);
		}
		free(p);
	}
	return;
}
/*********************************************** returns non-zero, if the h/w is little endian***********************************************/int Fe::little_endian(){	char 	b[4];	register long *l = (long *) b;		*l = 1;	return ((int) b[0]);	}
/*================== Supporting Routines =====================*/float Fe::sum(int nstart, int nfinal, float *seq)      {	int 	i;	float 	total=0;	for(i=nstart; i<=nfinal; i++) total += seq[i];	return(total);}
float Fe::product (int nstart, int nfinal, float *seq )      {	int 	i;	float 	prod = 1;	for(i=nstart-1; i<nfinal; i++) prod *= seq[i];	return(prod);}
float Fe::power(float x, int n){	float 	p;	if(n>0)	for(p=1; n>0; --n) p=p*x;	else if(n<0) for(p=1; n<0; ++n) p=p/x;	else p=1;	return(p);}
int Fe::ipower(int x, int n){	int p = 1;	for( ; n > 0; --n) p *= x ;	return p;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -