57 constexpr float EPS = 0.05f;
58 const float sfreq = 1.0f /
tstep;
60 for (
int ch = 0; ch < nch; ch++) {
62 if (std::fabs(sfreq * integ) <
EPS) {
64 float s1 = sfreq * (time -
tmin);
65 int n1 =
static_cast<int>(std::floor(s1));
66 float f1 = 1.0f + n1 - s1;
67 if (n1 < 0 || n1 >
np - 1) {
68 qWarning(
"Sample value out of range %d (0..%d)", n1,
np - 1);
72 if (std::fabs(f1 - 1.0f) < 1e-3f)
75 if (f1 < 1.0f && n1 >
np - 2) {
76 qWarning(
"Sample value out of range %d (0..%d) %.4f", n1,
np - 1, f1);
81 sum = f1 * std::fabs(
data(n1, ch)) + (1.0f - f1) * std::fabs(
data(n1 + 1, ch));
83 sum = f1 *
data(n1, ch) + (1.0f - f1) *
data(n1 + 1, ch);
85 sum = use_abs ? std::fabs(
data(n1, ch)) :
data(n1, ch);
89 float s1 = sfreq * (time - 0.5f * integ -
tmin);
90 float s2 = sfreq * (time + 0.5f * integ -
tmin);
91 int n1 =
static_cast<int>(std::ceil(s1));
92 int n2 =
static_cast<int>(std::floor(s2));
95 n1 =
static_cast<int>(std::floor(s1));
96 if (n1 < 0 || n1 >
np - 2)
101 sum = 0.5f * ((f1 + f2) * std::fabs(
data(n1 + 1, ch)) + (2.0f - f1 - f2) * std::fabs(
data(n1, ch)));
103 sum = 0.5f * ((f1 + f2) *
data(n1 + 1, ch) + (2.0f - f1 - f2) *
data(n1, ch));
107 if (n1 < 0 || n1 >
np - 1) {
108 qWarning(
"Sample value out of range %d (0..%d)", n1,
np - 1);
111 if (n2 < 0 || n2 >
np - 1) {
112 qWarning(
"Sample value out of range %d (0..%d)", n2,
np - 1);
115 if (f1 != 0.0f && n1 < 1)
117 if (f2 != 0.0f && n2 >
np - 2)
123 sum = 0.5f * std::fabs(
data(n1, ch));
124 for (
int k = n1 + 1; k < n2; k++)
125 sum += std::fabs(
data(k, ch));
126 sum += 0.5f * std::fabs(
data(n2, ch));
128 sum = 0.5f *
data(n1, ch);
129 for (
int k = n1 + 1; k < n2; k++)
131 sum += 0.5f *
data(n2, ch);
133 width =
static_cast<float>(n2 - n1);
137 sum += 0.5f * f1 * (f1 * std::fabs(
data(n1 - 1, ch)) + (2.0f - f1) * std::fabs(
data(n1, ch)));
139 sum += 0.5f * f2 * (f2 * std::fabs(
data(n2 + 1, ch)) + (2.0f - f2) * std::fabs(
data(n2, ch)));
142 sum += 0.5f * f1 * (f1 *
data(n1 - 1, ch) + (2.0f - f1) *
data(n1, ch));
144 sum += 0.5f * f2 * (f2 *
data(n2 + 1, ch) + (2.0f - f2) *
data(n2, ch));
158 float tmin,
float sfreq,
bool use_abs,
float* value)
160 constexpr float EPS = 0.05f;
162 for (
int ch = 0; ch < nch; ch++) {
164 if (std::fabs(sfreq * integ) <
EPS) {
165 float s1 = sfreq * (time -
tmin);
166 int n1 =
static_cast<int>(std::floor(s1));
167 float f1 = 1.0f + n1 - s1;
168 if (n1 < 0 || n1 > nsamp - 1)
170 if (f1 < 1.0f && n1 > nsamp - 2)
174 sum = f1 * std::fabs(
data[ch][n1]) + (1.0f - f1) * std::fabs(
data[ch][n1 + 1]);
176 sum = f1 *
data[ch][n1] + (1.0f - f1) *
data[ch][n1 + 1];
178 sum = use_abs ? std::fabs(
data[ch][n1]) :
data[ch][n1];
181 float s1 = sfreq * (time - 0.5f * integ -
tmin);
182 float s2 = sfreq * (time + 0.5f * integ -
tmin);
183 int n1 =
static_cast<int>(std::ceil(s1));
184 int n2 =
static_cast<int>(std::floor(s2));
186 n1 =
static_cast<int>(std::floor(s1));
187 if (n1 < 0 || n1 > nsamp - 2)
192 sum = 0.5f * ((f1 + f2) * std::fabs(
data[ch][n1 + 1]) + (2.0f - f1 - f2) * std::fabs(
data[ch][n1]));
194 sum = 0.5f * ((f1 + f2) *
data[ch][n1 + 1] + (2.0f - f1 - f2) *
data[ch][n1]);
198 if (n1 < 0 || n1 > nsamp - 1 || n2 < 0 || n2 > nsamp - 1)
200 if (f1 != 0.0f && n1 < 1)
202 if (f2 != 0.0f && n2 > nsamp - 2)
208 sum = 0.5f * std::fabs(
data[ch][n1]);
209 for (
int k = n1 + 1; k < n2; k++)
210 sum += std::fabs(
data[ch][k]);
211 sum += 0.5f * std::fabs(
data[ch][n2]);
213 sum = 0.5f *
data[ch][n1];
214 for (
int k = n1 + 1; k < n2; k++)
216 sum += 0.5f *
data[ch][n2];
218 width =
static_cast<float>(n2 - n1);
222 sum += 0.5f * f1 * (f1 * std::fabs(
data[ch][n1 - 1]) + (2.0f - f1) * std::fabs(
data[ch][n1]));
224 sum += 0.5f * f2 * (f2 * std::fabs(
data[ch][n2 + 1]) + (2.0f - f2) * std::fabs(
data[ch][n2]));
227 sum += 0.5f * f1 * (f1 *
data[ch][n1 - 1] + (2.0f - f1) *
data[ch][n1]);
229 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)