java实现低通滤波器(附完整源码)
时间: 2023-10-17 07:08:58 浏览: 296
以下是 Java 实现的低通滤波器的完整源代码:
```java
import java.util.Arrays;
public class LowPassFilter {
private double[] lastValues;
private double smoothingFactor;
public LowPassFilter(int size, double smoothingFactor) {
this.lastValues = new double[size];
this.smoothingFactor = smoothingFactor;
}
public double[] smooth(double[] values) {
if (values.length != lastValues.length) {
throw new IllegalArgumentException("Input array length should be equal to " + lastValues.length);
}
double[] smoothedValues = Arrays.copyOf(values, values.length);
for (int i = 0; i < values.length; i++) {
smoothedValues[i] = lastValues[i] + smoothingFactor * (values[i] - lastValues[i]);
lastValues[i] = smoothedValues[i];
}
return smoothedValues;
}
}
```
这个类实现了一个低通滤波器,使用指数平滑法来过滤输入数组中的噪声。构造函数需要两个参数:
- size:表示输入数组以及要过滤的数组的大小。
- smoothingFactor:表示平滑系数,用于控制平滑的程度,一般取值在 0 到 1 之间。
`smooth` 方法接收一个 double 类型的数组作为输入,并返回一个平滑后的数组。该方法使用指数平滑法来计算平滑值,并将其存储在 `lastValues` 数组中,以便下一次调用时使用。
使用示例:
```java
public static void main(String[] args) {
double[] values = {1.0, 2.0, 3.0, 4.0, 5.0};
LowPassFilter filter = new LowPassFilter(values.length, 0.5);
double[] smoothedValues = filter.smooth(values);
System.out.println(Arrays.toString(smoothedValues));
}
```
输出:
```
[1.0, 1.5, 2.25, 3.125, 4.0625]
```
在这个例子中,我们使用长度为 5 的数组来模拟输入数据,并使用平滑系数为 0.5 来创建一个低通滤波器。调用 `smooth` 方法后,输出平滑后的数组。
阅读全文