将信号转换为梯形(梯形滤波器)

Converting a signal to a trapezoidal shape ( Trapezoidal filter)

假设我们有一个简单的信号,中心只有 1 个颠簸,其余点没有。有点像高斯分布。例如参见 [​​=14=]。好的,然后我们将这个形状划分为一些数据点。

我想在 c++ 中将此形状转换为梯形。类似于 this。 据我所知,这只是一种数学上的平均。好吧,我该怎么做? 另外,我用ROOT CERN来显示结果...

这是我的代码的主要部分,但它不能正常工作...

char Data[Data_Point][5]    

for (int k = 0; k < Data_Point ; k++){ // Data_Point is equal to 512, and so my array has just 512 member.

  h1 = 0.0;
  h2 = 0.0;
  H = 0.0;
  H1 = 0.0;
  H2 = 0.0;

  for (int l = 0; l <= L; l++){  // L is a const int and equal to 80.

    if (k + 1 < Data_Point){
      h1 += ((stoi(Data[k + l])) - Baseline / 20.0);  // Baseline is average of 20 data point of first of 512 data point, by this i'm trying to make more accuarcy by subtracting the baseline.
    } else {
      H1 = h1;
      cout << H1;
    }

    if (L + G + k + l < Data_Point){    // G is a Const int and equal to 15.
      h2 += ((stoi(Data[L + G + k + l])) - Baseline / 20.0);
    } else {
      H2 = h2;
      cout << H2;
    }

  }
  H = ((h2 - h1) / L);

}

RisingTime->Fill(H);

当我 运行 这段代码时,我遇到错误说:Unhandled exception at 0x7731C54F in Pro1.exe: Microsoft C++ exception: std::invalid_argument at memory location 0x0019E854.

有人可以帮忙吗? 任何答案将不胜感激。

我找到了:

// Trapezoidal filter

for (int k = 0; k < Data_Point; k++){

    h1 = 0.0;
    h2 = 0.0;
    H = 0.0;
    H1 = 0.0;
    H2 = 0.0;

    for (int m = 0; m <= (L - 1); m++){

    if (k + m < Data_Point){
      h1 += ((stoi(Data[k + m])));
    }   //  if (k + m < Data_Point)
    else{
      H1 = h1;
      cout << H1;
    }   //  else

    if (L + G + k + m < Data_Point){
      h2 += ((stoi(Data[L + G + k + m])));
    }   //  if (L + G + k + m < Data_Point)
    else{
      H2 = h2;
      cout << H2;
    }   //  else

  } //  for (int m = 0; m <= (L - 1); m++)

  H = ((h2 - h1) / L);
}