我需要一个平均滤波的c语言代码,输入实时的数据,输出滤波过后的数据,和中值滤波的c语言函数,输入实时的数据,输出滤波过后的数据
时间: 2024-05-07 17:21:55 浏览: 65
以下是平均滤波的C语言代码:
```c
#define WINDOW_SIZE 5 // 定义滑动窗口大小
float average_filter(float new_data) {
static float data_buffer[WINDOW_SIZE] = {0}; // 静态数组作为滑动窗口
static int buffer_index = 0; // 当前数据存储位置
float sum = 0;
// 将新数据存储到滑动窗口中
data_buffer[buffer_index++] = new_data;
if(buffer_index >= WINDOW_SIZE) { // 如果存储位置超出滑动窗口,回到第一个位置
buffer_index = 0;
}
// 计算滑动窗口内数据的平均值
for(int i = 0; i < WINDOW_SIZE; ++i) {
sum += data_buffer[i];
}
return sum / WINDOW_SIZE;
}
```
以下是中值滤波的C语言函数:
```c
#define WINDOW_SIZE 5 // 定义滑动窗口大小
float median_filter(float new_data) {
static float data_buffer[WINDOW_SIZE] = {0}; // 静态数组作为滑动窗口
static int buffer_index = 0; // 当前数据存储位置
float sorted_buffer[WINDOW_SIZE]; // 用于存储排好序的滑动窗口数据
// 将新数据存储到滑动窗口中
data_buffer[buffer_index++] = new_data;
if(buffer_index >= WINDOW_SIZE) { // 如果存储位置超出滑动窗口,回到第一个位置
buffer_index = 0;
}
// 将滑动窗口内的数据进行排序
for(int i = 0; i < WINDOW_SIZE; ++i) {
sorted_buffer[i] = data_buffer[i];
}
for(int i = 0; i < WINDOW_SIZE-1; ++i) {
for(int j = i+1; j < WINDOW_SIZE; ++j) {
if(sorted_buffer[j] < sorted_buffer[i]) {
float temp = sorted_buffer[i];
sorted_buffer[i] = sorted_buffer[j];
sorted_buffer[j] = temp;
}
}
}
// 返回中间位置的值作为滤波结果
return sorted_buffer[WINDOW_SIZE/2];
}
```
阅读全文