为什么在低通滤波器循环中出现 IndexOutOfBoundsException 错误?
Why do I get IndexOutOfBoundsException error in lowpass-filter loop?
我正在尝试在我的第一个 Java 应用程序中实施 Pan Tompkins 算法。我根据原始文章为低通滤波器做了以下循环,但是当我尝试 运行 它时,我不断收到 IndexOutOfBoundsException 错误。有人可以看到我哪里出错了吗?
我不想用系数制作过滤器,我只需要帮助让公式起作用,拜托了。
/**
* Lowpass filter
* lpfilt() implements the digital filter represented by the difference equation:
* y(nT) = 2y(nT - T) - y(nT - 2 T) + x(nT)- 2x(nT- 6T)+x(nT- 12T)
*/
public static ArrayList<Double> lpfilter(ArrayList<Double> ecg) {
int N = ecg.size();
ArrayList<Double> ecgLP = new ArrayList<Double>();
for (int n = 0; n < N; n++) {
if (n - 12 < 0) {
ecgLP.set(n, ecg.get(n));
} else {
ecgLP.set(n, 2 * ecgLP.get(n - 1) - ecgLP.get(n - 2) + ecg.get(n) - 2 * ecg.get(n - 6) + ecg.get(n - 12));
}
}
return ecgLP;
}
它发生在第一次迭代中。查看以下行:
ecgLP.set(n, ecg.get(n));
对于 n=0,您尝试将键 0 设置为 ecg.get(0) 的值。但是到目前为止还没有设置0。因此你得到 IndexoutofBounds-Error。据我所知,前 12 (0..11) 次迭代应该填充 ArrayList,但是您的代码每次都会因错误而失败,因为您尝试使用尚未初始化的成员。
我建议你在一个单独的循环中进行初始化,然后从 n=12 开始。
在 for 循环中,当 n 为 0 时,在这种情况下你不能调用 ecgLP.get(n - 1),因为它变成 ecgLP.get(-1),负索引给你异常.
我正在尝试在我的第一个 Java 应用程序中实施 Pan Tompkins 算法。我根据原始文章为低通滤波器做了以下循环,但是当我尝试 运行 它时,我不断收到 IndexOutOfBoundsException 错误。有人可以看到我哪里出错了吗?
我不想用系数制作过滤器,我只需要帮助让公式起作用,拜托了。
/**
* Lowpass filter
* lpfilt() implements the digital filter represented by the difference equation:
* y(nT) = 2y(nT - T) - y(nT - 2 T) + x(nT)- 2x(nT- 6T)+x(nT- 12T)
*/
public static ArrayList<Double> lpfilter(ArrayList<Double> ecg) {
int N = ecg.size();
ArrayList<Double> ecgLP = new ArrayList<Double>();
for (int n = 0; n < N; n++) {
if (n - 12 < 0) {
ecgLP.set(n, ecg.get(n));
} else {
ecgLP.set(n, 2 * ecgLP.get(n - 1) - ecgLP.get(n - 2) + ecg.get(n) - 2 * ecg.get(n - 6) + ecg.get(n - 12));
}
}
return ecgLP;
}
它发生在第一次迭代中。查看以下行:
ecgLP.set(n, ecg.get(n));
对于 n=0,您尝试将键 0 设置为 ecg.get(0) 的值。但是到目前为止还没有设置0。因此你得到 IndexoutofBounds-Error。据我所知,前 12 (0..11) 次迭代应该填充 ArrayList,但是您的代码每次都会因错误而失败,因为您尝试使用尚未初始化的成员。
我建议你在一个单独的循环中进行初始化,然后从 n=12 开始。
在 for 循环中,当 n 为 0 时,在这种情况下你不能调用 ecgLP.get(n - 1),因为它变成 ecgLP.get(-1),负索引给你异常.