79 constexpr float EPS = 0.05f;
80 const float sfreq = 1.0f /
tstep;
82 for (
int ch = 0; ch < nch; ch++) {
84 if (std::fabs(sfreq * integ) <
EPS) {
86 float s1 = sfreq * (time -
tmin);
87 int n1 =
static_cast<int>(std::floor(s1));
88 float f1 = 1.0f + n1 - s1;
89 if (n1 < 0 || n1 >
np - 1) {
90 qWarning(
"Sample value out of range %d (0..%d)", n1,
np - 1);
94 if (std::fabs(f1 - 1.0f) < 1e-3f)
97 if (f1 < 1.0f && n1 >
np - 2) {
98 qWarning(
"Sample value out of range %d (0..%d) %.4f", n1,
np - 1, f1);
103 sum = f1 * std::fabs(
data(n1, ch)) + (1.0f - f1) * std::fabs(
data(n1 + 1, ch));
105 sum = f1 *
data(n1, ch) + (1.0f - f1) *
data(n1 + 1, ch);
107 sum = use_abs ? std::fabs(
data(n1, ch)) :
data(n1, ch);
111 float s1 = sfreq * (time - 0.5f * integ -
tmin);
112 float s2 = sfreq * (time + 0.5f * integ -
tmin);
113 int n1 =
static_cast<int>(std::ceil(s1));
114 int n2 =
static_cast<int>(std::floor(s2));
117 n1 =
static_cast<int>(std::floor(s1));
118 if (n1 < 0 || n1 >
np - 2)
123 sum = 0.5f * ((f1 + f2) * std::fabs(
data(n1 + 1, ch)) + (2.0f - f1 - f2) * std::fabs(
data(n1, ch)));
125 sum = 0.5f * ((f1 + f2) *
data(n1 + 1, ch) + (2.0f - f1 - f2) *
data(n1, ch));
129 if (n1 < 0 || n1 >
np - 1) {
130 qWarning(
"Sample value out of range %d (0..%d)", n1,
np - 1);
133 if (n2 < 0 || n2 >
np - 1) {
134 qWarning(
"Sample value out of range %d (0..%d)", n2,
np - 1);
137 if (f1 != 0.0f && n1 < 1)
139 if (f2 != 0.0f && n2 >
np - 2)
145 sum = 0.5f * std::fabs(
data(n1, ch));
146 for (
int k = n1 + 1; k < n2; k++)
147 sum += std::fabs(
data(k, ch));
148 sum += 0.5f * std::fabs(
data(n2, ch));
150 sum = 0.5f *
data(n1, ch);
151 for (
int k = n1 + 1; k < n2; k++)
153 sum += 0.5f *
data(n2, ch);
155 width =
static_cast<float>(n2 - n1);
159 sum += 0.5f * f1 * (f1 * std::fabs(
data(n1 - 1, ch)) + (2.0f - f1) * std::fabs(
data(n1, ch)));
161 sum += 0.5f * f2 * (f2 * std::fabs(
data(n2 + 1, ch)) + (2.0f - f2) * std::fabs(
data(n2, ch)));
164 sum += 0.5f * f1 * (f1 *
data(n1 - 1, ch) + (2.0f - f1) *
data(n1, ch));
166 sum += 0.5f * f2 * (f2 *
data(n2 + 1, ch) + (2.0f - f2) *
data(n2, ch));
180 float tmin,
float sfreq,
bool use_abs,
float *value)
182 constexpr float EPS = 0.05f;
184 for (
int ch = 0; ch < nch; ch++) {
186 if (std::fabs(sfreq * integ) <
EPS) {
187 float s1 = sfreq * (time -
tmin);
188 int n1 =
static_cast<int>(std::floor(s1));
189 float f1 = 1.0f + n1 - s1;
190 if (n1 < 0 || n1 > nsamp - 1)
192 if (f1 < 1.0f && n1 > nsamp - 2)
196 sum = f1 * std::fabs(
data[ch][n1]) + (1.0f - f1) * std::fabs(
data[ch][n1 + 1]);
198 sum = f1 *
data[ch][n1] + (1.0f - f1) *
data[ch][n1 + 1];
200 sum = use_abs ? std::fabs(
data[ch][n1]) :
data[ch][n1];
203 float s1 = sfreq * (time - 0.5f * integ -
tmin);
204 float s2 = sfreq * (time + 0.5f * integ -
tmin);
205 int n1 =
static_cast<int>(std::ceil(s1));
206 int n2 =
static_cast<int>(std::floor(s2));
208 n1 =
static_cast<int>(std::floor(s1));
209 if (n1 < 0 || n1 > nsamp - 2)
214 sum = 0.5f * ((f1 + f2) * std::fabs(
data[ch][n1 + 1]) + (2.0f - f1 - f2) * std::fabs(
data[ch][n1]));
216 sum = 0.5f * ((f1 + f2) *
data[ch][n1 + 1] + (2.0f - f1 - f2) *
data[ch][n1]);
220 if (n1 < 0 || n1 > nsamp - 1 || n2 < 0 || n2 > nsamp - 1)
222 if (f1 != 0.0f && n1 < 1)
224 if (f2 != 0.0f && n2 > nsamp - 2)
230 sum = 0.5f * std::fabs(
data[ch][n1]);
231 for (
int k = n1 + 1; k < n2; k++)
232 sum += std::fabs(
data[ch][k]);
233 sum += 0.5f * std::fabs(
data[ch][n2]);
235 sum = 0.5f *
data[ch][n1];
236 for (
int k = n1 + 1; k < n2; k++)
238 sum += 0.5f *
data[ch][n2];
240 width =
static_cast<float>(n2 - n1);
244 sum += 0.5f * f1 * (f1 * std::fabs(
data[ch][n1 - 1]) + (2.0f - f1) * std::fabs(
data[ch][n1]));
246 sum += 0.5f * f2 * (f2 * std::fabs(
data[ch][n2 + 1]) + (2.0f - f2) * std::fabs(
data[ch][n2]));
249 sum += 0.5f * f1 * (f1 *
data[ch][n1 - 1] + (2.0f - f1) *
data[ch][n1]);
251 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)