平均滤波算法是一种信号处理方法,用于平滑时间序列数据,以减少噪声和异常值的影响。以下是几种常见的平均滤波算法的程序示例:
1. 传统平均值滤波算法
```c
include
void average_filter(double data[], int size, double *result) {
static double sum = 0.0;
sum += data[size - 1];
*result = sum / size;
}
int main() {
double data[] = {1.0, 2.0, 3.0, 4.0, 5.0};
int size = sizeof(data) / sizeof(data);
double result;
for (int i = 0; i < size; i++) {
average_filter(data, i + 1, &result);
printf("Filtered value: %.2f\n", result);
}
return 0;
}
```
2. 基于队列的平均滤波算法
```java
import java.util.LinkedList;
import java.util.Queue;
public class AverageFilter {
private int windowSize;
private Queue
public AverageFilter(int windowSize) {
this.windowSize = windowSize;
this.window = new LinkedList<>();
}
public double filter(double data) {
if (window.size() == windowSize) {
window.poll();
}
window.offer(data);
double sum = 0;
for (double value : window) {
sum += value;
}
return sum / window.size();
}
public static void main(String[] args) {
AverageFilter filter = new AverageFilter(5);
double[] testData = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0};
for (double data : testData) {
double filteredData = filter.filter(data);
System.out.println("Filtered value: " + filteredData);
}
}
}
```
3. 中位值平均滤波算法
```c
include include void median_average_filter(double data[], int size, double *result) { int i, j, min, max, middle; double sum = 0.0; for (i = 0; i < size; i++) { sum += data[i]; } *result = sum / size; // Find min and max min = max = data; for (i = 1; i < size; i++) { if (data[i] < min) min = data[i]; if (data[i] > max) max = data[i]; } // Remove min and max for (i = 0; i < size; i++) { if (data[i] != min && data[i] != max) { sum -= data[i]; } } *result = sum / (size - 2); } int main() { double data[] = {1.0, 2.0, 3.0, 4.0, 5.0}; int size = sizeof(data) / sizeof(data); double result; median_average_filter(data, size, &result); printf("Filtered value: %.2f\n", result); return 0; } ``` 这些示例展示了如何在不同编程语言中实现平均滤波算法。你可以根据具体需求选择合适的算法和编程语言。