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

📄 math_10.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
📖 第 1 页 / 共 2 页
字号:
      if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {	output_a.makeVectorComplexDouble().assign(tmp_input.getVectorComplexDouble());      }      else {	output_a.makeMatrixComplexDouble().assign(tmp_input.getMatrixComplexDouble());      }    }        //  Operation: ADD    //    else if (operation_d(j) == (long)ADD) {            computeAddCDouble(output_a, tmp_input);    }    //  Operation: SUBTRACT    //    else if (operation_d(j) == (long)SUBTRACT) {            computeSubCDouble(output_a, tmp_input);    }    //  Operation: MULTIPLY    //    else if (operation_d(j) == (long)MULTIPLY) {      computeMultCDouble(output_a, tmp_input);    }        //  Operation: DIVIDE    //    else if (operation_d(j) == (long)DIVIDE) {            computeDivCDouble(output_a, tmp_input);    }        // invalid operation    //    else {      return Error::handle(name(), L"computeFuncCalcEnumerateCDouble",			   ERR_UNKOPE, __FILE__, __LINE__);    }  }  // add the constant term  //  if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {    output_a.getVectorComplexDouble().add((complexdouble)const_d);  }  else {    output_a.getMatrixComplexDouble().add((complexdouble)const_d);  }    // exit gracefully  //  return true;}// method: computeAddCDouble//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: a boolean value indicating status//boolean Math::computeAddCDouble(AlgorithmData& output_a,				const AlgorithmData& input_a) const {    if (input_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {        long ilen = input_a.getVectorComplexDouble().length();    if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {      long olen = output_a.getVectorComplexDouble().length();            // if either input is of length 1, perform scalar addition      //      if (ilen == 1) {	complexdouble scalar = input_a.getVectorComplexDouble()(0);	return output_a.getVectorComplexDouble().add(scalar);      }      else if (olen == 1) {	complexdouble scalar = output_a.getVectorComplexDouble()(0);	return output_a.getVectorComplexDouble().add(input_a.getVectorComplexDouble(), scalar);      }            // if they are the same length, do vector addition      //      else if (ilen == olen) {	return output_a.getVectorComplexDouble().add(input_a.getVectorComplexDouble());      }      // else error      //      else {	return Error::handle(name(), L"computeAddCDouble",			     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_COMPLEX_DOUBLE) {      if (ilen == 1) {	complexdouble scalar = input_a.getVectorComplexDouble()(0);	return output_a.getMatrixComplexDouble().add(scalar);      }      else {	return Error::handle(name(), L"computeAddCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }  }  else if (input_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {    // 1 vector, 1 matrix. if the vector is of length 1, treat it as a    // scalar    //    if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {      long olen = output_a.getVectorComplexDouble().length();      if (olen == 1) {	complexdouble scalar = output_a.getVectorComplexDouble()(0);	return output_a.makeMatrixComplexDouble().add(input_a.getMatrixComplexDouble(), scalar);      }      else {	return Error::handle(name(), L"computeAddCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }    // if both are matrices, just add them    //    else if (output_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {      return output_a.getMatrixComplexDouble().add(input_a.getMatrixComplexDouble());    }  }  // exit gracefully  //  return true;}// method: computeSubCDouble//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: a boolean value indicating status//boolean Math::computeSubCDouble(AlgorithmData& output_a,				const AlgorithmData& input_a) const {    if (input_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {        long ilen = input_a.getVectorComplexDouble().length();    if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {      long olen = output_a.getVectorComplexDouble().length();            // if either input is of length 1, perform scalar subtraction      //      if (ilen == 1) {	complexdouble scalar = input_a.getVectorComplexDouble()(0);	return output_a.getVectorComplexDouble().sub(scalar);      }      else if (olen == 1) {	// note this is different from addition since the operation is	// not cummative	//	complexdouble scalar = output_a.getVectorComplexDouble()(0);	output_a.getVectorComplexDouble().setLength(ilen);	output_a.getVectorComplexDouble().assign(scalar);	return output_a.getVectorComplexDouble().sub(input_a.getVectorComplexDouble());      }            // if they are the same length, do vector subtraction      //      else if (ilen == olen) {	return output_a.getVectorComplexDouble().sub(input_a.getVectorComplexDouble());      }      // else error      //      else {	return Error::handle(name(), L"computeSubCDouble",			     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_COMPLEX_DOUBLE) {      if (ilen == 1) {	complexdouble scalar = input_a.getVectorComplexDouble()(0);	return output_a.getMatrixComplexDouble().sub(scalar);      }      else {	return Error::handle(name(), L"computeSubCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }  }  else if (input_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {    // 1 vector, 1 matrix. if the vector is of length 1, treat it as a    // scalar    //    if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {      long olen = output_a.getVectorComplexDouble().length();      if (olen == 1) {	// note this is different from addition since the operation is	// not cummative	//	complexdouble scalar = output_a.getVectorComplexDouble()(0);	output_a.makeMatrixComplexDouble().setDimensions(input_a.getMatrixComplexDouble());	output_a.getMatrixComplexDouble().assign(scalar);	return output_a.getMatrixComplexDouble().sub(input_a.getMatrixComplexDouble());      }      else {	return Error::handle(name(), L"computeSubCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }    // if both are matrices, just subtract them    //    else if (output_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {      return output_a.getMatrixComplexDouble().sub(input_a.getMatrixComplexDouble());    }  }  // exit gracefully  //  return true;}// method: computeMultCDouble//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: a boolean value indicating status//boolean Math::computeMultCDouble(AlgorithmData& output_a,				 const AlgorithmData& input_a) const {    if (input_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {        long ilen = input_a.getVectorComplexDouble().length();    if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {      long olen = output_a.getVectorComplexDouble().length();      // if either input is of length 1, perform scalar multiplication      //      if (ilen == 1) {	complexdouble scalar = input_a.getVectorComplexDouble()(0);	return output_a.getVectorComplexDouble().mult(scalar);      }      else if (olen == 1) {	complexdouble scalar = output_a.getVectorComplexDouble()(0);	return output_a.getVectorComplexDouble().mult(input_a.getVectorComplexDouble(), scalar);      }            // if they are the same length, do vector multiplication      //      else if (ilen == olen) {	return output_a.getVectorComplexDouble().mult(input_a.getVectorComplexDouble());      }      // else error      //      else {	return Error::handle(name(), L"computeMultCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }    else if (output_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {      // if the vector is length 1, do scalar multiplication      //      if (ilen == 1) {	complexdouble scalar = input_a.getVectorComplexDouble()(0);	return output_a.getMatrixComplexDouble().mult(scalar);      }      // if the vector is the correct length for multv, do it      //      else if (ilen == output_a.getMatrixComplexDouble().getNumColumns()) {	VectorComplexDouble tmp_out;	output_a.getMatrixComplexDouble().multv(tmp_out, input_a.getVectorComplexDouble());	output_a.makeVectorComplexDouble().assign(tmp_out);      }      // else error      //      else {	return Error::handle(name(), L"computeMultCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }  }  // input is a matrix  //  else if (input_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {    if (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) {      long olen = output_a.getVectorComplexDouble().length();      // if the vector is of length 1, do scalar multiplication      //      if (olen == 1) {	complexdouble scalar = output_a.getVectorComplexDouble()(0);	output_a.makeMatrixComplexDouble().assign(input_a.getMatrixComplexDouble());	return output_a.getMatrixComplexDouble().mult(scalar);      }      // if the vector is the correct length for vmult, do it      //      else if (olen == input_a.getMatrixComplexDouble().getNumRows()) {	VectorComplexDouble tmp_out;	input_a.getMatrixComplexDouble().vmult(tmp_out, output_a.getVectorComplexDouble());	output_a.getVectorComplexDouble().assign(tmp_out);      }	      // else error      //      else {	return Error::handle(name(), L"computeMultCDouble",			     ERR_MATCH, __FILE__, __LINE__);      }    }    else if (output_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE) {      return output_a.getMatrixComplexDouble().mult(input_a.getMatrixComplexDouble());    }  }  // exit gracefully  //  return true;}// method: computeDivCDouble//// arguments://  AlgorithmData& output: (input/output) 1st operand and output//  const AlgorithmData& input: (input) 2nd operand//// return: a boolean value indicating status//boolean Math::computeDivCDouble(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_COMPLEX_DOUBLE) &&      (output_a.getDataType() == AlgorithmData::MATRIX_COMPLEX_DOUBLE)) {          if (input_a.getVectorComplexDouble().length() > 1) {      return Error::handle(name(), L"computeDivCDouble",			   ERR_MATCH, __FILE__, __LINE__);    }    VectorComplexDouble vec(input_a.getVectorComplexDouble());    complexdouble scalar = vec(0);    output_a.getMatrixComplexDouble().div(scalar);  }  // both inputs are vectors  //  else if ((input_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE) &&	   (output_a.getDataType() == AlgorithmData::VECTOR_COMPLEX_DOUBLE)) {    // if the input is of length 1, do scalar division    //    if (input_a.getVectorComplexDouble().length() == 1) {      complexdouble scalar = input_a.getVectorComplexDouble()(0);      return output_a.getVectorComplexDouble().div(scalar);    }    // if the lengths are equal, do element-wise division    //    else if (input_a.getVectorComplexDouble().length() == output_a.getVectorComplexDouble().length()) {      return output_a.getVectorComplexDouble().div(input_a.getVectorComplexDouble());    }     else {      return Error::handle(name(), L"computeDivCDouble",			   ERR_MATCH, __FILE__, __LINE__);    }  }  else {    return Error::handle(name(), L"computeDivCDouble",			 ERR_MATCH, __FILE__, __LINE__);  }    // exit gracefully  //  return true;}

⌨️ 快捷键说明

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