java - 为什么我在低通滤波器循环中收到 IndexOutOfBoundsException 错误?

标签 java filter signal-processing

我正在尝试在我的第一个 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 错误。据我所知,前 12 (0..11) 次迭代应该填充 ArrayList,但是您的代码每次都会失败并出现错误,因为您尝试使用尚未初始化的成员。

我建议您在单独的循环中进行初始化,然后从 n=12 开始。

关于java - 为什么我在低通滤波器循环中收到 IndexOutOfBoundsException 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56065017/

相关文章:

ios - 需要解释 vDSP_zcoher()

java - 如何使用 Java 重命名本地计算机上的文件夹?

java - 使用集合时违反约束属性路径

java - 当用户输入有字符串时如何调用方法? ( java )

javascript - 使用 angular.copy 实现 Angular 搜索

c - 为什么可执行和可链接格式(ELF)文件包含一组部分?

matlab - 隐马尔可夫模型工具箱/库

java - Jsoup 获取值 =""中的元素

java - RuntimeException 导致 200 OK 状态

python - 给定日期后的 DatetimeField 过滤器