dataIntegralFreqOne function
Implementation
List<double> dataIntegralFreqOne(
List<double> data, double fs, double lowerFreq, double upperFreq) {
var len = data.length;
var fx = realFFT(data);
// Stopwatch stopwatch = Stopwatch()..start();
var df = fs / len;
var dw = 2 * math.pi * df;
var w = List<double>.filled(len, 0);
for (var i = 0; i < len; i++) {
if (i <= len / 2 - 1) {
w[i] = i == 0 ? 0 : w[i - 1] + dw;
} else {
w[i] = i == len / 2 ? (-len * dw) / 2 : w[i - 1] + dw;
}
}
var fy1 = List<Complex>.filled(len, Complex());
for (var i = 0; i < len; i++) {
if (i == 0) {
fy1[i] = Complex.ri(0, 0);
} else {
fy1[i] = fx[i].div(Complex.ri(0, w[i]));
}
}
var iL = (lowerFreq / df).floor();
var iH = (upperFreq / df).ceil();
var fy2 = List<Complex>.filled(len, Complex());
for (var i = 0; i < len; i++) {
if (i >= iL && i <= iH) {
fy2[i] = Complex.ri(fy1[i].real, fy1[i].imaginary);
} else if (i >= len - iH && i <= math.min(len - 1, len - iL)) {
fy2[i] = fy1[i];
} else {
fy2[i] = Complex.ri(0, 0);
}
}
// print('dataIntegralFreqOne() executed in ${stopwatch.elapsed}');
var outData = inverseFft(fy2);
return outData;
}