58 constexpr float EPS = 0.05f;
59 const float sfreq = 1.0f /
tstep;
61 for (
int ch = 0; ch < nch; ch++) {
63 if (std::fabs(sfreq * integ) <
EPS) {
65 float s1 = sfreq * (time -
tmin);
66 int n1 =
static_cast<int>(std::floor(s1));
67 float f1 = 1.0f + n1 - s1;
68 if (n1 < 0 || n1 >
np - 1) {
69 qWarning(
"Sample value out of range %d (0..%d)", n1,
np - 1);
73 if (std::fabs(f1 - 1.0f) < 1e-3f)
76 if (f1 < 1.0f && n1 >
np - 2) {
77 qWarning(
"Sample value out of range %d (0..%d) %.4f", n1,
np - 1, f1);
82 sum = f1 * std::fabs(
data(n1, ch)) + (1.0f - f1) * std::fabs(
data(n1 + 1, ch));
84 sum = f1 *
data(n1, ch) + (1.0f - f1) *
data(n1 + 1, ch);
86 sum = use_abs ? std::fabs(
data(n1, ch)) :
data(n1, ch);
90 float s1 = sfreq * (time - 0.5f * integ -
tmin);
91 float s2 = sfreq * (time + 0.5f * integ -
tmin);
92 int n1 =
static_cast<int>(std::ceil(s1));
93 int n2 =
static_cast<int>(std::floor(s2));
96 n1 =
static_cast<int>(std::floor(s1));
97 if (n1 < 0 || n1 >
np - 2)
102 sum = 0.5f * ((f1 + f2) * std::fabs(
data(n1 + 1, ch)) + (2.0f - f1 - f2) * std::fabs(
data(n1, ch)));
104 sum = 0.5f * ((f1 + f2) *
data(n1 + 1, ch) + (2.0f - f1 - f2) *
data(n1, ch));
108 if (n1 < 0 || n1 >
np - 1) {
109 qWarning(
"Sample value out of range %d (0..%d)", n1,
np - 1);
112 if (n2 < 0 || n2 >
np - 1) {
113 qWarning(
"Sample value out of range %d (0..%d)", n2,
np - 1);
116 if (f1 != 0.0f && n1 < 1)
118 if (f2 != 0.0f && n2 >
np - 2)
124 sum = 0.5f * std::fabs(
data(n1, ch));
125 for (
int k = n1 + 1; k < n2; k++)
126 sum += std::fabs(
data(k, ch));
127 sum += 0.5f * std::fabs(
data(n2, ch));
129 sum = 0.5f *
data(n1, ch);
130 for (
int k = n1 + 1; k < n2; k++)
132 sum += 0.5f *
data(n2, ch);
134 width =
static_cast<float>(n2 - n1);
138 sum += 0.5f * f1 * (f1 * std::fabs(
data(n1 - 1, ch)) + (2.0f - f1) * std::fabs(
data(n1, ch)));
140 sum += 0.5f * f2 * (f2 * std::fabs(
data(n2 + 1, ch)) + (2.0f - f2) * std::fabs(
data(n2, ch)));
143 sum += 0.5f * f1 * (f1 *
data(n1 - 1, ch) + (2.0f - f1) *
data(n1, ch));
145 sum += 0.5f * f2 * (f2 *
data(n2 + 1, ch) + (2.0f - f2) *
data(n2, ch));
159 float tmin,
float sfreq,
bool use_abs,
float *value)
161 constexpr float EPS = 0.05f;
163 for (
int ch = 0; ch < nch; ch++) {
165 if (std::fabs(sfreq * integ) <
EPS) {
166 float s1 = sfreq * (time -
tmin);
167 int n1 =
static_cast<int>(std::floor(s1));
168 float f1 = 1.0f + n1 - s1;
169 if (n1 < 0 || n1 > nsamp - 1)
171 if (f1 < 1.0f && n1 > nsamp - 2)
175 sum = f1 * std::fabs(
data[ch][n1]) + (1.0f - f1) * std::fabs(
data[ch][n1 + 1]);
177 sum = f1 *
data[ch][n1] + (1.0f - f1) *
data[ch][n1 + 1];
179 sum = use_abs ? std::fabs(
data[ch][n1]) :
data[ch][n1];
182 float s1 = sfreq * (time - 0.5f * integ -
tmin);
183 float s2 = sfreq * (time + 0.5f * integ -
tmin);
184 int n1 =
static_cast<int>(std::ceil(s1));
185 int n2 =
static_cast<int>(std::floor(s2));
187 n1 =
static_cast<int>(std::floor(s1));
188 if (n1 < 0 || n1 > nsamp - 2)
193 sum = 0.5f * ((f1 + f2) * std::fabs(
data[ch][n1 + 1]) + (2.0f - f1 - f2) * std::fabs(
data[ch][n1]));
195 sum = 0.5f * ((f1 + f2) *
data[ch][n1 + 1] + (2.0f - f1 - f2) *
data[ch][n1]);
199 if (n1 < 0 || n1 > nsamp - 1 || n2 < 0 || n2 > nsamp - 1)
201 if (f1 != 0.0f && n1 < 1)
203 if (f2 != 0.0f && n2 > nsamp - 2)
209 sum = 0.5f * std::fabs(
data[ch][n1]);
210 for (
int k = n1 + 1; k < n2; k++)
211 sum += std::fabs(
data[ch][k]);
212 sum += 0.5f * std::fabs(
data[ch][n2]);
214 sum = 0.5f *
data[ch][n1];
215 for (
int k = n1 + 1; k < n2; k++)
217 sum += 0.5f *
data[ch][n2];
219 width =
static_cast<float>(n2 - n1);
223 sum += 0.5f * f1 * (f1 * std::fabs(
data[ch][n1 - 1]) + (2.0f - f1) * std::fabs(
data[ch][n1]));
225 sum += 0.5f * f2 * (f2 * std::fabs(
data[ch][n2 + 1]) + (2.0f - f2) * std::fabs(
data[ch][n2]));
228 sum += 0.5f * f1 * (f1 *
data[ch][n1 - 1] + (2.0f - f1) *
data[ch][n1]);
230 sum += 0.5f * f2 * (f2 *
data[ch][n2 + 1] + (2.0f - f2) *
data[ch][n2]);
static int getValuesFromChannelData(float time, float integ, float **data, int nsamp, int nch, float tmin, float sfreq, bool use_abs, float *value)