ArrayList存了一组脉搏波数据,对其进行中值滤波的java代码
时间: 2024-04-21 11:22:42 浏览: 17
以下是一个使用中值滤波对 ArrayList 中的脉搏波数据进行处理的 Java 代码示例:
```java
import java.util.ArrayList;
import java.util.Collections;
public class MedianFilter {
public static ArrayList<Double> medianFilter(ArrayList<Double> data, int windowSize) {
ArrayList<Double> filteredData = new ArrayList<>();
int halfWindowSize = windowSize / 2;
for (int i = 0; i < data.size(); i++) {
// 计算当前窗口的起始索引和结束索引
int start = Math.max(0, i - halfWindowSize);
int end = Math.min(data.size() - 1, i + halfWindowSize);
// 获取当前窗口内的数据
ArrayList<Double> window = new ArrayList<>(data.subList(start, end + 1));
// 对窗口内的数据进行排序
Collections.sort(window);
// 取中位数作为当前位置的滤波结果
double median = window.get(windowSize / 2);
filteredData.add(median);
}
return filteredData;
}
public static void main(String[] args) {
// 示例使用
ArrayList<Double> pulseData = new ArrayList<>();
pulseData.add(80.5);
pulseData.add(82.0);
pulseData.add(85.2);
pulseData.add(86.7);
pulseData.add(90.1);
pulseData.add(91.3);
pulseData.add(87.9);
pulseData.add(85.8);
pulseData.add(82.4);
pulseData.add(83.6);
int windowSize = 3; // 窗口大小
ArrayList<Double> filteredData = medianFilter(pulseData, windowSize);
// 打印滤波后的结果
System.out.println("原始数据:" + pulseData);
System.out.println("滤波后的数据:" + filteredData);
}
}
```
该代码定义了一个 `MedianFilter` 类,其中的 `medianFilter` 方法接收一个 `ArrayList<Double>` 类型的数据和窗口大小 `windowSize`,并返回经过中值滤波后的结果。在 `medianFilter` 方法中,我们遍历每个数据点,并根据当前位置的窗口大小,获得对应的窗口数据。然后,我们对窗口内的数据进行排序,并取中间值(中位数)作为当前位置的滤波结果。最后,将滤波结果添加到一个新的 `ArrayList` 中,并返回该数组。
在示例中,我们定义了一个示例的脉搏波数据 `pulseData`,并将窗口大小设为 3。然后,我们调用 `medianFilter` 方法来进行中值滤波,并打印出滤波后的结果。
请注意,这只是一个简单的示例,实际中值滤波可能需要更复杂的处理和优化。你可以根据自己的需求进行修改和扩展。
希望这可以帮助到你。如果你有任何其他问题,请随时提问。