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

📄 filt_06.cc

📁 这是一个从音频信号里提取特征参量的程序
💻 CC
字号:
// file: $isip/class/algo/Filter/filt_06.cc// version: $Id: filt_06.cc,v 1.8 2002/07/16 02:00:31 gao Exp $//// isip include files//#include "Filter.h"// method: setMACoeffs// // arguments: //  float val: (input) ma coefficients//  long lag: (input) ma lag//// return: a boolean value indicating status//// a method that adds a moving average coefficient and its// corresponding lag to the existing vector of moving average// coefficients and the corresponding vector of lags//boolean Filter::setMACoeffs(float val_a, long lag_a) {  long index = ma_coef_d.length();    // set the length of ma coefficients  //  ma_coef_d.setLength(index + 1);    // set the length of ma lag  //  ma_lag_d.setLength(index + 1);  // assign the value  //  ma_coef_d(index) = val_a;  ma_lag_d(index) = lag_a;  // unset the boolean flag  //  is_valid_d = false;    // exit gracefully  //  return true;}// method: setMACoeffs// // arguments: //  const VectorFloat& ma_coef: (input) moving average coefficients//// return: a boolean value indicating status//// a method that sets a vector moving average coefficients and assumes// their corresponding lags to be a ramp//boolean Filter::setMACoeffs(const VectorFloat& ma_coef_a) {    // initialize moving average lags  //  VectorLong ma_lag;  // set the length of ma lag  //  ma_lag.setLength(ma_coef_a.length());  // assume ma lag to be ramp  //  ma_lag.ramp((long)0, (long)-1);    // assign the values  //  ma_coef_d.assign(ma_coef_a);  ma_lag_d.assign(ma_lag);  // unset the boolean flag  //  is_valid_d = false;    // exit gracefully  //  return true;}// method: setMACoeffs// // arguments: //  const VectorFloat& ma_coef: (input) moving average coefficients//  const VectorLong& ma_lag: (input) moving average lags//// return: a boolean value indicating status//// a method that set a vector of moving average coefficients and their// corresponding vector of lags//boolean Filter::setMACoeffs(const VectorFloat& ma_coef_a, 			    const VectorLong& ma_lag_a) {  // assign the values  //  ma_coef_d.assign(ma_coef_a);  ma_lag_d.assign(ma_lag_a);  // unset the boolean flag  //  is_valid_d = false;      // exit gracefully  //  return true;}// method: setARCoeffs// // arguments: //  float val: (input) ar coefficients//  long lag: (input) ar lag//// return: a boolean value indicating status//// a method that adds a auto regressive coefficient and its// corresponding lag to the existing vector of auto regressive// coefficients and the corresponding vector of lags//boolean Filter::setARCoeffs(float val_a, long lag_a) {  long index = ar_coef_d.length();    // set the length of ar coefficients  //  ar_coef_d.setLength(index + 1);    // set the length of ar lag  //  ar_lag_d.setLength(index + 1);  // assign the values  //  ar_coef_d(index) = val_a;  ar_lag_d(index) = lag_a;  // unset the boolean flag  //  is_valid_d = false;    // exit gracefully  //  return true;}// method: setARCoeffs// // arguments: //  const VectorFloat& ar_coef: (input) moving average coefficients//// return: a boolean value indicating status//// a method that sets a vector auto regressive coefficients and// assumes their corresponding lags to be a ramp//boolean Filter::setARCoeffs(const VectorFloat& ar_coef_a) {  // create a lag vector  //  VectorLong ar_lag;  if (!ar_lag.setLength(ar_coef_a.length())) {    return false;  }  // assume ramp lag, ar lag cannot be <= 0  //  if (!ar_lag.ramp((long)-1, (long)-1)) {    return false;  }  // assign lag and coefficients  //  ar_lag_d.assign(ar_lag);  ar_coef_d.assign(ar_coef_a);  // unset the boolean flag  //  is_valid_d = false;      // exit gracefully  //  return true;}// method: setARCoeffs// // arguments: //  const VectorFloat& ar_coef: (input) moving average coefficients//  const VectorLong& ar_lag: (input) moving average lags//// return: a boolean value indicating status//// a method that sets a vector auto regressive coefficients and a// their corresponding lags to be a ramp//boolean Filter::setARCoeffs(const VectorFloat& ar_coef_a, 			    const VectorLong& ar_lag_a) {    // assign lag and coefficients  //  ar_lag_d.assign(ar_lag_a);  ar_coef_d.assign(ar_coef_a);  // unset the boolean flag  //  is_valid_d = false;      // exit gracefully  //  return true;}// method: setCoeffs// // arguments: //  const VectorFloat& ma_coef: (input) moving average coefficients//  const VectorFloat& ar_coef: (input) autoregressive coefficients//// return: a boolean value indicating status//// this method sets up the moving average and auto regressive// coefficients and assumes the corresponding lags to be ramps//boolean Filter::setCoeffs(const VectorFloat& ma_coef_a, 			  const VectorFloat& ar_coef_a) {    // create a lag vector  //  VectorLong ma_lag(ma_coef_a.length());    if (!ma_lag.ramp((long)0, (long)-1)) {    return false;  }  // ar lag cannot be <= 0  //  VectorLong ar_lag(ar_coef_a.length());  if (!ar_lag.ramp((long)-1, (long)-1)) {    return false;  }   // unset the boolean flag  //  is_valid_d = false;     // create a filter  //  return setCoeffs(ma_coef_a, ma_lag, ar_coef_a, ar_lag);  }// method: setCoeffs// // arguments: //  const VectorFloat& ma_coef: (input) moving average coefficients//  const VectorLong& ma_lag: (input) moving average lags//  const VectorFloat& ar_coef: (input) autoregressive coefficients//  const VectorLong& ar_lag: (input) autoregressive lags//// return: a boolean value indicating status//// this method sets up the moving average coefficients and the auto// regressive coefficients and their corresponding lags//boolean Filter::setCoeffs(const VectorFloat& ma_coef_a,			  const VectorLong& ma_lag_a,			  const VectorFloat& ar_coef_a,			  const VectorLong& ar_lag_a) {    // check arguments  //  if ((ma_coef_a.length() != ma_lag_a.length()) ||      (ar_coef_a.length() != ar_lag_a.length())) {    return Error::handle(name(), L"setCoeffs", Error::ARG, __FILE__, __LINE__);  }    // set moving average coefficients  //  ma_coef_d.assign(ma_coef_a);  ma_lag_d.assign(ma_lag_a);      // set autoregressive coefficients  //  ar_coef_d.assign(ar_coef_a);  ar_lag_d.assign(ar_lag_a);  // unset the boolean flag  //  is_valid_d = false;      // exit gracefully  //  return true;}// method: getLeadingPad// // arguments: none//// return: the number of future frames needed if the filter is anti-causal//long Filter::getLeadingPad() const {    // for FRAME_INTERNAL mode, no future frames needed  //  if (cmode_d == FRAME_INTERNAL) {    return long(0);  }    // compute the number of samples per frame  //  double frame_num_samp = frame_dur_d * sample_freq_d;    // return the number of frames needed to cover the lag  //  return (long)Integral::ceil((double)getLeadingNumSamp() / frame_num_samp);}// method: getTrailingPad// // arguments: none//// return: the number of past frames needed//long Filter::getTrailingPad() const {    // past frames are already stored in the buffer  //  return long(0);}// method: getLeadingNumSamp// // arguments: none//// return: the number of advance (future) samples//long Filter::getLeadingNumSamp() const {    if (cmode_d == FRAME_INTERNAL) {    return (long)0;  }  // find the maximum lag in future for anti-causal filter  //  Long max_lag;  max_lag = ma_lag_d.max();    // return zero samples from future if the filter is causal  //  if (max_lag < (long)0) {    max_lag = 0;  }    // return the lag  //  return (long)max_lag;}// method: getTrailingNumSamp// // arguments: none//// return: the number of past samples//long Filter::getTrailingNumSamp() const {    // find the maximum lag  //  Long max_lag;  Long max_ma_lag = ma_lag_d.min();  Long max_ar_lag = ar_lag_d.min();  max_lag = max_ma_lag.min(max_ar_lag);  max_lag = abs(max_lag);    // return the lag  //  return (long)max_lag;}

⌨️ 快捷键说明

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