为什么在低通滤波器循环中出现IndexOutOfBoundsException错误?

海蒂

我正在尝试在我的第一个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开始。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章