用c语言写一段滤波函数
时间: 2024-12-17 12:22:55 浏览: 2
在C语言中,滤波通常涉及到数字信号处理,特别是线性滤波器,如均值滤波、中值滤波或高斯滤波。这里是一个简单的例子,展示如何用一维数组实现一个平均滤波器:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义滤波器窗口大小
#define FILTER_SIZE 5
// 简单的均值滤波函数
void mean_filter(int input[], int output[], int len) {
if (len < FILTER_SIZE) {
printf("输入长度小于滤波器大小,无法滤波\n");
return;
}
int sum = 0;
for (int i = 0; i < FILTER_SIZE; i++) {
sum += input[i];
}
// 滤波结果等于平均值
for (int j = 0; j < len - FILTER_SIZE + 1; j++) {
output[j] = sum / FILTER_SIZE;
sum -= input[j];
sum += input[j + FILTER_SIZE];
}
}
// 测试函数
int main() {
int input[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int output[FILTER_SIZE * 2]; // 输出数组略大于输入,用于存储过滤后的数据
int len = sizeof(input) / sizeof(input[0]);
mean_filter(input, output, len);
printf("原始数据: ");
for (int i = 0; i < len; i++) {
printf("%d ", input[i]);
}
printf("\n");
printf("滤波后数据: ");
for (int i = 0; i < len - FILTER_SIZE + 1; i++) {
printf("%d ", output[i]);
}
printf("\n");
return 0;
}
```
在这个例子中,`mean_filter` 函数计算了输入数组的一段连续元素的平均值,并将结果存储到输出数组中。注意,为了保持滤波效果,实际应用中需要适当的边界处理。
阅读全文