用C语言写一个算数平均值滤波
时间: 2024-11-12 13:42:05 浏览: 18
在C语言中,我们可以使用数组和循环来实现简单的算术平均值滤波。假设我们有一个一维数组`data`,需要计算其连续n个元素的平均值,可以这样做:
```c
#include <stdio.h>
#define FILTER_SIZE 5 // 滤波窗口大小
void average_filter(int data[], int size, int filtered[], int window) {
if (window > size) {
printf("Error: Window size larger than array length.\n");
return;
}
int sum = 0; // 初始化累计和
for (int i = 0; i < window; ++i) { // 遍历窗口内的数据
sum += data[i];
}
filtered[0] = sum / window; // 存储第一个窗口的平均值
for (int i = 1; i < size - window + 1; ++i) { // 遍历整个数组
sum -= data[i - window]; // 更新累加和,移除旧的数据点
sum += data[i]; // 添加新的数据点
filtered[i] = sum / window;
}
}
int main() {
int raw_data[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int filtered_data[FILTER_SIZE];
int size = sizeof(raw_data) / sizeof(raw_data[0]);
average_filter(raw_data, size, filtered_data, FILTER_SIZE);
for (int i = 0; i < size; ++i) {
printf("Filtered value at index %d is: %.2f\n", i, filtered_data[i]);
}
return 0;
}
```
在这个例子中,`average_filter`函数接受原始数据、数组长度、过滤后的结果数组以及滤波窗口大小。它先计算首段数据的平均值,然后遍历整个数组,每次更新平均值。
阅读全文