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

📄 fe_window.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 "FE_window.h"

#ifndef M_PI
#define M_PI    3.14159265358979323846
#endif


FeWindow::FeWindow()
{
}


FeWindow::~FeWindow()
{
}


int FeWindow::Windowing(float *inputA, int inputN, string& wkind)
{
	if(wkind == "Hamming")
		do_hamm_window(inputA, inputN);
	else if(wkind == "Hanning")
		do_hann_window(inputA, inputN);
	else if(wkind == "Rectangular" || wkind == "Bartlett")
		do_rect_window(inputA, inputN);
	else if(wkind == "Triangular")
		do_tri_window(inputA, inputN);
	else
		do_rect_window(inputA, inputN);
	return 1;
}


int FeWindow::Windowing(float *inputA, int inputN, WindowKind wkind)
{
	if(wkind == WIN_HAMMING)
		do_hamm_window(inputA, inputN);
	else if(wkind == WIN_HANNING)
		do_hann_window(inputA, inputN);
	else if(wkind == WIN_RECT || wkind == WIN_BARTLETT)
		do_rect_window(inputA, inputN);
	else if(wkind == WIN_TRI)
		do_tri_window(inputA, inputN);
	else
		do_rect_window(inputA, inputN);
	return 1;
}


int FeWindow::do_hamm_window(float *inputA, int inputN)
{
	if(hamm_window.size() != inputN){
		hamm_window.resize(inputN);
		float temp = (float)(2 * M_PI / (float)(inputN-1));
		for (int i=0 ; i<inputN ; i++ ) hamm_window[i] = (float)(0.54 - 0.46*cos(temp*i));
	}
	for (int i=0 ; i<inputN ;i++ ) inputA[i] = hamm_window[i]*inputA[i];
	return(1);
}


int FeWindow::do_hann_window(float *inputA, int inputN)
{
	int i;
	if(hann_window.size() != inputN){
		hann_window.resize(inputN);
		float temp = (float)(2. * M_PI / (float)(inputN-1));
		for (i=0 ; i<inputN ; i++ ) hann_window[i] = (float)(0.5 - 0.5*cos(temp*i));
	}
	for (i=0 ; i<inputN ;i++ ) inputA[i] = hann_window[i]*inputA[i];
	return(1);
}


int FeWindow::do_rect_window(float *inputA, int inputN)
{
  return(1);
}


int FeWindow::do_tri_window(float *inputA, int inputN)
{
	int i;
	if(tri_window.size() != inputN){
		tri_window.resize(inputN);
		for (i=0 ; i<inputN ; i++ ) {
			if(i <= inputN/2) tri_window[i]=((2*i)/(float)inputN);
			else              tri_window[i]=(2-(2*i)/(float)inputN);
		}
	}
	for (i=0 ; i<inputN ;i++ ) inputA[i] = tri_window[i]*inputA[i];
	return(1);
}

⌨️ 快捷键说明

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