Предположим, что у нас есть простой сигнал только с 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.
Кто-нибудь может помочь? Любой ответ будет оценен.
@kebs --- На самом деле это фильтр, который преобразует сигнал в форму трапеции, так называемый «трапециевидный фильтр». Я пытаюсь преобразовать его !!!
@kebs --- Вопрос в том, как я могу преобразовать его в это: Что-то вроде этого [link] (https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTVKd6f9bFcwaSMAbQcGna1mRGC0PTtt7mcOZp2EfwViwhILtJt)
Во-первых, вам нужно уменьшить масштаб того, над чем вы работаете. Ваш код выдает исключение, которое вы, похоже, не ожидаете или не обрабатываете должным образом. Сначала исправьте эту часть. Для этого извлеките минимальный воспроизводимый пример (используя согласованное форматирование!) или узнайте, как использовать отладчик для пошагового выполнения кода. Как новый пользователь здесь, также возьмите тур и прочитайте Как спросить.
Вы используете стои с чем-то, что является не строкой, а указателем на char
! Очень плохая идея... И, пожалуйста, сделайте правильный отступ в коде.
^^^ Связано: stackoverflow.com/questions/31928686/… Обратите внимание, что stoi
не является atoi
.
Я нашел это:
// 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);
}
Пожалуйста, отредактируйте вопрос и определите «трапециевидную форму», это неясно. Что вы ожидаете на выходе?