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

📄 mvec_06.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/math/vector/MVector/mvec_06.cc// version: $Id: mvec_06.cc,v 1.16 2002/03/05 15:12:48 gao Exp $//// isip include files//#include "MVectorMethods.h"#include "MVector.h"// method: ramp//// arguments://  MVector<TScalar, TIntegral>& this: (output) class operand//  TIntegral offset: (input) offset to Start Ramp Function//  TIntegral incr: (input) Increment//// return: a boolean value indicating status//// this method uses the size of the vector and creates a ramp function// of the form: y = incr*index + offset//template<class TScalar, class TIntegral>boolean MVectorMethods::ramp(MVector<TScalar, TIntegral>& this_a,			     TIntegral offset_a, TIntegral incr_a) {  // compute a ramp function  //  long last_index = (long)this_a.length_d;  for (long index = 0; index < last_index; index++) {    this_a.v_d[index] = incr_a*(long)index + offset_a;  }  // exit gracefully  //   return true; }// explicit instantiations//template booleanMVectorMethods::ramp<ISIP_TEMPLATE_TARGET>(MVector<ISIP_TEMPLATE_TARGET>&, ISIP_TEMPLATE_T1, ISIP_TEMPLATE_T1);// method: ramp//// arguments://  MVector<TScalar, TIntegral>& this: (output) class operand//  TIntegral offset: (input) offset to Start Ramp Function//  TIntegral incr: (input) Increment//  TIntegral end: (input) end point of function//// return: a boolean value indicating status//// this method creates a ramp function of the form//   y = [offset, offset+incr, ..., offset + (m * incr)] where//   m = (end - offset) / incr;// m is always rounded toward zero to stay inline with matlab "colon" notation.// if m is negative (before rounding) then the output vector is emptied.// if m == 0, the output vector will contain a single entry of [offset]//template<class TScalar, class TIntegral>boolean MVectorMethods::ramp(MVector<TScalar, TIntegral>& this_a,			     TIntegral offset_a, TIntegral incr_a,			     TIntegral end_a) {#ifndef ISIP_TEMPLATE_complex  double end = end_a;  double offset = offset_a;  double incr = incr_a;#else  double end = end_a.real();  double offset = offset_a.real();  double incr = incr_a.real();  if ((end_a.imag() != 0) || (offset_a.imag() != 0) || (incr_a.imag() != 0)) {    this_a.debug(L"this_a");        return Error::handle(name(), L"ramp", Error::ARG, __FILE__, __LINE__);  }#endif  // verify arguments are in the range.  //  double m = (end - offset) / incr;  if (m < 0) {    return this_a.setLength(0);  }    // check for offset and end equal  //  if (m == 0) {    this_a.setLength(1);    this_a.v_d[0] = offset_a;    return true;  }    // round off m toward zero  //  long m_rnd = (long)Integral::floor(m);  this_a.setLength(m_rnd + 1);    // create sequence  //  for (long i = 0; i <= m_rnd; i++) {    this_a.v_d[i] = (TIntegral)(incr*i + offset);  }  // exit gracefully  //   return true; }// explicit instantiations//template booleanMVectorMethods::ramp<ISIP_TEMPLATE_TARGET>(MVector<ISIP_TEMPLATE_TARGET>&, ISIP_TEMPLATE_T1, ISIP_TEMPLATE_T1, ISIP_TEMPLATE_T1);// method: sum//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the sum of the elements of the vector//// this method sums all elements in the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::sum(const MVector<TScalar, TIntegral>& this_a) {  long last_index = (long)this_a.length_d;    TIntegral acc = 0;    for (long index = 0; index < last_index; index++) {    acc += (TIntegral)this_a.v_d[index];  }    // return the value  //  return acc; }// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::sum<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: sumSquare//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the sumSquare of the elements// of the vector//// this method sumSquares all elements in the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::sumSquare(const MVector<TScalar, TIntegral>& this_a) {  long last_index = (long)this_a.length_d;    TIntegral acc = 0;  TIntegral tmp;    for (long index = 0; index < last_index; index++) {    tmp = (TIntegral)this_a.v_d[index];    acc += tmp * tmp;  }    // return the value  //  return acc;}// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::sumSquare<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: mean//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the mean of the elements of// the vector//// this method computes the mean of all elements in the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::mean(const MVector<TScalar, TIntegral>& this_a) {  long size = (long)this_a.length_d;    if (size <= (long)0) {    this_a.debug(L"this_a");        return Error::handle(name(), L"mean",			 MVector<TScalar, TIntegral>::ERR_LEN,			 __FILE__, __LINE__);  }    // return the value  //  return (sum(this_a) / (TIntegral)size); }// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::mean<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: median//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the median of the elements of// the vector//// this method computes the median of all elements in the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::median(const MVector<TScalar, TIntegral>& this_a) {  // get the size of the vector  //  long size = (long)this_a.length_d;  if (size <= (long)0) {    this_a.debug(L"this_a");        return Error::handle(name(), L"median",			 MVector<TScalar, TIntegral>::ERR_LEN,			 __FILE__, __LINE__);  }    // sort the input vector  //  MVector<TScalar, TIntegral> val_sort;  val_sort.sort(this_a, Integral::ASCENDING);    // return the value  //    if (size % 2  == 0) {    return ((val_sort((size - 1) / 2) + val_sort((size + 1) / 2)) / 2);  }  else {    return (val_sort((size - 1) / 2));  }}// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::median<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: rms//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the rms of the elements of the// vector//// this method computes the root mean square of all elements in the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::rms(const MVector<TScalar, TIntegral>& this_a) {  long sze = (long)this_a.length_d;    if (sze <= (long)0) {    this_a.debug(L"this_a");        return Error::handle(name(), L"rms",			 MVector<TScalar, TIntegral>::ERR_LEN,			 __FILE__, __LINE__);  }    // compute and return the value  //  TScalar value((TIntegral)sumSquare(this_a) / sze);  return value.sqrt();}// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::rms<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: var//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the var of the elements of the// vector//// this method computes the variance among all elements in the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::var(const MVector<TScalar, TIntegral>& this_a) {  long sze = (long)this_a.length_d;    if (sze <= (long)0) {    this_a.debug(L"this_a");        return Error::handle(name(), L"var",			 MVector<TScalar, TIntegral>::ERR_LEN,			 __FILE__, __LINE__);  }    TIntegral mean_value = this_a.mean();  TIntegral acc = 0;  TIntegral sum;    for (long index = 0; index < sze; index++) {    sum  = (TIntegral)this_a.v_d[index] - mean_value;    acc += sum*sum;  }  #ifndef ISIP_TEMPLATE_complex  // return the value  //  return (TIntegral)((double)acc / (double)sze);#else  return (TIntegral)((complexdouble)acc / (complexdouble)sze);#endif}// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::var<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: stdev//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//// return: a TIntegral value containing the standard deviation of the vector//// this method computes the standard deviation among all elements of the vector//template<class TScalar, class TIntegral>TIntegral MVectorMethods::stdev(const MVector<TScalar, TIntegral>& this_a) {  // compute and return the value  //  TScalar value((TIntegral)var(this_a));  return value.sqrt();}// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::stdev<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&);// method: dotProduct//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//  const MVector<TScalar, TIntegral>& v: (input) Vector operand//// return: a TIntegral value containing the dot product <this, arg>//// this method computes the dot product between two vectors//template<class TScalar, class TIntegral>TIntegral MVectorMethods::dotProduct(const MVector<TScalar, TIntegral>& this_a,				     const MVector<TScalar, TIntegral>& v_a) {  // check limits  //   long last_index = (long)this_a.length_d;    if (last_index != (long)v_a.length_d) {    v_a.debug(L"v_a");        this_a.debug(L"this_a");        return Error::handle(name(), L"dotProduct",			 MVector<TScalar, TIntegral>::ERR_LEN,			 __FILE__, __LINE__);  }    // compute  //   TIntegral acc = 0;    for (long index = 0; index < last_index; index++) {#ifndef ISIP_TEMPLATE_complex    acc += (TIntegral)this_a.v_d[index] * (TIntegral)v_a.v_d[index];#else    // the second argument have to be conjugated for complex numbers    //    // Reference:    //  S. Axler, "Linear Algebra Done Right,"    //  Spriger-Verlag New York, USA, pp. 94, 1996    //    acc += (TIntegral)this_a.v_d[index].conjugate() * (TIntegral)v_a.v_d[index];#endif      }    // return the value  //   return acc; }// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::dotProduct<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&, const MVector<ISIP_TEMPLATE_TARGET>&);// method: distanceSquare//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//  const MVector<TScalar, TIntegral>& v: (input) Vector operand//// return: a TIntegral value containing the result//// this method computes the square of the euclidean distance// between two vectors.//template<class TScalar, class TIntegral>TIntegralMVectorMethods::distanceSquare(const MVector<TScalar, TIntegral>& this_a,			       const MVector<TScalar, TIntegral>& v_a) {  long last_index = (long)this_a.length_d;    if (last_index != (long)v_a.length_d) {    v_a.debug(L"v_a");        this_a.debug(L"this_a");        return Error::handle(name(), L"distanceSquare", Error::ARG,                         __FILE__, __LINE__);  }    TIntegral acc = 0;  TIntegral value;  for (long index = 0; index < last_index; index++) {    value  = (TIntegral)this_a.v_d[index] - (TIntegral)v_a.v_d[index];    acc += value*value;  }  return acc;}// explicit instantiations//template ISIP_TEMPLATE_T1MVectorMethods::distanceSquare<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&, const MVector<ISIP_TEMPLATE_TARGET>&);// method: numEqual//// arguments://  const MVector<TScalar, TIntegral>& this: (output) class operand//  TIntegral value: (input) value to check each element against//// return: a long value - the number of elements equal to value_a//// this method finds the number of items equal to the input item//template<class TScalar, class TIntegral>long MVectorMethods::numEqual(const MVector<TScalar, TIntegral>& this_a,			      TIntegral value_a) {  // exit gracefully  //  return (this_a.length_d - this_a.numNotEqual(value_a)); }// explicit instantiations//template longMVectorMethods::numEqual<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&, ISIP_TEMPLATE_T1);// method: numNotEqual//// arguments://  const MVector<TScalar, TIntegral>& this: (input) class operand//  TIntegral value: (input) value to check each element against//// return: a long value - the number of elements equal to value_a//// this method finds the number of items equal to the input item//template<class TScalar, class TIntegral>long MVectorMethods::numNotEqual(const MVector<TScalar, TIntegral>& this_a,				 TIntegral value_a) {  // check each element  //   long num_nne = (long)0;  long last_index = (long)this_a.length_d;    for (long index = 0; index < last_index; index++) {    if ((TIntegral)this_a.v_d[index] != value_a) {      num_nne++;    }  }    // exit gracefully  //   return num_nne;}// explicit instantiations//template longMVectorMethods::numNotEqual<ISIP_TEMPLATE_TARGET>(const MVector<ISIP_TEMPLATE_TARGET>&, ISIP_TEMPLATE_T1);

⌨️ 快捷键说明

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