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

📄 16to8.cpp

📁 MFCC特征提取算法以及语音端点检测源码
💻 CPP
字号:
//16to8.cpp
#include <stdio.h>
#include <string.h>
#include <math.h>

#include "16to8.h"

FSDEF fs;

void initialfilter(void)
{
float B[numFilter+1] ={
(float)0.000200 ,
(float)-0.000150,
(float)-0.000279,
(float)0.000024 ,
(float)0.000309 ,
(float)0.000125 ,
(float)-0.000276,
(float)-0.000273,
(float)0.000172 ,
(float)0.000392 ,
(float)0.000000 ,
(float)-0.000445,
(float)-0.000222,
(float)0.000398 ,
(float)0.000454 ,
(float)-0.000230,
(float)-0.000637,
(float)-0.000054,
(float)0.000706 ,
(float)0.000416 ,
(float)-0.000603,
(float)-0.000779,
(float)0.000302 ,
(float)0.001044 ,
(float)0.000175 ,
(float)-0.001105,
(float)-0.000751,
(float)0.000885 ,
(float)0.001294 ,
(float)-0.000361,
(float)-0.001645,
(float)-0.000408,
(float)0.001655 ,
(float)0.001280 ,
(float)-0.001229,
(float)-0.002046,
(float)0.000367 ,
(float)0.002474 ,
(float)0.000811 ,
(float)-0.002365,
(float)-0.002071,
(float)0.001616 ,
(float)0.003103 ,
(float)-0.000270,
(float)-0.003581,
(float)-0.001462,
(float)0.003255 ,
(float)0.003220 ,
(float)-0.002024,
(float)-0.004560,
(float)0.000000 ,
(float)0.005045 ,
(float)0.002477 ,
(float)-0.004362,
(float)-0.004880,
(float)0.002427 ,
(float)0.006587 ,
(float)0.000550 ,
(float)-0.007017,
(float)-0.004056,
(float)0.005777 ,
(float)0.007335 ,
(float)-0.002801,
(float)-0.009525,
(float)-0.001577,
(float)0.009831 ,
(float)0.006610 ,
(float)-0.007726,
(float)-0.011228,
(float)0.003121 ,
(float)0.014203 ,
(float)0.003530 ,
(float)-0.014373,
(float)-0.011205,
(float)0.010877 ,
(float)0.018398 ,
(float)-0.003365,
(float)-0.023275,
(float)-0.007871,
(float)0.023848 ,
(float)0.021885 ,
(float)-0.018065,
(float)-0.037169,
(float)0.003519 ,
(float)0.051875 ,
(float)0.024193 ,
(float)-0.064095,
(float)-0.080483,
(float)0.072178 ,
(float)0.309445 ,
(float)0.425024 ,
(float)0.309445 ,
(float)0.072178 ,
(float)-0.080483,
(float)-0.064095,
(float)0.024193 ,
(float)0.051875 ,
(float)0.003519 ,
(float)-0.037169,
(float)-0.018065,
(float)0.021885 ,
(float)0.023848 ,
(float)-0.007871,
(float)-0.023275,
(float)-0.003365,
(float)0.018398 ,
(float)0.010877 ,
(float)-0.011205,
(float)-0.014373,
(float)0.003530 ,
(float)0.014203 ,
(float)0.003121 ,
(float)-0.011228,
(float)-0.007726,
(float)0.006610 ,
(float)0.009831 ,
(float)-0.001577,
(float)-0.009525,
(float)-0.002801,
(float)0.007335 ,
(float)0.005777 ,
(float)-0.004056,
(float)-0.007017,
(float)0.000550 ,
(float)0.006587 ,
(float)0.002427 ,
(float)-0.004880,
(float)-0.004362,
(float)0.002477 ,
(float)0.005045 ,
(float)0.000000 ,
(float)-0.004560,
(float)-0.002024,
(float)0.003220 ,
(float)0.003255 ,
(float)-0.001462,
(float)-0.003581,
(float)-0.000270,
(float)0.003103 ,
(float)0.001616 ,
(float)-0.002071,
(float)-0.002365,
(float)0.000811 ,
(float)0.002474 ,
(float)0.000367 ,
(float)-0.002046,
(float)-0.001229,
(float)0.001280 ,
(float)0.001655 ,
(float)-0.000408,
(float)-0.001645,
(float)-0.000361,
(float)0.001294 ,
(float)0.000885 ,
(float)-0.000751,
(float)-0.001105,
(float)0.000175 ,
(float)0.001044 ,
(float)0.000302 ,
(float)-0.000779,
(float)-0.000603,
(float)0.000416 ,
(float)0.000706 ,
(float)-0.000054,
(float)-0.000637,
(float)-0.000230,
(float)0.000454 ,
(float)0.000398 ,
(float)-0.000222,
(float)-0.000445,
(float)0.000000 ,
(float)0.000392 ,
(float)0.000172 ,
(float)-0.000273,
(float)-0.000276,
(float)0.000125 ,
(float)0.000309 ,
(float)0.000024 ,
(float)-0.000279,
(float)-0.000150,
(float)0.000200 ,
};
	memset(&fs.x, 0, sizeof(fs.x));
	for (int i=0; i<numFilter+1; i++)
		fs.B[i] = B[i];
}

void initial_sentence(void)
{
	fs.j=0;
}

/*************************************************************
	FIR滤波器函数
	sample = 输入待滤波的数
	B --> 滤波器参数
	x --> 滤波器中间状态
	nFilterOrder = 滤波器阶数
*************************************************************/
short Filter(short sample,float *B,float *x,short nFilterOrder)
{
	short	i;
	float	y;
	float   z;
	
	short rtn;

	for( i=nFilterOrder; i>0; i-- )
	{
		x[i]=x[i-1];
	}

	x[0] = (float)sample;
	y = (float)0.0;

	for( i=0; i<=nFilterOrder; i++ )
		y += (B[i] * x[i] );

	z=(float)floor((double)y);//取整
	rtn=(short)z;//截短

	return rtn;
}
/*************************************************************
	downsample_16_to_8
	抽取函数
	*data_16					16k采样的数据头
	*data_8						8k采样的数据头
	*j							采样计数
*************************************************************/
void downsample_16_to_8_one_sentence( short *data_16, short *data_8, long *j)
{
	long i;
	i=*j;
	data_8[i]=data_16[2*i];
	(*j)++;
}

⌨️ 快捷键说明

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