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

📄 math_07.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
📖 第 1 页 / 共 2 页
字号:
    else if (operation_d(j) == (long)ADD) {            computeAddFloat(output_a, tmp_input);    }    //  Operation: SUBTRACT    //    else if (operation_d(j) == (long)SUBTRACT) {            computeSubFloat(output_a, tmp_input);    }    //  Operation: MULTIPLY    //    else if (operation_d(j) == (long)MULTIPLY) {            computeMultFloat(output_a, tmp_input);    }        //  Operation: DIVIDE    //    else if (operation_d(j) == (long)DIVIDE) {            computeDivFloat(output_a, tmp_input);    }        // invalid operation    //    else {      return Error::handle(name(), L"computeFuncCalcEnumerateFloat",			   ERR_UNKOPE, __FILE__, __LINE__);    }  }    // add the constant term  //  if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {    output_a.getVectorFloat().add((float)const_d);  }  else {    output_a.getMatrixFloat().add((float)const_d);  }    // exit gracefully  //  return true;}// method: computeAddFloat//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: logical error status//boolean Math::computeAddFloat(AlgorithmData& output_a,			      const AlgorithmData& input_a) const {    if (input_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {        long ilen = input_a.getVectorFloat().length();        if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {            long olen = output_a.getVectorFloat().length();            // if either input is of length 1, perform scalar addition      //      if (ilen == 1) {	float scalar = input_a.getVectorFloat()(0);	return output_a.getVectorFloat().add(scalar);      }      else if (olen == 1) {	float scalar = output_a.getVectorFloat()(0);	return output_a.getVectorFloat().add(input_a.getVectorFloat(), scalar);      }            // if they are the same length, do vector addition      //      else if (ilen == olen) {	return output_a.getVectorFloat().add(input_a.getVectorFloat());      }            // else error      //      else {	return Error::handle(name(), L"computeAddFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }        // 1 vector, 1 matrix. if the vector is of length 1, treat it as a    // scalar    //    else if (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {            if (ilen == 1) {	float scalar = input_a.getVectorFloat()(0);	return output_a.getMatrixFloat().add(scalar);      }      else {	return Error::handle(name(), L"computeAddFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }  }    else if (input_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {        // 1 vector, 1 matrix. if the vector is of length 1, treat it as a    // scalar    //    if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {      long olen = output_a.getVectorFloat().length();      if (olen == 1) {	float scalar = output_a.getVectorFloat()(0);	return output_a.makeMatrixFloat().add(input_a.getMatrixFloat(), scalar);      }      else {	return Error::handle(name(), L"computeAddFloat", ERR_MATCH, __FILE__,			     __LINE__);      }    }        // if both are matrices, just add them    //    else if (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {      return output_a.getMatrixFloat().add(input_a.getMatrixFloat());    }  }    // exit gracefully  //  return true;}// method: computeSubFloat//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: logical error status//boolean Math::computeSubFloat(AlgorithmData& output_a,			      const AlgorithmData& input_a) const {    if (input_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {        long ilen = input_a.getVectorFloat().length();        if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {            long olen = output_a.getVectorFloat().length();            // if either input is of length 1, perform scalar subtraction      //      if (ilen == 1) {	float scalar = input_a.getVectorFloat()(0);	return output_a.getVectorFloat().sub(scalar);      }      else if (olen == 1) {		// note this is different from addition since the operation is	// not cummative	//	float scalar = output_a.getVectorFloat()(0);	output_a.getVectorFloat().setLength(ilen);	output_a.getVectorFloat().assign(scalar);	return output_a.getVectorFloat().sub(input_a.getVectorFloat());      }            // if they are the same length, do vector subtraction      //      else if (ilen == olen) {	return output_a.getVectorFloat().sub(input_a.getVectorFloat());      }            // else error      //      else {	return Error::handle(name(), L"computeSubFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }        // 1 vector, 1 matrix. if the vector is of length 1, treat it as a    // scalar    //    else if (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {            if (ilen == 1) {	float scalar = input_a.getVectorFloat()(0);	return output_a.getMatrixFloat().sub(scalar);      }      else {	return Error::handle(name(), L"computeSubFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }  }    else if (input_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {        // 1 vector, 1 matrix. if the vector is of length 1, treat it as a    // scalar    //    if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {      long olen = output_a.getVectorFloat().length();      if (olen == 1) {		// note this is different from addition since the operation is	// not cummative	//	float scalar = output_a.getVectorFloat()(0);	output_a.makeMatrixFloat().setDimensions(input_a.getMatrixFloat());	output_a.getMatrixFloat().assign(scalar);	return output_a.getMatrixFloat().sub(input_a.getMatrixFloat());      }      else {	return Error::handle(name(), L"computeSubFloat", ERR_MATCH, __FILE__,			     __LINE__);      }    }        // if both are matrices, just subtract them    //    else if (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {      return output_a.getMatrixFloat().sub(input_a.getMatrixFloat());    }  }    // exit gracefully  //  return true;}// method: computeMultFloat//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: logical error status//boolean Math::computeMultFloat(AlgorithmData& output_a,			       const AlgorithmData& input_a) const {    if (input_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {        long ilen = input_a.getVectorFloat().length();        if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {            long olen = output_a.getVectorFloat().length();            // if either input is of length 1, perform scalar multiplication      //      if (ilen == 1) {	float scalar = input_a.getVectorFloat()(0);	return output_a.getVectorFloat().mult(scalar);      }      else if (olen == 1) {	float scalar = output_a.getVectorFloat()(0);	return output_a.getVectorFloat().mult(input_a.getVectorFloat(), scalar);      }            // if they are the same length, do vector multiplication      //      else if (ilen == olen) {	return output_a.getVectorFloat().mult(input_a.getVectorFloat());      }      // else error      //      else {	return Error::handle(name(), L"computeMultFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }    else if (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {      // if the vector is length 1, do scalar multiplication      //      if (ilen == 1) {	float scalar = input_a.getVectorFloat()(0);	return output_a.getMatrixFloat().mult(scalar);      }            // if the vector is the correct length for multv, do it      //      else if (ilen == output_a.getMatrixFloat().getNumColumns()) {	VectorFloat tmp_out;	output_a.getMatrixFloat().multv(tmp_out, input_a.getVectorFloat());	output_a.makeVectorFloat().assign(tmp_out);      }            // else error      //      else {	return Error::handle(name(), L"computeMultFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }  }    // input is a matrix  //  else if (input_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {        if (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT) {            long olen = output_a.getVectorFloat().length();            // if the vector is of length 1, do scalar multiplication      //      if (olen == 1) {	float scalar = output_a.getVectorFloat()(0);	output_a.makeMatrixFloat().assign(input_a.getMatrixFloat());	return output_a.getMatrixFloat().mult(scalar);      }            // if the vector is the correct length for vmult, do it      //      else if (olen == input_a.getMatrixFloat().getNumRows()) {		VectorFloat tmp_out;	input_a.getMatrixFloat().vmult(tmp_out, output_a.getVectorFloat());	output_a.getVectorFloat().assign(tmp_out);      }            // else error      //      else {	return Error::handle(name(), L"computeMultFloat", ERR_MATCH,			     __FILE__, __LINE__);      }    }    else if (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT) {            return output_a.getMatrixFloat().mult(input_a.getMatrixFloat());    }  }    // exit gracefully  //  return true;}// method: computeDivFloat//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: logical error status//// this method compute value for float type//boolean Math::computeDivFloat(AlgorithmData& output_a,			      const AlgorithmData& input_a) const {      // vector-matrix division is possible only if length of the  // vector is 1. no other matrix division is possible  //  if ((input_a.getDataType() == AlgorithmData::VECTOR_FLOAT) &&      (output_a.getDataType() == AlgorithmData::MATRIX_FLOAT)) {              if (input_a.getVectorFloat().length() > 1) {      return Error::handle(name(), L"computeDiv_Float",			   ERR_MATCH, __FILE__, __LINE__);    }    VectorFloat vec(input_a.getVectorFloat());    float scalar = vec(0);    output_a.getMatrixFloat().div(scalar);  }    // both inputs are vectors  //  else if ((input_a.getDataType() == AlgorithmData::VECTOR_FLOAT) &&	   (output_a.getDataType() == AlgorithmData::VECTOR_FLOAT)) {        // if the input is of length 1, do scalar division    //    if (input_a.getVectorFloat().length() == 1) {      float scalar = input_a.getVectorFloat()(0);            return output_a.getVectorFloat().div(scalar);    }        // if the lengths are equal, do element-wise division    //    else if (input_a.getVectorFloat().length() == output_a.getVectorFloat().length()) {            return output_a.getVectorFloat().div(input_a.getVectorFloat());          }     else {      return Error::handle(name(), L"computeDivFloat", ERR_MATCH,			   __FILE__, __LINE__);    }  }  else {    return Error::handle(name(), L"computeDivFloat", ERR_MATCH,			 __FILE__, __LINE__);  }    // exit gracefully  //  return true;}

⌨️ 快捷键说明

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