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

Converting a signal to a trapezoidal shape ( Trapezoidal filter)

本文关键字:滤波器 信号 转换      更新时间:2023-10-16

>假设我们有一个简单的信号,围绕中心只有 1 个凸起,其余点什么都没有。类似于高斯分布。例如,请参阅此内容。好的,然后我们将这个形状划分为一些数据点。

我想在c++中将此形状转换为梯形形状。像这样的东西。 据我所知,这只是一种数学取平均值。那么,我该怎么做?此外,我使用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);
}